본문 바로가기

rEVERSE eNGINEERING/rEFERENCES

[ rEVERSE eNGINEERING_rEFERENCES ] Registers.

1. 범용 레지스터
 - 데이터를 처리할 때 사용하는 레지스터

EAX (Extended Accumulator) : 자료이동, 곱셈, 나눗셈, 입출력, 문자열 연산, 정수 함수의 반환값 등에 이용.
EBX (Extended Base Register) : 자료이동, 연산, 번지의 간접 지정, 범용으로 사용.
ECX (Extended Count Register) : 반복문에서 카운터로 주로 사용(자료이동, 연산, 비트의 쉬프트 연산).
EDX (Extended Data Register) : 자료이동, 곱셈, 나눗셈, 입출력, 문자열 연산, EAX레지스터와 조합되어 사용되고, 64비트(Large Integer) 값들의 상위 32비트를 담는 용도로 사용.

범용 레지스터에서 AX, AH, AL의 의미.
AX(Accumulator) : 32비트 EAX에서 기존의 16비트를 의미.
AH(AX High) : AX에서 상위 8비트를 의미.
AL(AX Low) : AX에서 하위 8비트를 의미.

[      AX     ]
[ AH ][ AL ]

물론 BX = BH,BL CX = CH, CL DX = DH, DL로 사용함.


2. 세그먼트 레지스터
 - 메모리의 번지를 지정하는데 활용, 16비트 크기지만 의미하는 크기는 4비트 더 높음.

CS (Code Segment) 레지스터 : 현재 프로그램이 수행되고 있는 세그먼트. IP(Instruction Pointer)와 함께 사용. CS:IP
DS (Data Segment) 레지스터 : 지금 이용되고 있는 변수가 있는 위치의 세그먼트.
ES (Extra Segment) 레지스터 : 데이터 세그먼트의 보조 레지스터.
SS (Stack Segment) 레지스터 : 스택의 세그먼트. SP(Stack Point)와 함께 사용. SS:SP


3. 포인터 레지스터
 - 세그먼트 레지스터와 함께 메모리의 번지(하위)를 지정하는데 사용. 16비트 크기.

IP (Instruction Pointer) : CS와 함께 다음 수행할 메모리의 번지를 지정하는데 활용.
SP (Stack Point) : SS와 함께 스택의 번지를 지정하는데 활용.
BP (Base Point) : SS와 함께 서브루틴에 넘겨진 파라미터의 위치를 지정하는데 사용.


4. 인덱스 레지스터
 - 세그먼트 레지스터와 함께 메모리의 번지(하위)를 지정하는데 사용.

SI (Source Index) : 스트링 명령어에서 시작지점의 메모리의 위치를 지정.
DI (Destination Index) : 스트링 명령어에서 목표지점의 메모리의 위치를 지정.


5. 플래그 레지스터
 - CPU의 상태를 알리거나 CPU의 동작을 제어. 상태 플래그와 제어 플래그로 나뉨.

1) 상태 플래그

CF (Carry Flag) : 연산 명령 실행 후 자리올림이나 빌림이 있었는지 체크.
CLC 명령 = CF비트를 0으로 해제.
STC 명령 = CF비트를 1로 SET.
CMC 명령 = CF의 보수를 취함.

PF (Parity Flag) : 연산 결과가 1인 비트가 짝수개면 1, 홀수개면 0.

AF (Auxiliary Flag) : AL비트에 하위 4비트에서 상위 4비트로의 자리올림이나 자리내림을 표시.

ZF (Zero Flag) : 연산결과가 0임을 표시.

SF (Sign Flag) : 최상위 비트에 의해 이 수가 양수인지 음수인지 표시.

OF (Overflow Flag) : 연산결과가 그 레지스터 범위를 초과할때 SET.


2) 제어 플래그

IEF (Interrupt Enable Flag) : 외부 인터럽트를 받아들일 것인가를 결정.
CLI 명령 = 외부 인터럽트를 불허.
STI 명령 = 외부 인터럽트를 허용.

DF (Direction Flag) : 스트링 명령에서 SI, DI를 증가(0 : 자동증가) 또는 감소(1 : 자동증가)하도록 함.


Etc.
부동 소수점 연산장치 (Floating-point unit) : IA-32에 고속의 부동 소수점 연산을 위해 사용.
ST(0), ST(1), ST(2), ST(3), ST(4), ST(5), ST(6), ST(7)로 8개의 부동 소수점 데이터 레지스터가 있다.