2011-09-25 30 views
3

此指令英特爾ISA參考文檔是明確的:從xmm2xmm3/m128使用屏蔽位在指定的掩碼寄存器,xmm4與英特爾語法相比,AT&T語法中源操作數的順序是什麼?

VPBLENDVB xmm1, xmm2, xmm3/m128, xmm4 

選擇的字節值,並且這些值存儲到xmm1

xmm1爲目標,xmm2/3/4是源操作數

那麼,這成爲使用AT & T語法?我們知道目標寄存器必須是最後一個,但源操作數的順序是什麼?

vpblendvb $xmm2, $xmm3, $xmm4, $xmm1 

vpblendvb $xmm4, $xmm3, $xmm2, $xmm1 

或其他什麼東西?

+3

找出最快的方法是檢查 - 將英特爾語法彙編程序與AT&T語法反彙編程序結合使用。 –

回答

4

組裝(注GAS使用的%代替$表示寄存器)執行以下操作:

vpblendvb %xmm4, %xmm3, %xmm2, %xmm1 

與GNU彙編(版本2.21.0.20110327在x86_64 2.6.38的Linux),然後分解的產率:

$ objdump -d a.out 
    0: c4 e3 69 4c cb 40  vpblendvb %xmm4,%xmm3,%xmm2,%xmm1 
在Intel語法

(如手動所示):

$ objdump -d -M intel a.out 
    0: c4 e3 69 4c cb 40  vpblendvb xmm1,xmm2,xmm3,xmm4 

所以它看起來像所有參數的順序是相反的。

+0

是的,總是隻是逆轉列表與CPU手冊中的Intel語法順序。 –