본문으로 건너뛰기
  1. Posts/

AMD64의 범용 레지스터 이름

·
어셈블리어
작성자
hw5e
page.hw5e.cc
목차

이 내용은 출처 불명이므로 내용이 전혀 검증되어있지 않음

글에 앞서서 16비트, 32비트 x86을 각각 IA-16, IA-32라고 부를 것이고 64비트쪽은 AMD64라고 부를 것이다.현재는 x86이라고 하면 주로 32비트 쪽을 말하는 것이다. 그리고 IA-16과 IA-32는 x86이지만 IA-64는 x86_64가 아니다.

왜 이런지 이유를 잠깐 말하면 인텔의 16비트 x86을 32비트로 확장하는 것은 인텔이 했지만 32비트에서 64비트로 넘어가는 과정에 인텔은 기존 x86과 호환되지 않는 전혀 다른 구조를 가진 새로운 CPU를 만들고 이것을 IA-64라고 불렀다, 한편 AMD는 x86을 64비트로 확장하는 쪽을 선택했는데, IA-64가 실패하면서 인텔도 AMD의 방식을 사용하게 되었다.

이렇게 인텔이 만든 x86을 AMD가 64비트로 확장한걸 또 인텔이 사용하는 모양새가 되어버려서 현재 x86_64는 AMD64, x64, Intel, IA-32e 등등 다양한 이름으로 불리고 주인인 AMD의 이름을 살린 AMD64와 회사 중립적인 명칭인 x86_64가 주로 사용된다.

AMD64(x86_64)와 x86
#

AMD64는 원래 16비트인 IA-16을 32비트로 확장한 IA-32을 64비트로 확장시킨거라 하위 호환을 위해 이전 명령어 집합의 레지스터 이름은 AMD64의 레지스터의 일부분의 비트를 지칭하게 된다.

첫 8개 레지스터
#

IA-16과 IA-32는 8개의 레지스터가 있었고 AMD64에서는 16개로 늘어났다.

첫 8개의 레지스터는 역할에 따라 이름이 붙었다. 사실 이렇게 이름 붙는건 x86에서나 볼 수 있고 다른 CPU들은 보통 R0,R1 처럼 그냥 숫자로 부른다.

AX CX DX BX SP BP SI DI
Accumulator Counter Base Stack Pointer Stack Base Pointer Destination Index Source Index Data
  • Accumulator
  • Counter
  • Base
  • Stack Pointer
  • Stack Base Pointer
  • Destination Index
  • Source Index
  • Data

여기서 AX CX DX BX 이 네 레지스터의 상위 8비트는 AH, CH, DH, BH (High)라고 부르고 하위 8비트는 AL, CL, DL, BL (Low) 라고 부른다.

7 6 5 4 3 2 1 0
AX - - - - - - -
AH - - - AL - - -

32비트로 넘어가면 확장되었다는 Extend를 붙여서 범용 레지스터의 이름앞에 E가 붙고 64비트에서는 R이 붙는다.

EAX ECX EDX EBX ESP EBP ESI EDI
RAX RCX RDX RBX RSP RBP RSI RDI

각 이름이 차지하는 범위를 표에다 그려보면 대략 이럴 것이다. 너무 길어

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EAX - - - - - - - - - - - - - - -
AX - - - - - - -
AH - - - AL - - -
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RAX - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
EAX - - - - - - - - - - - - - - -
AX - - - - - - -
AH - - - AL - - -

64비트에서 새로 추가된 8개의 레지스터는 그냥 R8-15로 부르고 경우에 따라 앞의 8개 레지스터도 R0-R7로 부르는 것 같기도 하다.

R8 R9 R10 R11 R12 R13 R14 R15

인텔의 APX 확장에서는 범용 레지스터가 16개에서 32개로 늘어난다.

Reply by Email