2016-02-26 83 views
1

對不起,我在S/O上沒有很長時間,並且在asm上有一個newb。確實64位代碼佔用32位代碼更多的存儲空間?

我一直在閱讀Intel,Amd和nasm文檔,ref.x86asm.net,sandpile.org和wiki.osdev.org。

有一件事我不是很欣賞的是是否:

  1. 64位指令實際上是更大的(長模式),不是因爲前綴的32個指令(在保護模式下)......或者是否說明寬度相同?
  2. 當給出操作數時,它們通常是零填充的(自動),但這是由編譯時的彙編程序還是運行時的處理器完成的?

很抱歉,如果這是真的很明顯...

+0

如果每條指令都做了更多的工作,您可能需要*更少的*指令。 –

回答

5

您只需組裝一些代碼或讀取指令集參考。是的,64位操作和訪問新寄存器需要一個REX前綴,這樣可以使代碼更長。在64位模式的32個操作保持相同長度:

89 D8  mov eax, ebx ; normal size 2 bytes 
41 89 D8 mov r8d, ebx ; REX prefix to access r8d 
48 89 D8 mov rax, rbx ; REX prefix to use 64 bit size 

零擴展發生在硬件如果只寫一個64位寄存器的低32位。

0

對於基本指令:

mov ax, 0x1 

予編譯[比特32]或[比特64],其結果是:

66 B8 01 00 
在這兩種情況下

。所以我猜想至少對於mov來說沒有什麼區別。