120 likes | 288 Views
Système d’exploitation : Assembleur. Semaine 04 Introduction à l’assembleur. Programme source ( .asm). Programme binaire ( . obj ). Programme exécutable ( .exe). Assemblage par MASM. Edition de liens par LINK. Programmer en Assembleur 1/2. Mnémoniques et code binaire
E N D
Système d’exploitation : Assembleur Semaine 04 Introduction à l’assembleur
Programme source ( .asm) Programmebinaire ( .obj) Programme exécutable ( .exe) Assemblage par MASM Edition de liens par LINK Programmer en Assembleur 1/2 • Mnémoniques et code binaire • Encodage d’un programme (Notepad++) • Assemblage (MASM) • transformation du code assembleur en langage machine • MOV AX,BX 1000 1011 11 00 0011 8BC3
Programme source ( .asm) Programmebinaire ( .obj) Programme exécutable ( .exe) Assemblage par MASM Edition de liens par LINK Programmer en Assembleur 2/2 • Edition de liens (LINK) • Création d’un fichier exécutable à partir d'un ou plusieurs fichiers objets. • Debugger (Ollydbg): • Permet une exécution pas-à-pas du programme avec la possibilité d’observer les valeurs présentes dans les registres,…
Premier programme en Assembleur (1/2) • Construction d’une ligne d’instruction en mnémonique :4 zones:LABEL CODE-OPERATION OPERANDE ;COMMENTAIRES • L’instruction MOV : instruction la plus utilisée en Assembleur • L’instruction ADD • Addition de 4 et 3 • Premier aperçu sur les interruptions • qu’est-ce qu’une interruption ? • INT 21h • notion de service
.MODEL SMALL .CODE MOV DL, 4 ADD DL, 3 ADD DL, 48 MOV AH, 2 INT 21H MOV AH, 4CH INT 21H END Notre addition Directives de compilation Conversion en ASCII Affichage Retour au DOS Premier programme en Assembleur (2/2)
Structure d’un programme en Assembleur : Les directives 1/2 • directive .model : • avant les autres directives • initialise le modèle à employer en fonction du code et des données (small-medium-compact-large-huge) code data array • small <=64k <=64k <=64k • Medium >64k <=64k <=64k • Compact <=64k <=1M <=64k • Large <=1M <=1M <=64k • Huge <=1M <=1M >64k
Structure d’un programme en Assembleur : Les directives 2/2 • directive .data : • permet d’initialiser un segment de données • segment clôturé par autre directive ou end • directive .code : • initialise un segment de code (et clôture le segment de données) • contient les instructions • si données, charger le registre DS (mettre adresse segment de données dans DS) • @data = nom par défaut du segment de données créé par .data • Obligation de passer par AX ! (voir instruction MOV ) • directive .end : • fin du fichier source
Les types de données (1/3) • La directive db • syntaxe : [symbole] db valeur [,valeur,…] • db = definebyte - réservation d’une donnée sur 8 bits • exemples : a db 153 b db -53 c db 255 d db 0abh e db 10010010b • réservation d’une donnée non initialisée : f db ? • réservation d’un vecteur de données : vect1 db 3,12,-7 vect2 db 0ah,101b,-17 • l’opérateur DUP v1 db 3 dup (10) v2 db 2 dup (3,12,-7,0ah) • Chaînes de caractères : ch1 db ‘bonjour’ ch2 db “bonjour” ch3 db 0Ah,’bonjour’
Les types de données (2/3) • La directive dw • syntaxe : [symbole] dw valeur [,valeur,…] • dw= defineword - réservation d’une donnée sur 16 bit attention à l’ordre des octets en mémoire • exemples : aadw 1534 bbdw 65535 cc dw -28645 dd dw 0abh eedw 10010010b • réservation d’une donnée non initialisée : ff dw ? • réservation d’un vecteur de données : vect1 dw 3,12,-7 vect2 dw 0ah,101b,-17 • l’opérateur DUP
Les types de données (3/3) • La directive dd • syntaxe : [symbole] dd valeur [,valeur,…] • dd = definedouble - réservation d’une donnée sur 32 bit attention à l’ordre des octets en mémoire • exemples : aaaa dd 1534 bbbb dd 2305123451 cccc dd -286450451 dddd dd 0abcdef12h eeee dd 1111 0000 1111 000 0000 1111 1000 10010b • réservation d’une donnée non initialisée : ffff dd ? • réservation d’un vecteur de données : vectA dd 314,14012,-7 vectB dd 0fh,10401b,-17 • l’opérateur DUP
Structure d’un programme en Assembleur : Règles importantes • Instruction à 2 opérandes : • Opérande 1 = Destination • Opérande 2 = Source exemple : movax, bx • Données traitées par l’ALU : type BYTE ou WORD Dans une même instruction : utiliser le même type pour DESTINATION et SOURCE • Instructions à 2 opérandes : IL FAUT UTILISER UN REGISTRE !! (destination ou source) exemple : movax,0ABCDh