Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
x64 mimarisi, x86'nın yeni bir 64 bit modu ve x86 ile aynı eski 32 bit modu sağlayan geriye dönük uyumlu bir uzantısıdır. Bu mimari, x86'nın sekiz genel amaçlı kaydını 64 bit'e genişletir, sekiz yeni kayıt ekler ve modern 64 bit programlama için gelişmiş çağrı kuralları ve adresleme modları sunar.
"x64" terimi hem AMD64 hem de Intel 64 içerir. Yönerge kümeleri neredeyse aynıdır.
Kayıtlar
x64, x86'nın sekiz genel amaçlı yazmaçını 64 bit olacak şekilde genişletir ve sekiz yeni 64 bit yazmaç ekler. 64 bit yazmaçların adları "r" ile başlar. Örneğin, eax'in 64 bit uzantısı rax olarak adlandırılır. Yeni yazmaçlar r8 ile r15 olarak adlandırılmıştır.
Her yazmaçtaki alt 32 bit, 16 bit ve 8 bit, işlemcilerde doğrudan adreslenebilir. Bu doğrudan adreslenebilirlik, önceden alt 8 biti adreslenemeyen esi gibi yazmaçları içerir. Aşağıdaki tabloda, 64 bit yazmaçların alt bölümleri için derleme dili adları belirtilmektedir.
| 64 bitlik yazmaç | Daha düşük 32 bit | Daha düşük 16 bit | Alt 8 bit düzeltme |
|---|---|---|---|
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 |
32-bit alt yazmacına çıkış yapan işlemler otomatik olarak sıfırlarla genişletilerek 64-bit yazmacın tamamına uygulanır. 8 bit veya 16 bit alt kayıtlara çıkış yapan işlemler sıfır genişletme yapmaz (bu davranış x86 ile uyumludur).
Yüksek 8 bit ax, bx, cx ve dx hala ah, bh, ch ve dh olarak adreslenebilir ancak tüm operand türleriyle kullanılamaz.
Komut işaretçisi eip ve bayrak yazmacı 64 bit'e genişletilir (sırasıyla rip ve rflags).
x64 işlemci ayrıca çeşitli kayan nokta yazmaç kümeleri de sağlar:
Sekiz adet 80 bit x87 yazmaç.
Sekiz 64 bit MMX yazmaç. (Bu yazmaçlar x87 yazmaçlarıyla çakışıyor.)
Sekiz 128 bit SSE yazmaçlarından oluşan özgün küme 16'ya yükseltilir.
Çağırma kuralları
x86 mimarisinden farklı olarak, C/C++ derleyicisi x64 üzerinde yalnızca bir çağrı kuralını destekler. Bu çağırma kuralı, x64'te kullanılabilir yazmaç sayısının artmasından yararlanır:
İlk dört tamsayı veya işaretçi parametresi rcx, rdx, r8 ve r9 yazmaçlarında geçirilir.
İlk dört kayan nokta parametresi, xmm0-xmm3 olan ilk dört SSE yazmacında geçirilir.
Çağıran, yazmaçlarda geçirilen bağımsız değişkenler için yığında yer ayırır. Çağrılan işlev, registerların içeriğini yığına aktarmak için bu alanı kullanabilir.
Yığındaki diğer bağımsız değişkenleri geçirirsiniz.
rax yazmacında bir tamsayı veya işaretçi dönüş değeri döndürülürken, xmm0'de kayan nokta dönüş değeri döndürülür.
rax, rcx, rdx, r8-r11 geçicidir.
rbx, rbp, rdi, rsi, r12-r15 kalıcı değildir.
C++ için çağırma kuralı benzerdir. Bu işaretçi örtük bir ilk parametre olarak geçirilir. Sonraki üç parametre kalan register'lara aktarılırken geri kalanı yığına aktarılır.
Adresleme modları
64 bit modundaki adresleme modları benzerdir ancak x86 ile aynı değildir.
64 bit yazmaçlara başvuran yönergeler, otomatik olarak 64 bit hassasiyetle çalışır. Örneğin, mov rax, [rbx] rbx'te başlayan 8 baytı rax'a taşır.
64 bit anlık sabitler veya sabit adresler için özel bir mov yönergesi biçimi vardır. Diğer tüm yönergeler için, anlık sabitler veya sabit adresler hala 32 bittir.
x64 yeni bir rip göreli adresleme modu sağlar. Tek bir sabit adrese ait direktifler rip kaydırmaları olarak kodlanır. Örneğin mov rax, [addr] yönergesi, addr + + rip adresinden başlayarak rax'e 8 bayt taşır.
Yönerge işaretçisine ve yığın işaretçisine örtük olarak başvuran jmp, call, push ve pop gibi yönergeler, x64 platformunda bunları 64 bitlik yazmaçlar olarak ele alır.