与 Intel 语法相比,AT&T 语法中源操作数的顺序是什么?
该指令的 Intel ISA 参考文档很清楚:
VPBLENDVB xmm1, xmm2, xmm3/m128, xmm4
使用指定掩码寄存器
xmm4
中的掩码位从xmm2
和xmm3/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
andxmm3/m128
using mask bits in the specified mask register,xmm4
, and store the values intoxmm1
.
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
汇编(注意 GAS 使用
%
而不是$
来表示寄存器)如下:使用 GNU 汇编器(x86_64 2.6.38 linux 上的版本 2.21.0.20110327),然后反汇编产生:
在英特尔语法中(如手册所示):
所以看起来所有参数的顺序都是相反的。
Assembling (note GAS uses
%
instead of$
to denote registers) the following:with the GNU assembler (version 2.21.0.20110327 on x86_64 2.6.38 linux) and then disassembling yields:
in intel syntax (as the manual shows):
So it looks like the order of all the arguments is reversed.