簡體   English   中英

SSE2指令,PMULUDQ乘法問題

[英]SSE2 Instruction, PMULUDQ Multiplication Question

在我調試的代碼中,有一個匯編指令,如下所示:

pmuludq xmm6, xmm1

xmm6 = 0x3736353433323130
xmm1 = 0x7D35343332313938

如果使用Python將上述2個數字相乘,結果如下所示:

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

但是,當我調試代碼時,乘法操作后的xmm6寄存器值為:0x0A09A5A82A1E7280

為什么結果不同? 以及如何使用Python模擬此指令?

請查看手冊中“操作”部分的偽代碼: http : //felixcloutier.com/x86/PMULUDQ.html

它進行兩個32x32 => 64(dword x dword => qword)的乘法,在16字節寄存器的每一半中都一個。 (它忽略輸入的奇數雙字元素)。 您只顯示了16個十六進制數字作為輸入,因此我認為您只是在查看輸入寄存器的低qword。

如果只關心低64位,那么等效操作很簡單

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

它對高64位重復相同的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM