【问题标题】:what is the order of source operands in AT&T syntax compared to Intel syntax?与 Intel 语法相比,AT&T 语法中源操作数的顺序是什么?
【发布时间】:2011-11-24 19:10:04
【问题描述】:

该指令的英特尔 ISA 参考文档很明确:

VPBLENDVB xmm1, xmm2, xmm3/m128, xmm4

使用指定掩码寄存器xmm4中的掩码位从xmm2xmm3/m128中选择字节值,并将这些值存储到xmm1中。

xmm1 是目标,xmm2/3/4 是源操作数

那么使用 AT&T 语法会变成什么?我们知道目的寄存器必须在最后,但是源操作数的顺序是什么?

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

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

还是别的什么?

【问题讨论】:

  • 找出答案的最快方法是检查 - 将 Intel 语法汇编器与 AT&T 语法反汇编器结合使用。

标签: gcc assembly x86 att


【解决方案1】:

组装(注意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

intel 语法(如手册所示):

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

所以看起来所有参数的顺序都颠倒了。

【讨论】:

  • 是的,总是将列表与 CPU 手册中的 Intel 语法顺序相反。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多