gpt4 book ai didi

assembly - 如何从汇编中的地址加载单个字节

转载 作者:行者123 更新时间:2023-12-03 06:28:24 25 4
gpt4 key购买 nike

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

mov      rax, byte[rdi]

最佳答案

mov al, [rdi]

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

<小时/>

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

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

或者,如果您想将符号扩展到更广泛的寄存器,请使用 MOVSX .

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

(在某些 CPU 上,MOVSX 与 MOVZX 一样高效,在加载端口中直接处理,甚至不需要 ALU uop。 https://uops.info 。但在某些 CPU 上,MOVZX 加载比 MOVSX 便宜,因此如果您喜欢 MOVZX不关心高字节,只是想避免部分寄存器的恶作剧。)

<小时/>

MASM 等效项将 byte 替换为 byte ptr

mov 加载不需要大小说明符(al 目标意味着 byte 操作数大小)。 movzx 始终适用于内存源,因为 32 位目标无法消除 8 位内存源和 16 位内存源之间的歧义。

AT&T equivalentmovzbl (%rdi), %eax (movzb 指定我们对字节进行零扩展,l 指定 32 位目标大小。)

关于assembly - 如何从汇编中的地址加载单个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20727379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com