Systme dexploitation Assembleur Semaine 04 Introduction lassembleur Programmer
Système d’exploitation : Assembleur Semaine 04 Introduction à l’assembleur
Programmer en Assembleur 1/2 Programme source (. asm) Programme binaire (. obj) Programme exécutable (. exe) Assemblage Edition de liens par MASM par LINK • 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 8 BC 3
Programmer en Assembleur 2/2 Programme source (. asm) Programme binaire (. obj) Programme exécutable (. exe) Assemblage Edition de liens par MASM par LINK • 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 21 h – notion de service
Premier programme en Assembleur (2/2) . MODEL SMALL. CODE MOV DL, 4 ADD DL, 3 ADD DL, 48 Directives de compilation MOV AH, 2 INT 21 H MOV AH, 4 CH INT 21 H END Notre addition Conversion en ASCII Affichage Retour au DOS
Table des codes ASCII
Structure d’un programme en Assembleur : Les directives 1/2 directive. model : • a) b) – – – avant les autres directives initialise le modèle à employer en fonction du code et des données (small-medium-compact-large-huge) small Medium Compact Large Huge code <=64 k >64 k <=1 M data <=64 k <=1 M array <=64 k >64 k
Structure d’un programme en Assembleur : Les directives 2/2 • directive. data : a) b) • directive. code : a) b) c) d) e) • permet d’initialiser un segment de données segment clôturé par autre directive ou end 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 : a) fin du fichier source
Les types de données (1/3) La directive db • a) b) c) d) e) f) g) syntaxe : [symbole] db valeur [, valeur, …] db = define byte - réservation d’une donnée sur 8 bits exemples : a db 153 b db -53 c db 255 d db 0 abh e db 10010010 b réservation d’une donnée non initialisée : f db ? réservation d’un vecteur de données : vect 1 db 3, 12, 7 vect 2 db 0 ah, 101 b, -17 l’opérateur DUP v 1 db 3 dup (10) v 2 db 2 dup (3, 12, -7, 0 ah) Chaînes de caractères : ch 1 db ‘bonjour’ ch 2 db “bonjour” ch 3 db 0 Ah, ’bonjour’
Les types de données (2/3) La directive dw • a) b) c) d) e) f) syntaxe : [symbole] dw valeur [, valeur, …] dw = define word - réservation d’une donnée sur 16 bit attention à l’ordre des octets en mémoire exemples : aa dw 1534 bb dw 65535 cc dw -28645 dd dw 0 abh ee dw 10010010 b réservation d’une donnée non initialisée : ff dw ? réservation d’un vecteur de données : vect 1 dw 3, 12, -7 vect 2 dw 0 ah, 101 b, -17 l’opérateur DUP
Les types de données (3/3) La directive dd • a) b) c) d) e) f) syntaxe : [symbole] dd valeur [, valeur, …] dd = define double - 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 0 abcdef 12 h eeee dd 1111 0000 1111 1000 10010 b réservation d’une donnée non initialisée : ffff dd ? réservation d’un vecteur de données : vect. A dd 314, 14012, -7 vect. B dd 0 fh, 10401 b, -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 : mov ax, 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 : mov ax, 0 ABCDh
- Slides: 12