【问题标题】: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。

我不太明白的一点是:

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

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

【问题讨论】:

  • 如果每条指令完成更多工作,您可能需要更少条指令。

标签: 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 没有区别。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 2012-02-10
      • 2010-09-12
      • 2011-04-20
      • 1970-01-01
      • 2017-02-18
      • 2010-12-18
      相关资源
      最近更新 更多