SSE2指令,PMULUDQ乘法问题

时间:2018-12-03 02:24:49

标签: python sse2

在我调试的代码中,有一个汇编指令,如下所示:

pmuludq xmm6, xmm1

xmm6 = 0x3736353433323130
xmm1 = 0x7D35343332313938

如果我使用Python将上述两个数字相乘,则会得到如下所示的结果:

>>> hex(0x3736353433323130 * 0x7D35343332313938)
'0x1b00f1758e3c83508a9f69982a1e7280L'

但是,当我调试代码时,乘法运算后的xmm6寄存器值为:0x0A09A5A82A1E7280

为什么结果不同?以及如何使用Python模拟此指令?

1 个答案:

答案 0 :(得分:2)

在手册的“操作”部分中查找伪代码:http://felixcloutier.com/x86/PMULUDQ.html

它将两个32x32 => 64(dword x dword => qword)相乘,在16字节寄存器的每一半中相乘。 (它忽略输入的奇数双字元素)。您只显示了16个十六进制数字作为输入,因此我认为您只是在查看输入寄存器的低qword。

如果只关心低64位,那么等效操作就是

result = (a & 0xFFFFFFFF) * (b & 0xFFFFFFFF)

它对高64位重复相同的操作。