1 ; hello.asm a first program for nasm for Linux, Intel, gcc
2 ;
3 ; assemble: nasm -f elf -l hello.lst hello.asm
4 ; link: gcc -o hello hello.o
5 ; run: hello
6 ; output is: Hello World
7
8 SECTION .data ; data section
9 00000000 48656C6C6F20576F72- msg: db "Hello World",10 ; the string to print, 10=cr
10 00000009 6C640A
11 len: equ $-msg ; "$" means "here"
12 ; len is a value, not an address
13
14 SECTION .text ; code section
15 global main ; make label available to linker
16 main: ; standard gcc entry point
17
18 00000000 BA0C000000 mov edx,len ; arg3, length of string to print
19 00000005 B9[00000000] mov ecx,msg ; arg2, pointer to string
20 0000000A BB01000000 mov ebx,1 ; arg1, where to write, screen
21 0000000F B804000000 mov eax,4 ; write command to int 80 hex
22 00000014 CD80 int 0x80 ; interrupt 80 hex, call kernel
23
24 00000016 BB00000000 mov ebx,0 ; exit code, 0=normal
25 0000001B B801000000 mov eax,1 ; exit command to kernel
26 00000020 CD80 int 0x80 ; interrupt 80 hex, call kernel
27