290 likes | 401 Views
Les bases de l’assembleur. Laurent JEANPIERRE <jeanpl@iutc3.unicaen.fr> D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3. Contenu du cours. Structure d’un programme Les directives Les instructions / opérandes Les données initialisées Déplacer des données ( MOV, PUSH ).
E N D
Les bases de l’assembleur Laurent JEANPIERRE <jeanpl@iutc3.unicaen.fr> D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3 Département Informatique
Contenu du cours • Structure d’un programme • Les directives • Les instructions / opérandes • Les données initialisées • Déplacer des données (MOV, PUSH ) Département Informatique
Structure d’un programme • Un source assembleur est une suite de lignes : • Indépendantes • Se suivant dans l’ordre • Chaque ligne peut contenir (dans l’ordre) • Un label • Une instruction/directive (+ opérandes) • Un commentaire • Le symbole « \ » seul • Les espaces/tabulations n’ont pas de sens Département Informatique
Structure d’un programme (2) • Exemple : Ici1: movl2 $0,%eax3 \4#5 met A à 0 • Le label « Ici » • L’instruction « movl » • Les opérandes « $0, %eax » • La rupture de ligne « \ » • Le commentaire « met A à 0 » Département Informatique
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 • Le label (ou encore étiquette) Département Informatique
Un label • Commence en première colonne • Obéit au motif [A-Za-z_.][0-9A-Za-z_.]* : • Une lettre, le caractère « _ » ou un point • Éventuellement des chiffres, des lettres, des caractères « _ » ou « . » • Se termine par un deux-points : « : » • Est unique dans tout le programme. • Exemple :Label_exemple.13 Département Informatique
Les commentaires • Commencent par un dièse « # » • Se terminent en fin de ligne • Contiennent ce que vous voulez ! • Ils sont ignorés par le compilateur • Ils ne produisent pas de code machine • Ils expliquent le programme Département Informatique
Le caractère « \ » seul • Indique la rupture de ligne • N’est suivi d’aucun caractère • Lors de l’assemblage : • La ligne suivante sera lue • comme la suite de la ligne courante • Exemple : movl %eax, \ (0x12345678) # gros entier Département Informatique
Contenu du cours • Structure d’un programme • Les directives • Les instructions / opérandes • Les données initialisées • Déplacer des données (MOV, PUSH ) Département Informatique
Définition • Une directive de compilation • Ne génère pas de code • Donne des ordres au compilateur • Ne change pas le structure du programme • Elle respecte le motif .[a-z]+ : • Un point « . » • Une ou plusieurs lettres MINUSCULES Département Informatique
Directives de segmentation • .align n • Aligne les données en mémoire • Sur des paquets de n octets • Exemple : un 80386 ne peut lire un ‘long’ (32 bits) que s’il est aligné tous les 4 octets. • .data • Indique le début du segment de données • .text • Indique le début du segment de code Département Informatique
Directives de constantes • .byte 65,0b1000001,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 Département Informatique
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’ final (≠ .string) • .float 0f – 31415926E-7 • Stocke un nombre flottant en mémoire (voir cours sur le FPU) • (ici : - p) Département Informatique
Contenu du cours • Structure d’un programme • Les directives • Les instructions / opérandes • Les données initialisées • Déplacer des données (MOV, PUSH ) Département Informatique
Les instructions • Mnémoniques du langage du processeur cible • Peuvent avoir un ou plusieurs opérandes • Génèrent du code pendant l’assemblage • Sont très nombreuses(Ne seront pas toutes étudiées !) • Exemple : addl $4, %eax cmpl $111, %eax jz Boucle Département Informatique
Les opérandes • Indiquent les argument de l’instruction (ou directive) courante séparées par des virgules • Peuvent être : • Registres : %eax, %esp, %bh, … • Constantes : $1, $0x24, $’A, $Question(Question étant un label)(sauf dans les directives : pas de dollar « $ ») • Expressions : $(64+1), $(’B-1)(L’assembleur remplace par le résultat) • Indirection : (13)(contenu de la mémoire à l’adresse 13. Pas pour les directives) Département Informatique
Contenu du cours • Structure d’un programme • Les directives • Les instructions / opérandes • Les données initialisées • Déplacer des données (MOV, PUSH ) Département Informatique
Bases de calculs • Décimale : [1-9][0-9]* • Mode par défaut de l’assembleur • Ne peut pas commencer par un zéro • Binaire : 0b[01]+ • Octal : 0[0-7]* • Hexadécimal : 0x[0-9A-Fa-f]+ Département Informatique
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 Département Informatique
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 Département Informatique
Les flottants • .float, ou .single • Simple précision, 4 octets, 32 bits • .double • Double précision, 8 octets, 64 bits • Les FPU travaillent en fait sur 80 bits • Mais échangent leurs données sur 32 ou sur 64 bits avec le processeur central. • Voir cours sur la Floating Point Unit… Département Informatique
Les tableaux 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 Département Informatique
Les chaînes de caractères Deux façons de stocker une chaîne : • .ascii "Abcdefgh" • Insère les 8 premières lettres de l’alphabet • .string "Abcdefgh" • Insère les 8 lettres suivies du caractère N° 0 • Le caractère 0 indique la fin de chaîne Département Informatique
Contenu du cours • Structure d’un programme • Les directives • Les instructions / opérandes • Les données initialisées • Déplacer des données (MOV, PUSH ) Département Informatique
Manipulation de données • Opération de base = copie de données. • Instruction = MOV • Copie la source dans la destination • Ex : • movl $0,%eax #A0 • movl $10,%ebx #B10 • movl %ebx,%eax #AB • #ici, A et B contiennent 10 Département Informatique
Sélection de la taille des données • Dans la norme AT&T, la taille doit être indiquée • On ajoute une lettre à l’instruction • B : Byte, 1 octet • W : Word, 2 octets • L : Long Word, 4 octets • Q : Quad Word, 8 octets • Ex : • movw $0, %ax • movq $25, %mm0 # registre mmx Département Informatique
MOV : opérations permises • Tous les mouvements ne sont pas permis • Exemple : Mémoire Mémoire est illégal • Les possibilités sont : Valeur Immédiate M E M O I R E eAX eBX eCX eDX eSI eDI eBP eSP CS, DS, ES, FS, GS, SS Département Informatique
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 = empilermet une valeur sur la pile.Sur x86, le registre esp diminue • POP = dépilerretire une valeur de la pile.Sur x86, le registre espaugmente Département Informatique
esp esp Exemple de manipulation de pile • movw $0x10, %ax • pushl %eax • popl %ebx Pile **10 **10 **10 9610 Département Informatique