与 Intel 语法相比,AT&T 语法中源操作数的顺序是什么?

发布于 2024-12-06 13:38:13 字数 518 浏览 1 评论 0原文

该指令的 Intel 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

其他什么?

The Intel ISA reference documentation for this instruction is clear:

VPBLENDVB xmm1, xmm2, xmm3/m128, xmm4

Select byte values from xmm2 and xmm3/m128 using mask bits in the specified mask register, xmm4, and store the values into xmm1.

xmm1 is the destination, xmm2/3/4 are source operands

So what does this become using AT&T syntax? We know that the destination register must be last, but what is the order of source operands?

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

or

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

or something else?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

与酒说心事 2024-12-13 13:38:13

汇编(注意 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

所以看起来所有参数的顺序都是相反的。

Assembling (note GAS uses % instead of $ to denote registers) the following:

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

with the GNU assembler (version 2.21.0.20110327 on x86_64 2.6.38 linux) and then disassembling yields:

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

in intel syntax (as the manual shows):

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

So it looks like the order of all the arguments is reversed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文