【问题标题】:does 64 bit code take up more storage space that 32 bit code?64位代码比32位代码占用更多存储空间吗?
【发布时间】:2016-06-09 17:24:10
【问题描述】:
抱歉,我对 S/O 的兴趣不长,而且是 asm 的新手。
我一直在阅读 Intel、Amd 和 nasm 文档、ref.x86asm.net、sandpile.org 和 wiki.osdev.org。
我不太明白的一点是:
- 64 位指令实际上比 32 位指令(在保护模式下)更大(在长模式下),因为前缀......或者指令的宽度是否相同?
- 当给定操作数时,它们通常是零填充(自动),但这是由汇编器在编译时完成还是由处理器在运行时完成?
对不起,如果这真的很明显......
【问题讨论】:
标签:
assembly
nasm
32bit-64bit
x86-64
【解决方案1】:
您可以只汇编一些代码或阅读指令集参考。是的,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 位,则硬件中会发生零扩展。
【解决方案2】:
基本说明:
mov ax, 0x1
我用 [BITS 32] 或 [BITS 64] 编译,结果是:
66 B8 01 00
在这两种情况下。所以我猜这意味着至少对于 mov 没有区别。