“GAS”的版本间差异
小 |
小 |
||
第10行: | 第10行: | ||
== 用法 == | == 用法 == | ||
==AT&T语法=== | === AT&T语法=== | ||
AT&T汇编语法对于在 [[x86]] 和 [[x86-64]] 平台上的类Unix操作系统是较为传统的语法。 这种语法让人想起了原始Unix操作系统中使用的原始汇编程序格式。 指令的操作数顺序是源,然后是目标。 汇编语言明确寄存器必须以<tt>%</tt>字符作为前缀,常量必须以<tt>$</tt>字符作为前缀。 | AT&T汇编语法对于在 [[x86]] 和 [[x86-64]] 平台上的类Unix操作系统是较为传统的语法。 这种语法让人想起了原始Unix操作系统中使用的原始汇编程序格式。 指令的操作数顺序是源,然后是目标。 汇编语言明确寄存器必须以<tt>%</tt>字符作为前缀,常量必须以<tt>$</tt>字符作为前缀。 | ||
第22行: | 第22行: | ||
== 另见 == | == 另见 == | ||
==文章=== | === 文章=== | ||
* [[Assembly|汇编]] | * [[Assembly|汇编]] | ||
*[[Tool Comparison|工具比较]] | *[[Tool Comparison|工具比较]] |
2022年2月11日 (五) 03:05的最新版本
GNU Assembler | |
Website: | http://www.gnu.org/software/binutils/ |
GNU 汇编器(简称GAS,可执行文件名也是'gas')是binutils包的一部分。 GCC 生成 汇编 源代码,并自动调用GAS,该GAS将代码汇编为 目标文件 中的机器代码。 GCC允许开发人员使用内联汇编功能将汇编直接转发给汇编程序。
GAS不是 '一个' 单独的汇编程序,而是汇编程序的集合- GCC支持的每个平台各有一个。 它们在可用选项、宏语言等方面非常相似。 GAS提供了一个非常可靠且支持良好的汇编程序,它与其他GNU工具完全集成(隐式的make规则,来自C/C++源代码的内联汇编,可以被gcc-o myfile.o myfile.s调用,所有工具都使用相同的汇编语法)。
用法
AT&T语法
AT&T汇编语法对于在 x86 和 x86-64 平台上的类Unix操作系统是较为传统的语法。 这种语法让人想起了原始Unix操作系统中使用的原始汇编程序格式。 指令的操作数顺序是源,然后是目标。 汇编语言明确寄存器必须以%字符作为前缀,常量必须以$字符作为前缀。
Intel语法支持
直到v2.10的binutils中,GAS只支持x86和x86-64的AT&T语法,这与几乎所有其他汇编程序使用的Intel语法有很大不同。 如今,GAS同时支持语法集 (.intel_syntax 和默认的 .att_syntax),甚至允许禁用其他强制性的操作数前缀 “%” 或 “$” (..._ syntax noprefix)。 这里有一些陷阱 - 几个FP操作码遭受反向操作数排序的困扰,由于兼容性的原因,该操作数排序必然会停留在那里, .intel_syntax选项有时会生成优化程度较低的操作码 (尝试moving到%si...)。
通常不鼓励使用对Intel语法的支持,因为它可能与其他汇编器中真正使用的Intel语法存在较为诡异地不同。 如果需要Intel语法,则应考虑不同的汇编程序。