首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >movslq是干什么的?

movslq是干什么的?
EN

Stack Overflow用户
提问于 2019-04-09 03:41:31
回答 1查看 28.8K关注 0票数 9

我很难弄清楚movslq指令是做什么的。谷歌并不是很有帮助,在这份清单上也没有这样的指导。这里我读过

MOVSLQ是将一个值从32位源扩展到64位目的地。

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

我的理解正确吗?如果没有,请解释我哪里错了。

编辑:

这不是这个主题的重复:装配cltq和movslq差。我的问题没有任何解释。你得把答案读10分钟才能说服自己。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-09 05:28:22

我是movsxdhttps://www.felixcloutier.com/x86/MOVSX:MOVSXD.html

,您可以通过与AT&T汇编程序组装并使用Intel语法反汇编程序进行反汇编来解决这个问题。(例如,objdumpd -d -Mintel foo.o**)**

是的,它可以执行32->64位的2补码延拓,通过将源的符号位复制到所有新的上位来扩展。(即dst[63:32] = src[31]dst[31:0] = src[31:0].)

有趣的事实:在没有REX.W前缀的情况下,可以使用它作为一个32位的副本,它在架构上相当于mov,但是这样做没有任何好处。或者即使使用操作数大小前缀作为16位副本,但这也是完全没有意义的,请使用mov

相关:cltq在组装中做什么?有一个AT&T和Intel助记符的等价表,用于所有x86符号扩展说明,以及描述。(ERAX到DX:AX在-ERAX内,movsx/movzx用于任意寄存器)。

装配cltq和movslq差有更多关于AMD64如何从16/32位模式重新使用ARPL操作码以获得movsxd的1字节操作码的历史。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55584797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档