Assembleur
1Génie informatique et génie logiciel H2015
INF1600: Architecture des
micro-ordinateurs
Assembleur
Introduction à IA-32
Responsable du cours : Giovanni Beltrame
giovanni.beltrame@polymtl.ca
Local: M-4109
Chargée de cours: Luiza Gheorghe
luiza.gheorghe@polymlt.ca
Assembleur
2Génie informatique et génie logiciel H2015
Conventions du C
Les variables globales sont dans la section .data
Les variables locales et paramètres sont sur la pile
– En C les paramètres sont empilés de droite à gauche avant le ‘call’ (dépilés au
retour du ‘call’)
– L’espace pour les variable est alloué au début de la sous-routine
– On utilise souvent %ebp pour pointer vers ces variables/paramètres
La valeur de retour
– Dans %eax pour les entiers (char/short/int…) et pointeurs (edx:eax pour 8 octets)
– Dans %st(0) pour les float/double (registres larges pour operations point flotant)
– En mémoire pour les objets/structures
Le pointeur où placer le résultat est donné par la routine appelante
Registres qu’ une routine peut modifier: %eax, %ecx, %edx
Doit sauver/restaurer les autres si on les modifies
3
Assembleur
3Génie informatique et génie logiciel H2015
La pile – paramètres, valeurs, variables
Cadre pile procedure 1
(stack frame)
Assembleur
4Génie informatique et génie logiciel H2015
La pile – l’instruction swap
void swap(int *xp, int *yp)
{
int t0 = *xp;
int t1 = *yp;
*xp = t1;
*yp = t0;
}
swap:
pushl %ebp
movl %esp,%ebp
pushl %ebx
movl 12(%ebp),%ecx
movl 8(%ebp),%edx
movl (%ecx),%eax
movl (%edx),%ebx
movl %eax,(%edx)
movl %ebx,(%ecx)
movl -4(%ebp),%ebx
movl %ebp,%esp
popl %ebp
ret
corps
(code,
etc)
prologue
epilogue
Assembleur
5Génie informatique et génie logiciel H2015
void swap(int *xp, int *yp)
{
int t0 = *xp;
int t1 = *yp;
*xp = t1;
*yp = t0;
}
movl 12(%ebp),%ecx # ecx = yp
movl 8(%ebp),%edx # edx = xp
movl (%ecx),%eax # eax = *yp (t1)
movl (%edx),%ebx # ebx = *xp (t0)
movl %eax,(%edx) # *xp = eax
movl %ebx,(%ecx) # *yp = ebx
Pile
Registre Variable
%ecx yp
%edx xp
%eax t1
%ebx t0
yp
xp
ad. ret.
ancien
%ebp %ebp
0
4
8
12
Offset
ancien
%ebx
-4
1 / 48 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !