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

时间:2016-02-26 13:12:48

标签: assembly nasm 32bit-64bit x86-64

对不起,我在S / O上的时间不长,并且在asm上有一个新的。

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

我能够非常感激的一件事是:

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

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

基本说明:

66 B8 01 00

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

./odoo.py -d db_name -u module_name

两种情况。所以我想至少对于那里来说没有意义。