2016-02-26 37 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来说没有什么区别。