Académique Documents
Professionnel Documents
Culture Documents
3 décembre 2012
répéter une déclaration avec la directive : times B Corps du programme : SECTION .text
exemples : commencer par déclarer global l’étiquette de début de
p0: times 100 db 0 ; 100 fois l’octet 0x00 programme (main) pour qu’elle soit visible :
p1: times 28 dd 0xffffffff ; 28 fois le m^
eme mot
SECTION .text
B Données non initialisées : SECTION .bss global main
Interruptions
main: main:
... ...
push msg2 mov eax, msg3
call printf call print_string
... ...
Les sous-programmes servent à mutualiser du code (éviter les %include "asm_io.inc" cmp eax, 10
copier-coller) jl ok
Exemple : les fonctions des langages haut niveau. SECTION .data
Le code appelant le sous-programme et le sous-programme msg1: db "entier <10 ?",10,0 rate: mov eax, msg3
lui-même doivent se mettre d’accord sur la façon de se passer msg2: db "bravo",10,0 call print_string
les données (conventions d’appel). msg3: db "perdu",10,0 jmp fin
Un saut peut être utilisé pour appeler le sous-programme, mais SECTION .text ok: mov eax, msg2
le retour pose problème. global main call print_string
Le sous-programme peut être utilisé par différentes parties du
programme B il doit revenir au point où il a été appelé ! main: mov eax, msg1 fin: mov ebx, 0
Donc, le retour du sous-programme ne peut pas être codé “en call print_string mov eax, 1
dur” par un saut vers une étiquette. int 0x80
L’étiquette de retour doit être un paramètre du sous-programme. call read_int
Passer les paramètres par la pile Passer les paramètres par la pile - suite
Les paramètres passés par la pile sont empilés avant le call. Si la pile est également utilisée dans le sous-programme pour
Si le paramètre doit être modifié par le sous-programme, c’est stocker des données, le nombre à ajouter à esp change.
son adresse qui doit être passée. Par exemple, après un push la pile ressemble à :
Les paramètres sur la pile ne sont pas dépilés par le ...
sous-programme mais accédés depuis la pile elle-même : esp donnée du sous-programme
Sinon, comme ils sont empilés avant le call, l’adresse de retour esp+4 adresse de retour
devrait être dépilée avant tout (puis ré-empilée ensuite). esp+8 paramètre
Si les paramètres sont utilisés à plusieurs endroits :
Maintenant, le paramètre est en esp+8, et non plus en esp+4.
B ça évite de les conserver dans un registre ;
B les laisser sur la pile permet de conserver une copie de la esp pour faire référence aux paramètres ⇒ erreurs possibles.
donnée en mémoire accessible à n’importe quel moment.
Pour résoudre ce problème, utiliser ebp (base de la pile).
Lors d’un appel de sous-programme : la pile ressemble à
... La convention de C est qu’un sous-programme commence par
esp adresse de retour empiler la valeur de ebp puis affecte à ebp la valeur de esp.
esp+4 paramètre Permet à esp de changer sans modifier ebp.
Accès au paramètre par adressage indirect : [esp+4] A la fin du programme, la valeur originale de ebp est restaurée.
Archi 23/30 Archi 24/30
Structure d’un programme Entrées/Sorties Sous-programmes Exemple Structure d’un programme Entrées/Sorties Sous-programmes Exemple
Passer les paramètres par la pile - suite Passer les paramètres par la pile - fin