8

この命令の Intel ISA リファレンス ドキュメントは明確です。

VPBLENDVB xmm1, xmm2, xmm3/m128, xmm4

からバイト値を選択し、指定されたマスク レジスタのマスク ビットを使用してxmm2、値を に格納します。xmm3/m128xmm4xmm1

xmm1はデスティネーション、xmm2/3/4ソースオペランドです

では、AT&T 構文を使用すると、これはどうなるでしょうか。デスティネーション レジスタが最後でなければならないことはわかっていますが、ソース オペランドの順序は何ですか?

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

また

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

または、他の何か?

4

1 に答える 1

9

以下のアセンブル (GASはレジスタを示す%代わりに使用することに注意してください):$

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

GNU アセンブラー (x86_64 2.6.38 Linux 上のバージョン 2.21.0.20110327) を使用して逆アセンブルすると、次の結果が得られます。

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

インテルの構文で(マニュアルに示されているように):

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

したがって、すべての引数の順序が逆になっているように見えます。

于 2011-09-25T21:03:33.017 に答える