movslq做什么?

问题描述 投票:0回答:1

我很难找到movslq指令的作用。谷歌不是很有帮助,并且没有关于this list的此类指示。 Here我读过这个

MOVSLQ移动并将值从32位源扩展到64位目标。

我明白这就是这个。该指令将值从32位源移动到64位目标,但确保64位目标中的数字的有符号值等于来自源的数字,即在负数的情况下,它填充前32位目的地为1,否则为零。

我的理解是否正确?如果没有,请解释我错在哪里。

编辑:

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

assembly x86-64 att sign-extension
1个回答
2
投票

这是movsxdhttps://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,在 - [ER] AX内,movsx / movzx到任意寄存器。)

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

© www.soinside.com 2019 - 2024. All rights reserved.