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 par MASM Edition de liens 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 8BC3
Programmer en Assembleur 2/2 Programme source ( .asm) Programme binaire ( .obj) Programme exécutable ( .exe) Assemblage par MASM Edition de liens 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 21h notion de service
Premier programme en Assembleur (2/2) .MODEL SMALL .CODE MOV DL, 4 ADD DL, 3 ADD DL, 48 MOV AH, 2 INT 21H MOV AH, 4CH END Notre addition Conversion en ASCII Affichage Retour au DOS Directives de compilation
Table des codes ASCII
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 = define byte - 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 = 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 0abh ee dw 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 = 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 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 : 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,0ABCDh