我在看一个游戏代码,我看到了以下内容:
0x171 mov [rbp-30],r12w
....
0x210 movups xmm0,[rbp-30]
我很确定这r12
是一个整数(等于 5)。那么,它是否在0x171
使用时将整数移动到浮点寄存器movups
?
我在互联网上搜索过,但movups
通常将浮点数移动到浮点数,而不是整数到浮点数...
有人能告诉我我们通常如何将整数移动到xmm
寄存器吗?
我在看一个游戏代码,我看到了以下内容:
0x171 mov [rbp-30],r12w
....
0x210 movups xmm0,[rbp-30]
我很确定这r12
是一个整数(等于 5)。那么,它是否在0x171
使用时将整数移动到浮点寄存器movups
?
我在互联网上搜索过,但movups
通常将浮点数移动到浮点数,而不是整数到浮点数...
有人能告诉我我们通常如何将整数移动到xmm
寄存器吗?
要将数字移动到 XMM 寄存器中,您首先需要将该数字移动到内存地址中,因为您无法将立即数移动到 XMM 寄存器中(也就是说,您不能执行类似的操作mov XMM1,9
)。
如果需要,您可以分配自己的内存来存储数字,或者在您的场景中,如果可行,您可以在写入之前注入代码以将您自己的值放入 r12w 中,或者将您自己的值放入 [rbp-30 ] 之后写。
您感兴趣的说明将是MOVSS
、MOVSD
、MOVD
、MOVQ
等。假设您选择首先将自己的值放入 [rbp-30] 中:
示例:movss xmm1,[rbp-30]
就您的值是整数而言,您可能会在您所在的子例程中的某处看到像 CVTSS2SI(将标量单精度浮点值转换为双字整数)这样的指令。