GNU Assembler
The GNU Assembler, commonly known as gas or as, is the assembler developed by the GNU Project. It is the default back-end of GCC. It is used to assemble the GNU operating system and the Linux kernel, and various other software. It is a part of the GNU Binutils package.
![]() | |
Developer(s) | GNU Project |
---|---|
Stable release | |
Written in | C |
Platform | Cross-platform |
Type | Assembler |
License | GNU General Public License v3 |
Website | www |
The GAS executable is named as, the standard name for a Unix assembler. GAS is cross-platform, and both runs on and assembles for a number of different computer architectures. GAS is free software released under the GNU General Public License v3.
History
The first version of GAS was released in 1986-1987.[2] It was written by Dean Elsner, and supported the VAX architecture.[2]
General syntax
GAS supports a general syntax that works for all of the supported architectures. The general syntax includes assembler directives and a method for commenting. The default syntax is AT&T syntax.
Directives
GAS uses assembler directives (also known as pseudo ops), which are keywords beginning with a period that behave similarly to preprocessor directives in the C programming language. While most of the available assembler directives are valid regardless of the target architecture, some directives are machine dependent.[3]
Since version 2.10, Intel syntax can be used through use of the .intel_syntax
directive.[4][5][6]
Comments
GAS supports two comment styles.[7]
Multi-line
As in C, multi-line comments start and end with mirroring slash-asterisk pairs:
/*
comment
*/
Single-line
Single line comments have a few different formats varying on which architecture is being assembled for.
- A hash symbol (#) — i386, x86-64, i960, 68HC11, 68HC12, VAX, V850, M32R, PowerPC, MIPS, M680x0, and RISC-V
- A semicolon (;) — AMD 29k family, ARC, H8/300 family, HPPA, PDP-11, picoJava, Motorola, and M32C
- The at sign (@) — ARM
- A double slash (//) — AArch64
- A vertical bar (|) — 680x0
- An exclamation mark (!) — Renesas SH
Usage
Being the back-end for a popular compiler suite, namely GCC, the GNU Assembler is very widely used in compiling modern open source software. GAS is often used as the assembler on GNU/Linux operating systems in conjunction with other GNU software. A modified version of GAS can also be found in the macOS development tools package since OS X.
Example program
A standard "Hello, world!" program for Linux on IA-32:
.global _start
.text
_start:
movl $4, %eax # 4 (code for "write" syscall) -> EAX register
movl $1, %ebx # 1 (file descriptor for stdout) -> EBX (1st argument to syscall)
movl $msg, %ecx # address of msg string -> ECX (2nd argument)
movl $len, %edx # len (32 bit address) -> EDX (3rd arg)
int $0x80 # interrupt with location 0x80 (128), which invokes the kernel's system call procedure
movl $1, %eax # 1 ("exit") -> EAX
movl $0, %ebx # 0 (with success) -> EBX
int $0x80 # see previous
.data
msg:
.ascii "Hello, world!\n" # inline ascii string
len = . - msg # assign (current address - address of msg start) to symbol "len"
References
- Nick Clifton (9 February 2022). "GNU Binutils 2.38 has been released". Retrieved 9 February 2022.
- "The GNU Assembler". CiteSeerX 10.1.1.32.4503.
{{cite journal}}
: Cite journal requires|journal=
(help) - "The GNU Assembler - Assembler Directives".
- "GNU Assembler News".
- "AT&T Syntax versus Intel Syntax". Retrieved 28 July 2014.
- Ram Narayan (2007-10-17). "Linux assemblers: A comparison of GAS and NASM". IBM DeveloperWorks. Archived from the original on 3 March 2009. Retrieved 28 July 2014.
- Red Hat Inc. "Using as". Retrieved Jan 10, 2013.
External links
![]() |
The Wikibook X86 Assembly has a page on the topic of: GAS Syntax |
- Official website
- Gas manual
- : the portable GNU assembler – Linux User Commands Manual