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。
我不太欣赏的一件事是:
- 64 位指令实际上(在长模式下)比 32 位指令(在保护模式下)更大,因为前缀......或者指令是否具有相同的宽度?
- 并且当给出操作数时,它们通常会被零填充(自动),但这是由汇编程序在编译时完成的还是由处理器在运行时完成的?
抱歉,如果这真的很明显...
您可以 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 来说没有区别。
抱歉,我对 S/O 的兴趣不大,而且是 asm 的新手。
我一直在阅读 Intel、Amd 和 nasm 文档,参考 x86asm.net、sandpile.org 和 wiki.osdev.org。
我不太欣赏的一件事是:
- 64 位指令实际上(在长模式下)比 32 位指令(在保护模式下)更大,因为前缀......或者指令是否具有相同的宽度?
- 并且当给出操作数时,它们通常会被零填充(自动),但这是由汇编程序在编译时完成的还是由处理器在运行时完成的?
抱歉,如果这真的很明显...
您可以 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 来说没有区别。