Les bases de l’assembleur

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

Fonctionnement d’une machine à pile :
Architecture de machines Codage des informations
Introduction au Langage C,C++
Introduction au langage C
Les procédures et interruptions en Assembleur (Tasm)
GEF 243B Programmation informatique appliquée Types dérivés, structures et tableaux §
Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A
merci Laurent JEANPIERRE
Assembleur
A abstraction b assembleur c nombre binaire d bit e cache f UC g puce h compilateur i famille dordinateurs j contrôle k chemin de données l défaut m dé
La pile un élément essentiel
Exemple de compilation
C.
Objectifs Nous allons concevoir une mise en œuvre contenant un noyau de jeu d’instructions. Nous verrons comment l’architecture de jeu d’instructions.
Les éléments de mémorisation
Le codage de l ’information
Le jeu d ’instructions Introduction Un jeu d ’instruction classique
Les structures de données
Introduction : Compilation et Traduction
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
FLSI602 Génie Informatique et Réseaux
Architecture de machines Le microprocesseur
Système d’exploitation : Assembleur
Les fonctions.
Points importants de la semaine Les types arithmétiques. Les opérateurs.
Partie 1 Etude de l'existant
Récursivité.
Points importants de la semaine Les boucles. Les types arithmétiques. Les opérateurs.
Les piles Djamal Rebaïne.
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Système d’exploitation : Assembleur
Le codage des nombres en informatique
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Sécurité et Buffer Overflow
Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Principes de programmation
IFT 6800 Atelier en Technologies d’information
LANGAGE C LP A2I IUT St DIE
Types de données fondamentaux
L’essentiel du langage C
Mise en forme en Mathématiques
1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 8 Filtres UNIX.
Structures des données
Stocker plusieurs valeurs de même type dans une variable
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
Logique programmée & Microprocesseurs
Ch. PAUL - Piles et Files à l'aide de listes chainées
Cours Architecture des Systèmes Informatiques
LES PILES ET FILES.
Notions de pointeurs en C
Architecture Chapitre 4 Interruptions. 2 Plan Principe Schéma d’acquisition Les états d’une interruption Décentralisation des interruptions Exemples.
SIF-1053 Architecture des ordinateurs
ALGORITHMIQUE ET PROGRAMMATION C
Chapitre 3 :Algèbre de Boole
8PRO107 Éléments de programmation Les chaînes de caractères.
Un survol du language C.
1. Spoon Christophe Delagarde, septembre 1998 I.U.T., Université de la Méditerrainée 2.
Patricia Renault UPMC 2005/2006
Chapitre 4 La représentation des nombres.
Tour rapide d’un premier programme SPARC v9
Chapitre 3 L’accès aux données.
Introduction au langage C
Département Informatique Codage de l’information Laurent JEANPIERRE IUT de CAEN – Campus 3.
Département Informatique Les modes d’adressage Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3.
Département Informatique Gestion du flux d’exécution Laurent JEANPIERRE D’après le cours de Pascal FOUGERAY IUT de CAEN – Campus 3.
Assembleur
Transcription de la présentation:

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

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

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

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

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

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

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é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 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

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é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

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

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é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

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

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

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

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

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 #A0 movl $10,%ebx #B10 movl %ebx,%eax #AB #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 eAX eBX eCX eDX eSI eDI eBP eSP M E O I R Registres généraux Registres de segments Mémoire Valeur Immédiate Gen  Gen Imm  Gen Gen  Seg Gen  Mem Seg  Mem Imm  Mem CS, DS, ES, FS, GS, SS Département Informatique

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 = 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 Département Informatique

Exemple de manipulation de pile movw $0x10, %ax pushl %eax popl %ebx Pile esp **10 esp Registres EAX EBX ESP **** ???? 10010 **10 **10 9610 Département Informatique