【问题标题】:How to load a single byte from address in assembly如何从汇编中的地址加载单个字节
【发布时间】:2014-01-10 17:14:01
【问题描述】:

如何从地址加载单个字节?我以为会是这样的:

mov      rax, byte[rdi]

【问题讨论】:

标签: assembly x86 nasm


【解决方案1】:
mov al, [rdi]

将一个字节合并到 RAX 的低字节中。


或者更好的是,通过使用 MOVZX 将零扩展到 32 位寄存器(和 thus implicitly to 64 bits)来避免对 RAX 旧值的错误依赖:

movzx  eax, byte [rdi]          ; most efficient way to load one byte on modern x86

或者,如果您想将符号扩展至更宽的寄存器,请使用MOVSX。 (在某些 CPU 上,这与 MOVZX 一样高效。)

movsx  eax, byte [rdi]    ; sign extend to 32-bit, zero-extend to 64
movsx  rax, byte [rdi]    ; sign extend to 64-bit

MASM 等效项将 byte 替换为 byte ptr

mov 加载不需要大小说明符(al 目标意味着 byte 操作数大小)。 movzx 总是用于内存源,因为 32 位目标无法区分 8 位和 16 位内存源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多