AT&T 语法中的 3 或 4 参数 x86 程序集[重复]

Posted

技术标签:

【中文标题】AT&T 语法中的 3 或 4 参数 x86 程序集[重复]【英文标题】:3 or 4 parameter x86 assembly in AT&T syntax [duplicate] 【发布时间】:2012-12-17 17:18:03 【问题描述】:

简单的问题。我怀疑这会受到很多关注,但是我如何在 AT&T (gAS) 语法中的 x86-64 汇编中进行 3 或 4 个参数操作?任何使用 gAS 的 x86 程序员都知道参数是切换的,例如:

xor   eax,  ebx ; Intel (xASM)
xorl %ebx, %eax ; AT&T (gAS)

但是我该怎么做,说:

blendpd xmm0, xmm1, 5

我的意思是,说明书是怎么写的?我知道会有%xmm0 等(仍然是参数的前缀),但是它们是如何排序的以及我在指令末尾添加什么后缀(movl 中的l 用于32位)?

【问题讨论】:

【参考方案1】:

AT&T 等价物是操作数顺序颠倒的地方:

blendpd $5, %xmm1, %xmm0

如果您不确定是否始终可以使用 Intel 语法进行编译,则反汇编为 AT&T。

【讨论】:

我如何拒绝 AT&T? 另外,说明书上的后缀在哪里? 后缀不是必需的,因为大小可以从目的地推断出来。您可以使用objdump -Dslx BINARY 反汇编为 AT&T 语法。或者用gcc -S查看组装阶段(不确定你使用的是什么编译器)。 但即使这样也有一个:xorl %eax, %eax... 见Instruction Naming。

以上是关于AT&T 语法中的 3 或 4 参数 x86 程序集[重复]的主要内容,如果未能解决你的问题,请参考以下文章

x86 AT&T 语法程序集的注释语法

将 AT&T 语法程序转换为 intel 语法

关于 AT&T 语法汇编中的 cmp/jg、jle 等

关于 AT&T 汇编语法 (%esp,1)

使用 AT&T 语法时汇编程序崩溃 [重复]

x86-64 汇编中的数组元素比较(AT&T 语法)