64位代码占用了32位代码的更多存储空间吗?

Jim*_*lls 1 assembly x86-64 nasm 32bit-64bit

对不起,我不太喜欢S/O和asm的全新内容.

我一直在阅读英特尔,Amd和nasm文档,ref.x86asm.net,sandpile.org和wiki.osdev.org.

我不太欣赏的一件事是:

  1. 64位指令实际上比32位指令(在保护模式下)更大(在长模式下),因为前缀...或指令的宽度是否相同?
  2. 当给出操作数时,它们通常是零填充(自动),但这是由编译时的汇编程序还是运行时的处理程序完成的?

对不起,如果这真的很明显......

Jes*_*ter 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
Run Code Online (Sandbox Code Playgroud)

如果只写64位寄存器的低32位,则硬件会发生零扩展.