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.

GNU Assembler
Developer(s)GNU Project
Stable release
GNU Binutils 2.41[1] Edit this on Wikidata / 30 July 2023 (30 July 2023)
Written inC
PlatformCross-platform
TypeAssembler
LicenseGNU General Public License v3
Websitewww.gnu.org/software/binutils/

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.

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 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"

See also

References

  1. Nick Clifton (30 July 2023). "GNU Binutils 2.41 release". Retrieved 30 July 2023.
  2. "The GNU Assembler". CiteSeerX 10.1.1.32.4503.
  3. "The GNU Assembler - Assembler Directives". Archived from the original on 2012-02-22. Retrieved 2008-04-13.
  4. "GNU Assembler News".
  5. "AT&T Syntax versus Intel Syntax". Archived from the original on 20 June 2011. Retrieved 28 July 2014.
  6. 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.
  7. Red Hat Inc. "Using as". Archived from the original on June 20, 2011. Retrieved Jan 10, 2013.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.