Linux gebruikt system calls. Dit zijn eigenlijk een soort functies. Om een system call aan te roepen moet je een paar dingen doen:
1. Nummertje van de system call weten (staat in /usr/include/asm/unistd_32.h voor 32 bit, en /usr/include/asm/unistd_64.h voor 64 bit).
2. Dit nummertje plaats je in EAX.
3. De argumenten van de system call in de andere registers plaatsen (argumenten kan je in de manpages zien).
4. Interrupt 0x80 (of 80h) aanroepen.
Voorbeeld:
.section .data
string: ; adres van de string "Hallo wereld!".
.ascii "Hallo wereld!\n"
.section .text
.global _start
_start:
movl $4, %eax ; 4 is het nummer van de system call write. Dit getal moet je aanpassen voor een andere system call.
movl $1, %ebx ; ;1e argument van write is een file descriptor. In dit geval 1 (stdout).
movl $string, %ecx ;2e argument van write is een adres van een string.
movl $14, %edx ;3e argument van write is de lengte van de string. In dit geval 14.
int $0x80 ;interrupt 0x80 aanroepen waardoor kernel de system call uit gaat voeren. De returnwaarde staat in EAX.
movl $1, %eax ;roep de system call exit aan.
movl $0, %ebx
int $0x80
Ik hoop dat dit je een beetje op weg helpt. Het nummer van nanosleep is trouwens 162.