在我调试的代码中,有一个汇编指令,如下所示:
pmuludq xmm6, xmm1
xmm6 = 0x3736353433323130
xmm1 = 0x7D35343332313938
如果我使用Python将上述两个数字相乘,则会得到如下所示的结果:
>>> hex(0x3736353433323130 * 0x7D35343332313938)
'0x1b00f1758e3c83508a9f69982a1e7280L'
但是,当我调试代码时,乘法运算后的xmm6寄存器值为:0x0A09A5A82A1E7280
为什么结果不同?以及如何使用Python模拟此指令?
答案 0 :(得分:2)
在手册的“操作”部分中查找伪代码:http://felixcloutier.com/x86/PMULUDQ.html。
它将两个32x32 => 64(dword x dword => qword)相乘,在16字节寄存器的每一半中相乘。 (它忽略输入的奇数双字元素)。您只显示了16个十六进制数字作为输入,因此我认为您只是在查看输入寄存器的低qword。
如果只关心低64位,那么等效操作就是
result = (a & 0xFFFFFFFF) * (b & 0xFFFFFFFF)
它对高64位重复相同的操作。