Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
X64-arkitekturen är ett bakåtkompatibelt tillägg av x86 som ger ett nytt 64-bitarsläge och ett äldre 32-bitarsläge som är identiskt med x86. Den här arkitekturen utökar x86:s åtta allmänna register till 64-bitars, lägger till åtta nya register och introducerar förbättrade samtalskonventioner och adresslägen för modern 64-bitars programmering.
Termen "x64" innehåller både AMD64 och Intel 64. Instruktionsuppsättningarna är nästan identiska.
Register
x64 utökar x86:s åtta allmänna register till 64-bitars och lägger till åtta nya 64-bitarsregister. 64-bitarsregister har namn som börjar med "r". Till exempel kallas 64-bitarstillägget av eax för rax. De nya registren heter r8 till r15.
De lägre 32 bitarna, 16 bitar och 8 bitar av varje register kan adresseras direkt i operander. Den här direkta adresserbarheten omfattar register som esi, vars lägre 8 bitar inte tidigare var adresserbara. I följande tabell anges sammansättningsspråknamnen för de lägre delarna av 64-bitarsregister.
| 64-bitarsregister | Lägre 32 bitar | Lägre 16 bitar | Fix av de lägre 8 bitarna |
|---|---|---|---|
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 |
rsp |
esp |
sp |
spl |
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 |
Åtgärder som matar ut till ett 32-bitars underregister nollutsträcks automatiskt till hela 64-bitarsregistret. Åtgärder som ger utdata till 8-bitars eller 16-bitars underregister nollfylls inte (det här beteendet är kompatibelt med x86).
De höga 8 bitarna av ax, bx, cx och dx är fortfarande adresserbara som ah, bh, ch och dh men kan inte användas med alla typer av operander.
Instruktionspekarens eip - och flaggregister utökas till 64 bitar (rip respektive rflags).
X64-processorn innehåller också flera uppsättningar flyttalsregister:
Åtta 80-bitars x87-register.
Åtta 64-bitars MMX-register. (Dessa register överlappar x87-registren.)
Den ursprungliga uppsättningen med åtta 128-bitars SSE-register ökas till 16.
Samtalskonventioner
Till skillnad från x86-arkitekturen stöder C/C++-kompilatorn endast en anropskonvention på x64. Den här anropskonventionen utnyttjar det ökade antalet tillgängliga register på x64:
De första fyra heltals- eller pekarparametrarna skickas i registeren rcx, rdx, r8 och r9 .
De första fyra flyttalsparametrarna skickas i de fyra första SSE-register, xmm0-xmm3.
Anroparen reserverar utrymme på stacken för argument som skickas i register. Den anropade funktionen kan använda det här utrymmet för att spilla innehållet i register till stacken.
Du lägger alla andra argument i stacken.
Ett heltals- eller pekarreturvärde returneras i rax-registret , medan ett flyttalsreturvärde returneras i xmm0.
rax, rcx, rdx, r8-r11 är flyktiga.
rbx, rbp, rdi, rsi, r12-r15 är icke-volatila.
Anropskonventionen för C++ är liknande. Den this-pekaren skickas som en implicit första parameter. De följande tre parametrarna skickas i återstående register, medan resten skickas på stacken.
Adresslägen
Adresslägena i 64-bitarsläge är liknande men inte identiska med x86.
Instruktioner som refererar till 64-bitarsregister utförs automatiskt med 64-bitars precision. Till exempel flyttar mov rax, [rbx] 8 byte från rbx till rax.
En särskild form av mov-instruktionen finns för 64-bitars omedelbara konstanter eller konstanta adresser. För alla andra instruktioner är omedelbara konstanter eller konstanta adresser fortfarande 32 bitar.
x64 tillhandahåller ett nytt rip-relative-adresseringsläge. Instruktioner som refererar till en enda konstant adress kodas som förskjutningar från rip. Instruktionen mov rax, [addr] flyttar till exempel 8 byte från och med addr + rip till rax.
Instruktioner, till exempel jmp, anrop, push och pop, som implicit refererar till instruktionspekaren och stackpekaren behandlar dem som 64-bitarsregister på x64.