2011-09-25 73 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语法顺序。 –

相关问题