8086 프로세서의 레지스터들


레지스터(register)의 종류

데이터 레지스터 - 일시적인 결과를 기록 - 4

포인터 레지스터 - 주소를 저장하는 레지스터 - 3개

인덱스 레지스터 - 데이터의 주소를 저장 - 2

플래그 레지스터 - 연산결과의 정보저장 - 1개

세그먼트 레지스터 - 세그먼트의 시작 주소를 저장 - 4개


총 14개의 레지스터 중에서

데이타 레지스터는 2개로 분할해서 8비트로도 사용할 수 있고 

포인, 인덱스, 세그먼트 레지스터는 16비트로만 사용 가능하다.


데이터 레지스터

각종 데이타 처리를 할때 일시적인 결과를 기록하기 위해 사용하는 16비트 레지스터 및 8비트 레지스터로 프로그래머가 명령 중에 자유롭게 지정 가능한 범용 레지스터이다이들 레지스터들은 상위(AH, BH, CH, DH) 8비트 혹은 하위(AL, BL, CL, DL) 8비트를 엑세스 할 수 있다.


AX (AH,AL) - Accmulator, 산술, 논리 연산, 하위 바이트용 레지스터 I/O 포트와의 출력 명령

BX (BH,BL) - Base, 간접 주소 지정 시 베이스 주소를 가리키는 용도

CX (CH,CL) - Count, 스트링이나 루프에서 반복수를 세 레지스터

DX (DH,DL) - 간접 주소에 의한 입출력 주소 지정에 사용되며 곱셈, 나눗셈에서의 상위 워드용 데이타 레지스터로 

 보조 어큐뮬레이터이다.


포인터 레지스터

SP - Stack pointer, 스택 조작을 위해서 사용하는 레지스터로서 프로그램 실행 중에 데이타의 저장 주소를 기억 고 있는 레지스터이다.

BP - Base pointer,  기본적으로 스택 영역 내의 주소를 지시하지만 스택 세그먼트 SS영역내에 배치한 데이타에 대한 베이스 주소를 저장해 두기 위해 사용된다.

IP - Instruction pointer, 현재의 PC 레지스터와 대응되는 것으로 다음에 실행될 명령어의 주소를 갖는다.


인덱스 레지스터

SI - Source index, 연산항 소스, 소스 데이타 지정에 사용된다.

DI - Destinaiton index, 연산항의 처리 대상, 또는 목적항 데이타를 나타내는데 사용된다.


세그먼트 레지스터

8086/881M바이트의 메모리 내에 4개의 64K 바이트 메모리 블럭을 정의한다이들은 각각 데이타(data), 코드(code), 스택(stack) 및 엑스트라(extra) 세그먼트로 구성되어지며, 이들은 각각 최대 64 KB 크기의 영역을 가질 수 있다. 4개의 세그먼트 전용 레지스터 DS, CS, SS ES는 각 세그먼트의 처음위치(시작주소) 지시한다. 


CS - Code segment, 프로그램 명령 코드를 포함

DS - Data segment, 프로그램을 위한 데이타를 저장

SS - Stack segment, 인터럽트와 서브루틴의 반환 주소를 저장하는데 사용

ES - Extra segment, 여분의 데이타 세그먼트이며, 주로 스트링(string)명령을 수행할 때 사용


8086의 주소버스는 20비트로 되어 있어서 1,048,576(220)바이트의 번지를 지정할 수 있다

그런데 8086/8088프로세서의 레지스터는 16비트이므로 한개의 레지스터로 기록할 수 있는 

주소는 65,536(216)바이트 까지만 가능하다

따라서 8086/8088에서는 두개의 레지스터를 사용하여 20비트 주소를 만들어낸다.


물리적/기계적인 데이터의 주소를 계산해야 하는데

이는 논리적 주소 + 세그먼트 레지스터 값을 통해 얻을 수 있다. 


세그먼트 레지스터를 4비트만큼 왼쪽으로 자리 이동(=16을 곱한다.)하여 

논리적 주소(오프셋)와 덧셈을 하고,  결과로서 20 비트의 주소를 얻게된다

이때 오프셋 값은 하나의 세그먼트에서의 변위(displacement)를 나타낸다.


레지스터의 특성

직접 엑세스 가능한 레지스터

>AX, BX, CX, DX
>AH, BH, CH, DH
>AL, BL, CL, DL
>SI, DI
>DS, ES, SS
>BP, SP
직접 수정이 가능한 플래그
>CF, DF, IF


'computer' 카테고리의 다른 글

신호.  (0) 2012.04.30
Modeling (모델링).  (0) 2012.04.30
8086 프로세서의 레지스터들  (0) 2012.04.12
about 8086 processor  (0) 2012.04.11
segmentation management  (0) 2012.04.11
명령어의 실행속도?  (0) 2012.04.11