30/01/2016
1
30/01/2016 1Khaled Hassine
Khaled.hassin[email protected]
Par : Khaled Hassine
PPROGRAMMATIONROGRAMMATION
AASSEMBLEURSSEMBLEUR
30/01/2016 2
Khaled Hassine
A retenir …
23/08/2010 Khaled Hassine 3
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 :
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
30/01/2016
2
Structure du programme 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 fichier Source
Le fichier source (extension .ASM) contient:
1. L’identificateur du programme sous TITLE (facultative).
2. 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).
23/08/2010 Khaled Hassine 6
Structure du programme source
23/08/2010 Khaled Hassine 7
<Data definition>
Data
Segment
ASSUME CS:<Code Segment Id.>, DS:<Data Segment Id.>
<Instructions
definition>
<Stack Segment Identifier> SEGMENT STACK
Stack
Segment
Code
Segment
<Stack Segment Identifier> ENDS
<Data Segment Identifier> SEGMENT
<Data Segment Identifier> ENDS
<Code Segment Identifier> SEGMENT
<Code Segment Identifier> ENDS
END <Begin Label >
DW <Size of Stack : a number>DUP (?)
MOV AH, 4CH
INT 21H
MOV AX, <Data Segment Identifier>
MOV DS, AX
<Begin Label > :
Exemple de programme
23/08/2010 Khaled Hassine 8
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
30/01/2016
3
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 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
Khaled Hassine 9
Exécution d’un programme
assembleur
23/08/2010 Khaled Hassine 10
Le fichier OBJ ne
peut être généré
que si le
programme
source ne
présente pas
d’erreurs
syntaxiques
MASM
TASM
LINK
TLINK
23/08/2010 Khaled Hassine 11
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !