Système d’exploitation : Assembleur
Semaine 04Introduction à l’assembleur
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)
Programme binaire ( .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,…
Programme source ( .asm)
Programme binaire ( .obj)
Programme exécutable ( .exe)
Assemblage
par MASM
Edition de liens
par LINK
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
.CODEMOV DL, 4ADD DL, 3ADD DL, 48
MOV AH, 2INT 21H
MOV AH, 4CHINT 21H
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 :a) avant les autres directivesb) 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 :a) permet d’initialiser un segment de donnéesb) segment clôturé par autre directive ou end
• directive .code :a) initialise un segment de code (et clôture le segment de données)b) contient les instructionsc) si données, charger le registre DS (mettre adresse segment de données dans DS) d) @data = nom par défaut du segment de données créé par .datae) 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) syntaxe : [symbole] db valeur [,valeur,…]b) db = define byte - réservation d’une donnée sur 8 bitsc) exemples : a db 153
b db -53c db 255d db 0abhe db 10010010b
d) réservation d’une donnée non initialisée : f db ?e) réservation d’un vecteur de données : vect1 db 3,12,-7
vect2 db 0ah,101b,-17f) l’opérateur DUP v1 db 3 dup (10)
v2 db 2 dup (3,12,-7,0ah)g) 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
a) syntaxe : [symbole] dw valeur [,valeur,…]b) dw = define word - réservation d’une donnée sur 16 bit
attention à l’ordre des octets en mémoirec) exemples : aa dw 1534
bb dw 65535 cc dw -28645dd dw 0abhee dw 10010010b
d) réservation d’une donnée non initialisée : ff dw ?e) réservation d’un vecteur de données : vect1 dw 3,12,-7
vect2 dw 0ah,101b,-17f) l’opérateur DUP
Les types de données (3/3)• La directive dd
a) syntaxe : [symbole] dd valeur [,valeur,…]b) dd = define double - réservation d’une donnée sur 32 bit
attention à l’ordre des octets en mémoirec) exemples : aaaa dd 1534bbbb dd 2305123451 cccc dd -286450451dddd dd 0abcdef12heeee dd 1111 0000 1111 000 0000 1111 1000 10010b
d) réservation d’une donnée non initialisée : ffff dd ?e) réservation d’un vecteur de données : vectA dd 314,14012,-7
vectB dd 0fh,10401b,-17f) 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 WORDDans 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