assembly - movslq 是做什么的?
问题描述
我很难找出movslq
指令的作用。谷歌不是很有帮助,这个列表上也没有这样的说明。在这里我读过
MOVSLQ 将值从 32 位源移动并符号扩展至 64 位目标。
我是这样理解的。该指令将一个值从 32 位源移动到 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-bit 2's 补码扩展,通过将源的符号位复制到所有新的高位来扩展。(即dst[63:32] = src[31]
,和dst[31:0] = src[31:0]
。)
有趣的事实:可以在没有REX.W 前缀的情况下将其用作仅在架构上等效于 的 32 位副本mov
,但这样做的优势为零。或者甚至将操作数大小的前缀作为 16 位副本,但这完全没有意义,请使用mov
.
相关:cltq 在汇编中做了什么?具有所有 x86 符号扩展指令的 AT&T 与 Intel 助记符的等效表以及描述。([ER]AX 到 DX:AX、[ER]AX 内和 movsx/movzx 到任意寄存器。)
汇编 cltq 和 movslq 的差异有更多关于 AMD64 如何从 16/32 位模式重新利用 ARPL 操作码以获得movsxd
.
推荐阅读
- ios - 从 Windows 操作系统上传 Expo react 本机应用程序到 Testflight
- python - 在 python 应用程序中添加自签名证书的位置 - docker
- python - 如何使用类似于 ALT-左键单击和拖动的方式从 Web 浏览器中选择一列文本?
- ios - 罕见场合的核心数据随机删除一切
- python - 为什么AI会重复这个功能?
- jupyter-notebook - Jupyter Notebook Bash 变量
- javascript - 如果 htmlmediaelement 对象是来自 YouTube 或其他外部来源的嵌入式视频,是否可以访问它的 texttrack 属性?
- r - 错误:无法将 `tbl_df/tbl/data.frame` 对象转换为函数
- sql - Hive non-equi Join on OR 条件
- sharepoint-online - Project Online - 在 C# 应用程序中访问项目数据和自定义列表