|
|
출처 http://thepassion.tistory.com/64
범용 레지스터( General Register ) |
|||||||||||||||||||||||||||||||||||
범용 레지스터는 연산 결과를 받을 수도 있으며, 연산에 사용되어질 수도 있는 레지스터로 과거 8bit컴퓨터에서는 연산 결과를 저장하기 위하여 특정 레지스터를 사용할 수 밖에 없었으나 8086에서는 범용 레지스터를 사용하여 모든 연산을 수행 할 수 있다 |
|||||||||||||||||||||||||||||||||||
AX( AH, |
Accumulator Register 산술, 놀리 연산의 중심이 되는 레지스터이며, Input/Output 포트의 입출력 명령 또한 주로 이 레지스터를 사용한다. |
||||||||||||||||||||||||||||||||||
BX( BH, BL ) |
Base Register 간접 번지 지정 시 번지 레지스터. 베이스 레지스터로 주로 사용된다 |
||||||||||||||||||||||||||||||||||
CX( CH, CL ) |
Count Register 루프와 같이 어떤 명령을 반복적으로 수행하고자 할 때 반복 횟수를 지정하는데 주로 사용된다 |
||||||||||||||||||||||||||||||||||
DX( DH, DL ) |
Data Register 간접 번지 지정에 의한 입출력 명령을 실행 할 때 번지 지정에 사용된다. 곱셈, 나눗셈을 할 때는 보조 어큐뮬레이터로 사용되이 지기도 한다. |
||||||||||||||||||||||||||||||||||
포인터 레지스터 |
|||||||||||||||||||||||||||||||||||
SP |
Stack Pointer 현재까지 사용되어진 스택의 위치를 저장하기 위하여 사용되는 레지스터로 세그먼트 레지스터 SS와 함께 사용된다. |
||||||||||||||||||||||||||||||||||
BP |
Base Pointer 스택의 데이터를 액세스 하기 위해 사용된다. |
||||||||||||||||||||||||||||||||||
인덱스 레지스터 |
|||||||||||||||||||||||||||||||||||
SI, DI |
Source Index 다른 범용 레지스터와 마찬가지로 연산과 간접 번지 지정에 사용된다. 그 밖에 문자열의 전송이나 비교 등을 하는 스트링 명령에서 SI는 source가 되는 문자열을 나타내고, DI는 destination이 되는 문자열의 번지를 표시하는데 쓰인다. |
||||||||||||||||||||||||||||||||||
IP( 명령 포인터 ) |
|||||||||||||||||||||||||||||||||||
IP |
Instruction Pointer 이 레지스터는 언제나 다음에 실행할 명령이 들어 있는 메모리의 번지를 가리킨다. CS 세그먼트 레지스터와 한 쌍이 되어 실행 번지가 만들어 진다. |
||||||||||||||||||||||||||||||||||
플래그 레지스터 |
|||||||||||||||||||||||||||||||||||
8086에는 16비트로 된 플래그 레지스터가 준비되어 있다. 연산의 결과 및 시스템 제어를 위한 정보가 각각 배정되어 있다. |
|||||||||||||||||||||||||||||||||||
상태 플래그
|
|||||||||||||||||||||||||||||||||||
Flags |
Status Flags |
||||||||||||||||||||||||||||||||||
CF |
Carry Flag 연산 명령 실행 후 최상위 비트(MSB)에 덧셈에 따른 자리올림(carry) 또는 뺄셈에 의한 빌림(borrow)이 생길 때 설정된다. |
||||||||||||||||||||||||||||||||||
PF |
Parity Flag 연산의 결과 하위 8비트 중에서 1로 되어 있는 비트의 개수가 짝수 개일 때 셋(1)되고, 홀수 개일 때는 리셋(0)된다. |
||||||||||||||||||||||||||||||||||
AF |
Auxiliary Flag 연산의 결과 하위 4비트에 자리올림 또는 빌림이 TODRURT을 경우 설정된다. 10진 연산 처리를 할 경우에 이용된다. |
||||||||||||||||||||||||||||||||||
ZF |
Zero Flag 연산 결과가 0이 될 때 설정된다. 비교 명령 등도 레지스터의 내용은 변경시키지 않지만 뺄셈이 이루어지므로 그 결과에 따라서 설정된다. |
||||||||||||||||||||||||||||||||||
SF |
Sing Flag 연산 결과 최상위 비트가 1일 때 설정되고, 0일 때 리셋된다. 부호가 있는 수치의 경우에는 최상위 비트(MSB)가 1이면 음수를 표시한다. |
||||||||||||||||||||||||||||||||||
OF |
Overflow Flag 부호 연산 처리의 결과 부호부 2진 표시로 오버플로우가 생겼을 때 설정된다. 바이트 연산에서는 -128~+128, 워드 연산에서는 -32768~+32767의 범위를 초과했다는 것을 표시한다. |
||||||||||||||||||||||||||||||||||
컨트롤 플래그 |
|||||||||||||||||||||||||||||||||||
Flags |
Status Flags |
||||||||||||||||||||||||||||||||||
DF |
Direction Flag 스트링 처리에서 연속하여 처리되는 문자열에 대해서 그 처리 방향을 표시한다. 스트링 명열의 실행에 앞서서 이 플래그를 |
||||||||||||||||||||||||||||||||||
IF |
Interrupt Flag 8086의 인터럽트 중에서 하드웨어로부터의 인터럽트에 관하여 제어를 한다. IF 플래그가 1일 때에는 인터럽트를 받아들이고, 0일 때에는 인터럽트를 받아들이지 않는다. |
||||||||||||||||||||||||||||||||||
TF |
Trap Flag 명령 실행 후 이 플래그가 세트되어 있으면 단일 스텝 인터럽트가 발생한다. 이 기능을 사용하면 하드웨어의 도움을 받을 필요 없이 프로그램을 한 명령씩 실행 시켜 동작을 확인할 수 있다. |
||||||||||||||||||||||||||||||||||
세그먼트 레지스터 |
|||||||||||||||||||||||||||||||||||
프로그램이 수행되기 위해서는 여러 가지 메모리 주소가 필요하다. 우선 현재 수행되고 있는 명령어의 위치를 나타내는 값, 프로그램이 사용하는 데이터가 있는 메모리 값, 그리고 함수 호출등을 휘한 스택의 위치를 나타내는 값 . 8086은 어드레스 버스가 20비트로 구성되어 있어서 1MByte까지 메모리 번지를 나타낼 수 있으나 8086에 있는 레지스터는 16비트 밖에 되지 않아서 어떤 명령이 수행되어 메모리를 참조할 때에는 항상 다음과 같이 암시적 또는 명시적으로 세그먼트 레지스터가 개입된다. |
|||||||||||||||||||||||||||||||||||
세그먼트 |
오프셋 |
목적 |
|||||||||||||||||||||||||||||||||
CS( Code Segment ) |
IP |
수행되어질 명령어의 위치 |
|||||||||||||||||||||||||||||||||
DS( Data Segment ) |
AX, BX, CX, DX와 같은 범용레지스터와 BX, DI,SI |
데이터 주소 참조 |
|||||||||||||||||||||||||||||||||
SS( Stack Segment ) |
SP 또는 BP |
스택 주소 참조 |
|||||||||||||||||||||||||||||||||
ES( E Segment ) |
스트링 명령어를 위한 DI |
스트링 목적지 주소 |
각 레지스터에 대한 보다 자세한 내용은 Intel CPU manual(http://www.intel.com/products/processor/manuals/)을 참고하시기 바랍니다.
일반목적의 레지스터
l EAX : Accumulator (함수의 return value로 사용)
l EBX : Points to data in DS
l ECX : Counting
l EDX : I/O pointer
l ESI : Source ptr for strings
l EDI : Destination ptr fro strings
특수한 목적의 레지스터
l ESP : Stack pointer (현재 thread stack의 top 위치를 가리키는 pointer)
l EBP : Points to data on stack (stack frame을 구성하는데 사용)
l EIP : Instruction pointer(다음에 CPU에서 실행되어야 할 instruction을 가리킴)
EFLAGS 레지스터
l Status Flags
n CF : Carry Flag
n PF : Parity Flags
n AF : Auxiliary Carry Flag
n ZF : Zero Flag
n SF : Sign Flag
n OF : Overflow Flag
l Control Flag
n DF : direction Flag
l System Flags
n IF : Interrupt Enable Flag
n TF : Trap Flag
n IOPL : I/O Privilege Level
n NT : Nested Task Flag
n RF : Resume Flag
n VM : Virtual 8086 mode
n AC : Alignment Check (486 only)
Segment 레지스터
l CS : Code segment
l DS : Data segment
l SS : Stack segment
l ES : Extra data segment
l FS : Extra data segment introduced with 386
IE9 이상으로 브라우저를 업그레이드하거나, 크롬, 파이어폭스 등 최신 브라우저를 이용해주세요.