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