gpt4 book ai didi

assembly - movslq 是做什么的?

转载 作者:行者123 更新时间:2023-12-02 08:57:09 25 4
gpt4 key购买 nike

我无法找出 movslq 指令的作用。谷歌不是很有帮助,并且this list上没有这样的说明。 。 Here我读过

MOVSLQ is move and sign-extend a value from a 32-bit source to a 64-bit destination.

我是这样理解的。该指令将值从 32 位源移动到 64 位目标,但确保 64 位目标中的数字的有符号值等于源中的数字,即在负数的情况下,它会填充 64 位目标中的前 32 位目的地为 1,否则为 0。

我的理解正确吗?如果不是,请解释我错在哪里。

编辑:

这不是此主题的重复项:assembly cltq and movslq difference 。我的问题没有任何解释。您必须花 10 分钟阅读整个答案才能说服自己。

最佳答案

这是movsxd:https://www.felixcloutier.com/x86/MOVSX:MOVSXD.html .

您可以通过使用 AT&T 汇编器对其进行汇编并使用 Intel 语法反汇编器进行反汇编来自行解决这一问题。 (例如objdumpd -d -Mintel foo.o)

<小时/>

是的,它支持 32->64 位 2's complement sign extension ,通过将源的符号位复制到所有新的高位来扩展。 (即dst[63:32] = src[31]dst[31:0] = src[31:0]。)

有趣的事实:可以在没有 REX.W 前缀的情况下将其用作 32 位副本,在架构上与 mov 等效,但优势永远为零这样做。或者甚至使用操作数大小前缀作为 16 位副本,但这完全没有意义,请使用 mov

<小时/>

相关:What does cltq do in assembly?有一个针对所有 x86 符号扩展指令的 AT&T 与 Intel 助记符的等效表以及说明。 ([ER]AX 到 DX:AX、within-[ER]AX 和 movsx/movzx 到任意寄存器。)

assembly cltq and movslq difference有关 AMD64 如何重新利用 16/32 位模式下的 ARPL 操作码以获得 movsxd 的 1 字节操作码的更多历史记录。

关于assembly - movslq 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55584797/

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