Your first ARM Assembly Program
This is a simple guide to writing your first ARM assembly program for linux. This guide will show you how to write a simple program that will print Hello World
to the console.
Installing required packages
You will need to install the following packages:
sudo apt-get update
sudo apt-get install build-essential
These packages are required to compile the program.
Writing the program
Open a text editor like vim
or nano
and create a new file called hello.s
:
nano hello.s
Or if you prefer vim
:
vim hello.s
This should put you in a text editor. Copy the following into it:
.section .data
msg:
.ascii "Hello world\n"
len = . - msg
.section .text
.globl _start
_start:
mov x0, 1
ldr x1, =msg
ldr x2, =len
mov x8, 64
svc 0
mov x8, 93
mov x0, 0
svc 0
Then save the file.
Compiling the program
To compile our program we are going to use as
ans ld
. Run the following commands:
as -o hello.o hello.s
ld -o hello hello.o
This will create an executable called hello
.
Running the program
To run the program, simply run:
./hello
You should see Hello world
printed to the console.
Explanation
The program is divided into two sections: .data
and .text
. The .data
section contains the string Hello world\n
and the length of the string. The .text
section contains the _start
label which is the entry point of the program.
.section .data
msg:
.ascii "Hello world\n"
len = . - msg
The _start
label is the entry point of the program. and it is defined as a global symbol using the .globl
directive.
.section .text
.globl _start
In the _start
section, we have the program instructions.
_start:
mov x0, 1 // Set the file descriptor for stdout
ldr x1, =msg // Load the address of the message into x1 (parameter 1 for stdout)
ldr x2, =len // Load the length of the message into x2 (parameter 2 for stdout)
mov x8, 64 // Set the syscall number for write
svc 0 // Call the kernel
mov x8, 93 // Set the syscall number for exit
mov x0, 0 // Set the exit status (0 for success)
svc 0 // Call the kernel