http://cs.nyu.edu/courses/spring07/G22.3130-001/assembly_howto.txt
Contenu du cours
Exemple :
1. Le label « Ici »
2. L’instruction « movl »
3. Les opérandes « $0, %eax »
4. La rupture de ligne « \ »
5. Le commentaire « met A à 0 »
Les labels
Tant qu’un programme n’est pas assemblé
Les instructions n’existent pas vraiment
Elles n’ont donc pas d’adresse en mémoire
On doit pourtant y faire référence :
Écriture dans une variable
Affichage d’un message
Appel d’une fonction
Nécessité de donner un nom à une ligne du programme
Lors de l’assemblage :
La ligne suivante sera lue
Comme la suite de la ligne courante
Exemple :
movl %eax, \
$0x12345678 # gros entier
Contenu du cours
.byte 65,0b1100101,0101,0x41,‘A
Inscrit 5 fois le nombre 65 en mémoire
Sur 8 bits chacun
Séparés par des virgules
.quad 0x0123456789ABCDEF, 13
Inscrit de grands nombres en mémoire
Sur 64 bits
Séparés par des virgules
Directives de constantes (2)
.ascii "Ring the bell\7"
Stocke les caractères en mémoire
(Ici suivi du caractère N°7 : BELL)
N’ajoute pas le ‘\0’ finale (≠ .string)
.float 0f – 31415926E-7
Stocke un nombre flottant en mémoire
(voir cours sur le FPU)
(ici : - p)
Contenu du cours
Binaire : 0b[01]+
Octal : 0[0-7]*
Hexadécimal : 0x[0-9A-Fa-f]+
Les entiers
Les processeurs ont un bus de données bien défini (aujourd’hui 32 bits et
plus)
On ne travaille pas toujours avec des mots de cette taille…
Exemple :
260 = 1 0000 01002
En octets (8b) : 0000 00012,0000 01002
Sur 16b : 0000 0001 0000 01002
Sur 32b : 0000 0000 0000 0000 0000 0001
0000 01002
Les entiers (2)
.byte
1 octet, 8 bits
.hword, ou .short
2 octets, 16 bits
.long, ou .int
4 octets, 32 bits
.quad
8 octets, 64 bits
.octa
16 octets, 128 bits
Les flottants
.float, ou .single
Simple précision, 4 octets, 32 bits
.double
Double précision, 8 octets, 64 bits
Deux possibilités :
Énumération des valeurs :
.byte ‘a, ‘b, ‘c, ‘d
.short 0, 1, 2, 3, 4
Spécification de la taille :
.space 4, 25 ou .fill 4,1,25
Est équivalent à
.byte 25, 25, 25, 25
Les chaînes de caractères
.string "Abcdefgh"
Insère les 8 lettres suivies du caractère N° 0
Le caractère 0 indique la fin de chaîne
Contenu du cours
Valeur Immédiate
eAX
M
eBX
E
eCX
M
eDX
O
eSI
I
eDI
R
eBP
E
eSP
CS, DS, ES, FS, GS, SS
Mouvements sur la pile
Pile = LIFO : Last In First Out
En assembleur : mémoire contextuelle
On ferme le dernier bloc ouvert
Comme des parenthèses
Deux instructions :
PUSH = empiler
met une valeur sur la pile.
Sur x86, le registre esp diminue
POP = dépiler
retire une valeur de la pile.
Sur x86, le registre esp augmente
Exemple de manipulation de pile
Registres
**10
**** **10
???? 96
10010
10