35.1.7.2. X86-64 (AMD64)
THIS SECTION IS UNDER CONSTRUCTION
AMD:
Opteron ['03] --- > Athlon64 ['03]
Intel:
Pentium 4 with EM64T ['04]
Регистры
-----------------------------------------------------------------
rax eax ax al
rbx ebx bx bl
rcx ecx cx cl
rdx edx dx dl
rsi esi si sil
rdi edi di dil
rbp ebp bp bpl < - Frame pointer
rsp esp sp spl < - Stack pointer
r8 r8d r8w r8b
r9 r9d r9w r9b
r10 r10d r10w r10b
r11 r11d r11w r11b
r12 r12d r12w r12b
r13 r13d r13w r13b
r14 r14d r14w r14b
r15 r15d r15w r15b
Zero Register: None
Direction:
<------------
Memory Access:
mov rax,[rip+1234h]
Immediately Data
add ah,23h
Byte order: Little-endian
Instruction Len: variable 1-15 bytes long
Main Generations:
AMD64 Base set + 3DNow!
I64ME Base set + SSE3
--------------------------------------------------------------
Форматы обращения к памяти:
Format of Postbyte:
MM RRR MMM
MM - Memory addresing mode
RRR - Register operand address (high bit is REX.R)
MMM - Memory operand address (high bit is REX.B)
64bit memory (default)
MMM Default MM Field
Field 00 01 10 11=MMM is reg
0000 [RAX] [RAX+O8] [RAX+O32]
0001 [RCX] [RCX+O8] [RCX+O32]
0010 [RDX] [RDX+O8] [RDX+O32]
0011 [RBX] [RBX+O8] [RBX+O32]
0100 [SIB] [SIB+O8] [SIB+O32]
0101 [RIP+O32] [RBP+O8] [RBP+O32]
0110 [RSI] [RSI+O8] [RSI+O32]
0111 [RDI] [RDI+O8] [RDI+O32]
1000 [R8] [R8+O8] [R8+O32]
1001 [R9] [R9+O8] [R9+O32]
1010 [R10] [R10+O8] [R10+O32]
1011 [R11] [R11+O8] [R11+O32]
1100 [R12] [R12+O8] [R12+O32]
1101 [R13] [R13+O8] [R13+O32]
1110 [R14] [R14+O8] [R14+O32]
1111 [R15] [R15+O8] [R15+O32]
32bit memory (Has 67h 32 bit memory address prefix):
MMM Default MM Field
Field 00 01 10 11=MMM is reg
0000 [EAX] [EAX+O8] [EAX+O32]
0001 [ECX] [ECX+O8] [ECX+O32]
0010 [EDX] [EDX+O8] [EDX+O32]
0011 [EBX] [EBX+O8] [EBX+O32]
0100 [SIB] [SIB+O8] [SIB+O32]
0101 [EIP+O32] [EBP+O8] [EBP+O32]
0110 [ESI] [ESI+O8] [ESI+O32]
0111 [EDI] [EDI+O8] [EDI+O32]
1000 [R8D] [R8D+O8] [R8D+O32]
1001 [R9D] [R9D+O8] [R9D+O32]
1010 [R10D] [R10D+O8] [R10D+O32]
1011 [R11D] [R11D+O8] [R11D+O32]
1100 [R12D] [R12D+O8] [R12D+O32]
1101 [R13D] [R13D+O8] [R13D+O32]
1110 [R14D] [R14D+O8] [R14D+O32]
1111 [R15D] [R15D+O8] [R15D+O32]
Here we show only 64-bit SIB, 32-bit is same but DWORD registers,
instead of QWORD.
SIB is (Scale/Base/Index):
SS BBB III
Note: SIB address calculated as :
=+*(2^(Scale))
BBB (high bit is REX.B)
III (high bit is REX.X
Field Base
BBB Register Note
0000 RAX
0001 RCX
0010 RDX
0011 RBX
0100 RSP
0101 RIP+O32 If MM=00 (Postbyte)
RBP If MM<>00 (Postbyte)
0110 RSI
0111 RDI
1000 R8
1001 R9
1010 R10
1011 R11
1100 R12
1101 R13
1110 R14
1111 R15
Field Index
III register Note
0000 RAX
0001 RCX
0010 RDX
0011 RBX
0100 Never Index SS can be 00
0101 RBP
0110 RSI
0111 RDI
1000 R8
1001 R9
1010 R10
1011 R11
1100 R12
1101 R13
1110 R14
1111 R15
Field Scale coefficient
SS =2^(SS)
00 1
01 2
10 4
11 8
Особенности
64-битное расширение x86 (IA-32) архитектуры
Расширения Multimedia: MMX,SSE,SSE2 {3DNow!/SSE3}
Index Prev Next