X86_64 레지스터 메모

5 분 소요

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 를 보게 됨.
  • 어느 코드를 실행할지 가리킴
  • callret 명령어에서 이를 스택에 저장하고 꺼내서 다음 명령어를 찾음.

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

댓글남기기