A retenir … Avantages et Inconvénients

publicité
30/01/2016
PROGRAMMATION
ASSEMBLEUR
Par :
Khaled Hassine
[email protected]
30/01/2016
Khaled Hassine
1
Khaled Hassine
30/01/2016
A retenir …
Avantages et Inconvénients

Avantages :




Accéder aux registres et aux ports d'entrées/sorties, réaliser des opérations de
bas niveau
Contrôler le comportement du code dans des sections critiques
Optimiser le code (par exemple contourner les règles d'allocation mémoire,
gérer manuellement le cours de l'exécution, pallier aux défauts d'un
compilateur qui ne peut pas les optimiser, etc.)
Inconvénients :

Difficulté de programmation :




23/08/2010
2
Khaled Hassine
3
L'écriture du code pourrait être longue (et ennuyeuse).
Les erreurs ne sont pas faciles à repérer et corriger.
Difficulté de modification et de compréhension d’un code
Non portabilité du code vers une autre architecture
23/08/2010
Khaled Hassine
4
1
30/01/2016
Structure du programme source



Structure du fichier Source
Directive : ne génère pas du code mais aide
l’assembleur à traduire le programme source
Tous segment est délimité par les directives
SEGMENT ENDS
Commentaires : le point-virgule marque le
début des commentaires (tous les caractères
situés à droite d'un point virgule sont ignorés).
23/08/2010
Khaled Hassine
5
Structure du programme source
Stack
Segment
23/08/2010
Khaled Hassine
6
DW <Size of Stack : a number> DUP (?)
Data SEGMENT
Message DB "Bonjour, le monde !$" ; Le segment de données
Data ENDS
Code SEGMENT ; Le segment de code
ASSUME CS : Code, DS : Data
Debut :
MOV AX, Data
MOV DS, AX
MOV AH, 09H ; Affichage du message
MOV DX, OFFSET MESSAGE
INT 21H
MOV AX, 4C00H ; Indicateur de fin du programme
INT 21H
Code ENDS
END Debut
<Data Segment Identifier> SEGMENT
<Data definition>
<Code Segment Identifier> SEGMENT
ASSUME CS:<Code Segment Id.>, DS:<Data Segment Id.>
23/08/2010
2.
Exemple de programme
<Data Segment Identifier> ENDS
Code
Segment
L’identificateur du programme sous TITLE (facultative).
La partie Déclaration de la pile qui est définie dans le segment de
pile délimité par les directives SEGMENT STACK et ENDS
3.
La partie Déclaration des données dans le segment de données
délimitée par les directives SEGMENT et ENDS
4.
La partie instructive (le cœur du programme) délimitée par les
directives SEGMENT et ENDS. La première ligne doit être signalée
par une étiquette.
Le fichier se termine par la directive END suivi du nom de l'étiquette de la
première ligne (pour permettre au traducteur de connaître la première
instruction à exécuter).
1.
<Stack Segment Identifier> SEGMENT STACK
<Stack Segment Identifier> ENDS
Data
Segment
Le fichier source (extension .ASM) contient:
<Begin Label > :
MOV AX, <Data Segment Identifier>
MOV DS, AX
<Instructions
definition>
MOV AH, 4CH
INT 21H
<Code Segment Identifier> ENDS
END <Begin Label >
Khaled Hassine
7
23/08/2010
Khaled Hassine
8
2
30/01/2016
Exécution d’un programme
assembleur
Quelques notes utiles




La déclaration d’une chaîne de caractères est mise en
'' '' ou ' ' .
Le caractère '$' indique la fin d’une chaîne de caractères. Son
omission implique que les octets en mémoire qui viennent
après cette chaîne sont aussi affichés comme des caractères.
L’assembleur ne fait pas de différence entre une majuscule et
une minuscule dans l’écriture de ses instructions et la notation
des registres.
La directive ASSUME permet d'indiquer à l'assembleur où se
situe le segment de données et le segment de code. Puis il
s'agit d'initialiser le segment de données à l’intérieur du
segment de code:
MOV AX, nom_du_segment_de_donnees
MOV DS, AX
23/08/2010
Khaled Hassine
9
Khaled Hassine
11
MASM
TASM
LINK
TLINK
23/08/2010
Le fichier OBJ ne
peut être généré
que si le
programme
source ne
présente pas
d’erreurs
syntaxiques
Khaled Hassine
10
3
Téléchargement