04.Introduction à l`assembleur

Download Report

Transcript 04.Introduction à l`assembleur

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  8BC3
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 21h
– notion de service
Premier programme en Assembleur (2/2)
.MODEL SMALL
.CODE
MOV DL, 4
ADD DL, 3
Notre addition
ADD DL, 48
Directives
de
compilation
Conversion en ASCII
MOV AH, 2
INT 21H
MOV AH, 4CH
INT 21H
END
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
<=64k
>64k
<=64k
<=1M
<=1M
data
<=64k
<=64k
<=1M
<=1M
<=1M
array
<=64k
<=64k
<=64k
<=64k
>64k
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
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
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
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
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
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