section .data
hello: db ‘Hello world!’,10 ; ‘Hello world!’ plus a linefeed character
helloLen: equ $-hello ; Length of the ‘Hello world!’ string
; (I’ll explain soon)
section .text
global _start
_start:
mov eax,4 ; The system call for write (sys_write)
mov ebx,1 ; File descriptor 1 – standard output
mov ecx,hello ; Put the offset of hello in ecx
mov edx,helloLen ; helloLen is a constant, so we don’t need to say
; mov edx,[helloLen] to get it’s actual value
int 80h ; Call the kernel
mov eax,1 ; The system call for exit (sys_exit)
mov ebx,0 ; Exit with return code of 0 (no error)
int 80h
Copy this program into a text editor of your choice (I use vi or SciTE), and save it as hello.asm in your home directory (/home/yourname).
4.5 Compiling and Linking
1. If you don’t have a terminal or console open, open one now.
2. Make sure you are in the same directory as where you saved hello.asm.
3. To assemble the program, type
nasm -f elf hello.asm
If there are any errors, NASM will tell you on what line you did what wrong.
4. Now type ld -s -o hello hello.o
This will link the object file NASM produced into an executable file.
5. Run your program by typing ./hello
(To run programs/scripts in the current directory, you must always type ./ before the name, unless the current directory is in the path.)
You should see Hello world! printed to the screen. Congratulations! You have just written your first assembly program in Linux!