Open main menu

CDOT Wiki β

Changes

Assembler Basics

114 bytes added, 13:10, 31 January 2018
Format of an Assembly Language program
# Data - Values used by the program for things such as initial variable values and string or numeric constants.
Assembler '''directives''' are used to control the assembly of the code, by specifying output file sections (such as .text (machine code), .data (read/write data), or .rodata (read-only data /constants) in an ELF file) and data formats (such as word size for numeric values), and by defining macros.
Consider this x86_64 assembly language "Hello World" program:
<font color="green">syscall</font>
<font color="red">.datarodata</font>
<font color="blue">msg:</font> <font color="red">.ascii</font> <font color="orange">"Hello, world!\n"</font>
In the program above:
* .text is a directive (equivalent to the longer directive ".section .text") which specifies that the following instructions/data should be placed in the ".text" section of the output ELF file.
* .data rodata is a similar directive which specifies that the following instructions/data should be placed in the .data rodata section of the output ELF file. In the case of this program, they could alternately be placed in the .rodata data section, which is for read-only write data (data which is write-protected in memory), but .rodata was used because the string is not modified by the program(it's a constant).
* .global (or .globl) is a directive which makes the following symbol visible to the linker. Otherwise, symbols are normally lost by link time. In this case, the linker needs to know the value of the special symbol _start in order to know where execution is to begin in the program (which is not always at the start of the .text section).
* _start is a label which is equivalent to the memory location of the first instruction in the program.