📅  最后修改于: 2023-12-03 15:26:56.314000             🧑  作者: Mango
movslq
是x86中的一条指令,用于将32位有符号整数按照符号位来扩展为64位。其语法为:
movslq [源操作数], [目的操作数]
其中,[源操作数]
是32位有符号整数的内存地址或寄存器,[目的操作数]
是64位寄存器。该指令会将32位整数的符号位扩展到高32位,填充高32位使其变成64位有符号整数。
举个例子,假设eax中存储着32位有符号整数-2
,我们想要将其赋值给rax,保持其符号并扩展为64位。可以这样写:
movslq %eax, %rax
执行完毕后,rax中的值将变成0xFFFFFFFFFFFFFFFE
,使用十六进制表示即为-2
的补码表示。
需要注意的是,movslq
只能将32位有符号整数扩展为64位,如果源操作数是32位无符号整数,需要使用movzbl
或movzwl
指令先将其扩展为有符号整数再使用movslq
:
movzwl %ebx, %eax # 将ebx中的32位无符号整数扩展为有符号整数
movslq %eax, %rax # 将eax中的32位有符号整数扩展为64位
总之,movslq
在编写x86的低级程序时非常有用。