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