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 를 의미할 수 있음

댓글남기기