이 내용은 출처 불명이므로 내용이 전혀 검증되어있지 않음
글에 앞서서 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