X86_64 레지스터 메모
x86-64 레지스터
Dream Hack 에서 제공하는 운영체제에 있는 내용으로 자주 참고할 내용이라 메모함
General Register
- 주용도는 있으나 다양한 용도로도 사용되는 레지스터
이름 | 주용도 |
---|---|
rax (accumulator register) | 함수의 반환 값 |
rbx (base register) | x64에서는 주된 용도 없음 |
rcx (counter register) | 반복문의 반복 횟수, 각종 연산의 시행 횟수 |
rdx (data register) | x64에서는 주된 용도 없음 |
rsi (source index) | 데이터를 옮길 때 원본을 가리키는 포인터 |
rdi (destination index) | 데이터를 옮길 때 목적지를 가리키는 포인터 |
rsp (stack pointer) | 사용중인 스택의 위치를 가리키는 포인터 |
rbp (stack base pointer) | 스택의 바닥을 가리키는 포인터 |
r8 … r15 | x64 에 추가적으로 있는 레지스터 |
Segment Register
cs
,ds
,ss
,es
,fs
,gs
- x86 시절엔 4기가에 한정된 접근 가능한 메모리를 확대하기 위해 offset 으로 사용
- x64 에선 앞에 세개는 주기능이 있고, 나머진 OS의 재량에 맞긴 범용 레지스터
- x64 에서는 16 bit
이름 | 주용도 |
---|---|
cs | 코드영역 |
ds | 데이터 메모리 영역 |
ss | 스택 메모리 영역 |
Instruction Pointer(IP) Register
- OS 에 따라
eip
,rip
를 보게 됨. - 어느 코드를 실행할지 가리킴
call
과ret
명령어에서 이를 스택에 저장하고 꺼내서 다음 명령어를 찾음.
Flag Register
- x64 에는 과거 16 bit Flag Register 가 확장된 64 bit
RFLAGS
를 가짐 - 64 개의 상태가 존재하지만 오른쪽 20 여개만 사용됨
- 크게 Status Flag, Control Flag, System Flag 로 나누어짐
- ALU 계산 등이 이루어지면 여기 플래그의 상태를 보고 상태를 확인할 수 있음.
플래그 | 종류 | 의미 |
---|---|---|
CF(Carry Flag) | Status | 부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정 됩니다. |
ZF(Zero Flag) | Status | 연산의 결과가 0일 경우 설정 됩니다. |
SF(Sign Flag) | Status | 연산의 결과가 음수일 경우 설정 됩니다. |
OF(Overflow Flag) | Status | 부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정 됩니다. |
Register 호환
하위비트는 공유하고 상위비트가 추가되는 형식임.
접두사로는
- R => 64bit
- E => 32bit
- 없음 => 16 bit
접미사
- H -> 16 bit 에서 상위 8 bit
- L -> 16 bit 에서 하위 8 bit
댓글남기기