x86-64 와 동일한 이름
- Intel64
- IA-32e
- EM64T
- amd64
x86-64 레지스터
- x86-64 아키텍처에는 범용 레지스터, 세그먼트 레지스터, 명령어 포인터 레지스터, 플래그 레지스터가 존재
범용 레지스터
- 아래 레지스터 말고도 r8~ r15까지의 범용 레지스터가 더 존재
이름 | 주 용도 |
---|---|
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) | 스택의 바닥을 가리키는 포인터 |
세그먼트 레지스터
- cs, ds, ss, es, fs, gs 의 6가지 세그먼트 레지스터가 존재
- 각 레지스터의 크기는 16비트
- cs, ds, ss 레지스터는 코드 영역, 데이터 영역, 스택 영역을 가리킬 때 사용
- 나머지 레지스터는 운영체제 별로 용도 결정
명령어 포인터 레지스터
- CPU가 어느 부분의 코드를 실행할지 가리키는게 명령어 포인터 레지스터의 역할
- x64 아키텍처의 명령어 레지스터는 rip이며, 크기는 8바이트
플래그 레지스터
- 프로세서의 현재 상태를 저장하고 있는 레지스터
- RFLAGS라고 불리는 64비트 크기의 플래그 레지스터가 존재하지만 실제로 20비트만 사용
플래그 | 의미 |
---|---|
CF (Carry Flag) | 부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정 |
ZF (Zero Flag) | 연산의 결과가 0일 경우 설정 |
SF (Sign Flag) | 연산의 결과가 음수일 경우 설정 |
OF(Overflow Flag) | 부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정 |
레지스터 호환
- x86-64 아키텍처는 IA-32의 64비트 확장 아키텍처이며 호환 가능
- IA-32 비트의 레지스터는 eax, ebx, ecx, edx, esi, edi, esp, ebp이며, x86-64 에서도 사용 가능
- eax는 rax의 하위 32비트를 의미
- IA-16 과도 호환 가능하며, ax, bx, cx, dx, si, di, sp, bp는 IA-32 레지스터의 하위 16비트를 의미
- ax, bx, cx, dx 레지스터는 상위 8비트 하위 8비트씩 나눠 ah, al, bh, bl, ch, cl, dh, dl 를 의미할 수 있음
댓글남기기