'Intel x86'에 해당되는 글 1건

  1. 2012.08.18 CPU register
OS/Concept2012. 8. 18. 20:25

CPU register



CPU에서 사용되는 Register 종류

▷ General-Purpose Register

▷ Segment Register

▷ EFLAGS Register

▷ EIP Register


General-Purpose Register


논리, 산술 연산에 사용되는 operand나 주소 계산을 위한 operand, memory pointer에 사용됩니다.

▷ EAX (Extended Accumulator Register) : 산술연산, 함수 return 값 저장

▷ EBX (Extended Base Register) : DS Segment의 Data를 가리키는 역할, 주소지정 확대

▷ ECX (Extended Counter Register) : Loop의 반복 횟수, bit shift 수 저장

▷ EDX (Extended Data Register) : 입출력 동작

▷ ESI (Extended Source Register) : Memory 복사에서 출발지 index

▷ EDI (Extended Destination Register) : Memory 복사에서 목적지 index

▷ ESP (Extended Stack Register) : Stack pointer, Stack의 TOP을 가리킴

▷ EBP (Extended Base Register) : Stack 내부의 변수 값을 읽을때 사용, Stack frame의 시작점


Segment Register


Memory에서 segment를 확인하는 pointer입니다.

▷ CS : Code segment의 시작 주소 저장

▷ SS : Stack segment의 시작 주소 저장

▷ DS : Data segment의 시작 주소 저장

▷ ES : 여분의 Data segment용, 문자열 처리 명령시 목적지 data 저장

▷ FS/GS : 여분의 segment용, IA32 프로세서에서만 사용 가능


EFLAGS Register


상태 플래그, 제어 플래그, 시스템 플래그 그룹으로 구성되어 있으며, 1, 3, 5, 15, 22 ~ 31 bit는 예약되어 있습니다.


상태 플래그 (Status Flags)

산술연산(ADD, SUB, MUL, DIV)을 하는 명령의 결과를 가리킵니다.

▷ CF (bit 0) Carry Flag : 부호 없는 정수끼리의 산술연산 후 오버플로우 확인

- 0 : 오버플로우 발생 안한 경우

- 1 : 오버플로우 발생

▷ PF (bit 2) Parity Flag

▷ AF (bit 4) Adjust Flag

▷ ZF (bit 6) Zero Flag : 산술연산 또는 비교동작의 결과 표시

- 0 : 결과가 0 이 아닌 경우

- 1 : 결과가 0 인 경우

▷ SF (bit 7) Sign Flag

▷ OF (bit 11) Overflow Flag : 부호 있는 수 끼리의 산술연산 후 오버플로우 확인

- 0 : 오버플로우 발생 안한 경우

- 1 : 오버플로우 발생 (너무 큰 정수 또는 너무 작은 음수인 경우)


제어 플래그 (Control Flags)

▷ DF (bit 10) Direction Flag


시스템 플래그 (System Flags)

▷ TF (bit 8) Trap Flag

▷ IF (bit 9) Interrupt enable Flag

▷ IOPL (bit 12, 13) I/O Privilege Level field

▷ NT (bit 14) Nested task Flag

▷ RF (bit 16) Resume Flag

▷ VM (bit 17) Virtual-8086 Mode flag

▷ AC (bit 18) Alignment Check flag

▷ VIF (bit 19) Virtual Interrupt Flag

▷ VIP (bit 20) Virtual Interrupt Pending flag

▷ ID (bit 21) Identification flag


EIP Register


현재 프로세서가 실행하고 있는 명령 바로 다음에 실행할 명령어의 offset을 저장합니다.

소프트웨어에 의해 조작될 수 없으며, CALL, JMP, RET와 같은 control-transfer 명령에 의해서만 영향을 받습니다.


'OS > Concept' 카테고리의 다른 글

Copy On Write  (0) 2012.11.15
Stack frame  (0) 2012.08.26
Little endian  (0) 2012.08.16
Stack에 변수가 저장되는 방식  (0) 2012.08.16
Posted by slimV