确实64位代码占用32位代码更多的存储空间?
问题描述:
对不起,我在S/O上没有很长时间,并且在asm上有一个newb。确实64位代码占用32位代码更多的存储空间?
我一直在阅读Intel,Amd和nasm文档,ref.x86asm.net,sandpile.org和wiki.osdev.org。
有一件事我不是很欣赏的是是否:
- 64位指令实际上是更大的(长模式),不是因为前缀的32个指令(在保护模式下)......或者是否说明宽度相同?
- 当给出操作数时,它们通常是零填充的(自动),但这是由编译时的汇编程序还是运行时的处理器完成的?
很抱歉,如果这是真的很明显...
答
您只需组装一些代码或读取指令集参考。是的,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位。
答
对于基本指令:
mov ax, 0x1
予编译[比特32]或[比特64],其结果是:
66 B8 01 00
在这两种情况下
。所以我猜想至少对于mov来说没有什么区别。
如果每条指令都做了更多的工作,您可能需要*更少的*指令。 –