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 |