64 位代码占用的存储空间是否比 32 位代码多 space?

does 64 bit code take up more storage space that 32 bit code?

抱歉,我对 S/O 的兴趣不大,而且是 asm 的新手。

我一直在阅读 Intel、Amd 和 nasm 文档,参考 x86asm.net、sandpile.org 和 wiki.osdev.org。

我不太欣赏的一件事是:

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

抱歉,如果这真的很明显...

您可以 assemble 一些代码或阅读指令集参考。是的,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

我用 [BITS 32] 或 [BITS 64] 编译,结果是:

66 B8 01 00

在这两种情况下。所以我想至少对于 mov 来说没有区别。