GNU汇编器

维基百科,自由的百科全书
(重定向自GNU Assembler
跳转到导航 跳转到搜索
GNU汇编器
开发者GNU计划
当前版本2.37(2021年7月18日,​4年前​(2021-07-18
源代码库
  • {{URL|example.com|可选的显示文本}}
Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
编程语言C
引擎
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    平台跨平台
    类型汇编器
    许可协议GNU通用公共许可证 v3
    网站www.gnu.org/software/binutils/

    GNU汇编器(英语:GNU assembler),是由GNU计划所使用的汇编器,一般称为gas,或依其可执行文件名称简称为as。它是GCC的默认后端。它用于汇编GNU操作系统Linux内核以及其他各种软件。它是GNU Binutils包的一部分。

    GAS的可执行文件被命名为asUnix汇编器的标准名称。GAS是跨平台的,可以运行或为不同的计算机系统结构编译。GAS依据GNU通用公共许可证第三版发布,为自由软件

    通用语法[编辑]

    GAS支持适用于所有支持架构的通用语法。通用语法包括汇编指令和注释方法。

    指令[编辑]

    GAS使用汇编器指令(也被称为伪操作),它们作为关键字指示开始一个时期,与C语言中的预处理指令表现相同。虽然无论目标架构如何,大多数可用的汇编指令都是有效的,但一些指令仍然因机器不同而不同。[1]

    注释[编辑]

    GAS支持两种注释风格:[2]

    多行注释:

    C语言类似,以一对斜线-星号对开始和结束:

    /* 
    注释
    */
    

    单行注释:

    在不同的架构中汇编时,单行注释有几种不同的格式。

    • #用于以下平台中:i386,x86-64,i960,68HC11,68HC12,VAX, V850,m32r,M880x0。
    • ;用于以下平台中:AMD 29k family,ARC,H8/300 family,HPPA,PDP-11,picoJava,Motorola,PowerPC。
    • @用于ARM平台。
    • |用于680x0平台。
    • !用于Renesas SH平台。

    用法[编辑]

    作为流行编译器包GCC的后端,GNU汇编器在编译现代开源软件中有非常广泛的应用。在Linux系统上,GAS经常用作与其他GNU软件结合的汇编器。因为OS X,修改后版本的GAS也可以在麦金塔操作系统的开发工具包中找到。

    示例程序[编辑]

    一个标准的“Hello, world!”程序,运行于Linux IA-32

    .globl _start
    
    .text
    _start:
     movl $len, %edx
     movl $msg, %ecx
     movl $1, %ebx
     movl $4, %eax
     int $0x80
    
     movl $0, %ebx
     movl $1, %eax
     int $0x80
    .data
    msg:
     .ascii "Hello, world!\n"
     len = . - msg
    

    批评[编辑]

    那些更习惯于Intel语法的人认为,比起其他汇编器,在x86x86-64平台上不支持使用Intel语法就是一大败笔。

    然而,自从2.10版本,Intel语法可以通过使用.intel_syntax指令使用。[3][4][5]

    参见[编辑]

    参考文献[编辑]

    1. ^ The GNU Assembler - Assembler Directives. [2013-10-08]. (原始内容存档于2012-02-22). 
    2. ^ Red Hat Inc. Using as. [1012-03-11]. (原始内容存档于2011-06-20). 
    3. ^ GNU Assembler News. [永久失效链接]
    4. ^ AT&T Syntax versus Intel Syntax. Using as, the GNU Assembler. [2013-10-08]. (原始内容存档于2010-05-29). 
    5. ^ Ram Narayan. Linux assemblers: A comparison of GAS and NASM. IBM DeveloperWorks. 2007-10-17 [2007-10-17]. (原始内容存档于2009-03-03). 

    外部链接[编辑]