📜  汇编 x86 中的 movslq (1)

📅  最后修改于: 2023-12-03 15:26:56.314000             🧑  作者: Mango

汇编 x86 中的 movslq

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位无符号整数,需要使用movzblmovzwl指令先将其扩展为有符号整数再使用movslq

movzwl %ebx, %eax   # 将ebx中的32位无符号整数扩展为有符号整数
movslq %eax, %rax   # 将eax中的32位有符号整数扩展为64位

总之,movslq在编写x86的低级程序时非常有用。