Register
범용 레지스터(General-Purpose Registers, GPR)
- 다양한 용도로 사용되는 레지스터로, 관행적으로 용도가 있다.
- x64 기준 16개의 범용 레지스터가 있다.
rax rcx rdx r8 r9 r10 r11 rbx rsi rdi rbp r12 r13 r14 r15 rsp
rax
- 함수 종료 후 해당 함수의 리턴값이 저장되는 레지스터
rcx, rdx, r8, r9
- Window 64bit에서 함수 호출 시 필요한 인자들을 차례로 저장한다.
rsp
- Stack Pointer
- 스택 가장 위 주소를 가리킨다.
명령어 포인터(Instruction Pointer)
rip
- 명령어 포인터(Instruction Pointer)
- 다음에 실행할 명령어가 저장된 주소를 가리킨다.
- 범용 레지스터가 아니다.
Data Size
WORD
- CPU가 사용하는 값의 크기의 단위
- 16bit 크기
DWORD
QWORD
- 64bit(8byte) 크기
- x64 (64bit CPU) 레지스터들이 담을 수 있는 값의 크기
rcx
- 레지스터에 저장된 값 중 하위 32bit 또는 하위 16bit나 하위 8bit(1byte)만 연산에 사용하는 것이 가능하다.
- 레지스터의 하위 32bit에 접근할 때 ecx, 하위 16bit에 접근할 때 cx를 사용한다.
r8 ~ r15
- x64 범용 레지스터
- 하위 일부 비트만 접근할 때 사용할 수 있다.
- r8의 경우 하위 32bit, 16bit, 8bit에 접근할 때 각각 r8d, r8w, r8b 레이스터 이름을 사용한다.
- r8d에서 d는 dword, w은 word, b는 byte의 약자인듯
- d, w, b 접미사 붙이는 방식은 r8~r15에서 동일하게 사용한다.
상태 레지스터 FLAGS
- 현재 상태나 조건을 0과 1로 나타내는 레지스터
- 64bit에서 각 한 비트씩은 서로 다른 상태를 나타낸다.
CF (Carry Flag)
- 연산 시 자리 올림(carry) 생기는 경우 CF = 1
- 부호 없는(unsigned) 값의 연산에 쓰인다.
ZF (Zero Flag)
SF (Sign Flag)
- 부호 있는(signed) 값의 연산에 쓰인다.
- 결과가 양수이면, 즉 최상위 비트가 0이면 SF = 0
- 결과가 음수이면, 즉 최상위 비트가 1이면 SF = 1
OF (Overflow Flag)
- 부호 있는(signed) 연산에서 자리 올림을 OF로 표현한다. (CF 역할)
- 부호 있는 값 대상 산술연산에서 자리 올림은 표시할 수 있는 값의 범위를 넘어간 overflow를 의미한다.