인텔 프로세서를 통한 명령어 실행사이클 정리

인텔 8086 프로세서 

1978년에 개발된 x86 최초의 모델로 최신 인텔 구조의 시작으로 세그먼트 메모리 모델을 사용헀으며 이후 XT라는 PC가 보급되며 사용되었습니다. 이후 80186, 80286, i386으로 점점 발전해서 펜티엄, 제온까지 x86구조를 사용하게 되었습니다.

프로그램 실행 방식

사용자가 실제 고급언어로 개발한 뒤 프로그램을 실행시키는 것을 정리해보면 다음과 같습니다

  1. 사용자가 프로그래밍 언어(고급 언어)를 통해 하나의 프로그램을 개발
  2. 하나의 프로그램은 각종 명령어와 데이터의 집합
  3. 프로그램을 실행시키게 되면 운영체제가 메인 메모리에 적재 -> 프로세스

생각되는 메모리 구조(좌) 실제 저장되는 메모리 구조(우)

    4. 오른쪽 메모리 구조에서 명령어 실행 사이클에 따라 명령어를 실행함 ( 명령어 코드와 데이터를 따로 저장)

명령어 실행 사이클

1) 명령어 인출(Fetch)

2) 명령어 해독(Decode)

3) 피연산자 인출(Operand fetch)

4) 명령어 실행(Excute)

8086 인텔 프로세서 내부 구조

추가) 레지스터 종류

CPU 내부에 있는 레지스터들은 다양한 종류가 있으며 종류에 따라 용도도 나누어져 있습니다.

크게 범용 레지스터와 세그먼트 레지스터로 나뉘어지게 됩니다.

레지스터는 16bit으로 구성되어 있지만 8bit씩 접근할 수 있도록 AH와 AL 나누어지기도 하며 아래 레지스터는 16bit으로 접근하기 위한 레지스터 이름을 사용하였습니다

범용 레지스터

범용적으로 사용되는 레지스터이지만 용도에 따라 사용되는 부분이 조금씩 달라집니다

  1. AX : 누산기(덧셈, 곱셈)용으로 사용됩니다
  2. BX : DS(데이터 세그먼트) 데이터에 대해 간접 주소 지정시 포인터로 많이 사용됩니다
  3. CX : LOOP(반복문) 카운터 값으로 사용되며 문자열, 반복문 계수를 저장합니다.
  4. SP : 스택 포인터
  5. SI, DI : 인덱스 레지스터(source / 문자열 출발, destination / 문자열 도착)
  6. BP : 확장 프레임 포인터(스택 베이스 포인터, 기준 주소값)

세그먼트 레지스터

  1. CS : 코드 세그먼트 (명령어가 모여있는 공간의 시작주소)
  2. DS : 데이터 세그먼트(데이터가 모여있는 공간의 시작 주소)
  3. SS : 스택의 시작 주소
  4. ES, FS, GS : 데이터에 대한 추가적인 세그먼트

이외 레지스터

  1. IP : 명령어 포인터(IP == PC와 같다)
  2. FLAGS : 상태와 제어 플래그 레지스터
  3. DX ㅣ 입출력에 대한 포인터 레지스터