La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Chapitre 2 : Le Langage Assembleur dIntel 80x86 Section 2.1:Directives Section 2.2: Éditer, Assembler, Lier et Exécuter un programme Section 2.3: Quelques.

Présentations similaires


Présentation au sujet: "Chapitre 2 : Le Langage Assembleur dIntel 80x86 Section 2.1:Directives Section 2.2: Éditer, Assembler, Lier et Exécuter un programme Section 2.3: Quelques."— Transcription de la présentation:

1 Chapitre 2 : Le Langage Assembleur dIntel 80x86 Section 2.1:Directives Section 2.2: Éditer, Assembler, Lier et Exécuter un programme Section 2.3: Quelques exemples Section 2.4: Instructions control de transfert Section 2.5: Définition de données et leurs types Section 2.6: Définition du Segment Complet Section 2.7: Fichiers.COM et. EXE R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 1/21

2 Objectives Les objectifs de ce chapitre sont: -Expliquer la différence entre les instructions et pseudo-instructions dans le langage Assembleur. -Identifier les segments dans un programme en langage Assembleur. -Comment Éditer, Assembler, Lier, et Exécuter un programme simple en langage Assembleur. -Différencier entre les différentes instructions de contrôle de transfert, conditionnelles et inconditionnelles comme JMP et CALL. -Connaître quelques directives de données en langage Assembleur. -Écrire un programme en langage Assembleur en utilisant la définition des segments complet et simplifie. -Expliquer la différence entre les fichier.COM et.EXE et les avantages de chacun des deux types. R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 2/21

3 Section 2.1 Directives Un programme en langage Assembleur = série dinstructions et de directives (pseudo-instructions). Les directives montrent au logiciel assembleur comment traduire le langage assembleur en code machine. [ label : ]mnémonique [ opérandes ][ ;commentaire, génère le code machine pour la CPU ] [label ]directive [ ;commentaire, ne génère pas de code machine ] les [ ] indiquent que le champs est optionnel ; Prog2_0.asm : Un exemple montrant la forme dun programme écrit en langage Assembleur..MODEL SMALL; définit le modèle de mémoire comme petit ; max. 64Ko pour chacun des segments: ; code et données MIDIUM, COMPACT, ….STACK 64; marque le début de SS, et lui réserve 64Ko.DATA; marque le début de DS DATA 1DB52h; Le DS définit 3 données: DATA1, DATA2 et SUM DATA 2DB29h; la directive DB montre a lassembleur que SUMDB?; les allocations mémoire sont des Octets DW..CODE; marque le début de CS MAINPROCFAR; Point dentrée du programme; avec PROCedure ; étiquetée MAIN doption FAR (a voir avec NEAR) charger ladresse du segment de données MOVDS, AX; assigner une valeur a DS MOVAL, DATA1; 1 er opérande MOVBL, DATA2; 2 eme opérande ADDAL, BL; additionner les deux opérandes JZDEBUT MOVSUM, AL; stocker le résultat dans la location SUM MOVAH, 4Ch; retourne le control au DOS INT21h; ou bien INT 3h MAINENDP; fin de la procédure MAIN ENDMAIN; point de sortie du programme IMPORTANT 1. On ne peut imposer au DOS dassigner des espaces mémoire aux CS, DS et SS. Le DOS gère a sa façon la mémoire et seul assignera des valeurs aux CS, DS et SS. 2. La valeur de DS/SS/CS diffère dun PC a lautre et dune version du DOS a lautre. Contrairement aux CS et SS, la valeur de DS devrait être initialisée par le programme: MOV ; DATA indique le début de DS MOV DS, AX ; et non MOV 3. Ne tentez pas de modifier les valeurs de CS, DS, SS le système peut bloquer. R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 3/21

4 Section 2.2 Éditer, Assembler, Lier et Exécuter un programme ÉtapeEntréeProgramme (Logiciel)Sortie 1. Édition du programmeClavierÉditeur (DOS, Word, etc.)fichier.asm 2. Assembler le programmefichier.asmMASM ou TASMfichier.obj 3. Lier le programmefichier.objLINK ou TLINKfichier.exe 4. Exécuter le programmefichier.exeDEBUGÉcran C> TASM A: fichier.asm … Compilation rapports, erreurs …. C> TLINK A: fichier.obj … Compilation rapports, erreurs …. C> DEBUG A: fichier.exe … Commandes: -U CS:0 1 -D 1066:0 F -G -D 1066:0 F -Q Code Machine EDITEUR PROGRAMME ASSEMBLEUR PROGRAMME LINK fichier.exe fichier.asm fichier.obj autres_fich.obj fichier.lst ( option / l ) (opcodes, adresses, err) Note Utile pour debuguer. MASM taper fichier.lst ! more pour le voir. Utiliser la directives: TITLE (60 caractères ASCII) et PAGE 60, 132 ( defaut 66, 80). Avec TASM: (tasm /l) fichier.map Note Pour localiser les segments de D et C dans la mémoire. (Avec TASM: tasm /zi) R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 4/21

5 La location ou le DOS chargera le programme dépendra de la taille de la RAM et de la version du DOS. Les valeurs de CS, DS ou ladresse dune instruction particulière (comme MOV A, xxxx) peuvent avoir des valeurs différentes dans les 3 exemples suivants, ne tentez pas de changer les adresses de CS ou DS sinon le système sarrêtera. Programme 1: PAGE60, 132 TITLEprog2_1.asm: Addition de 5 octets (25h, 12h, 15h, 1Fh, et 2Bh) et stocker le résultat (sous entendu dans A).MODEL SMALL; définit le modèle de mémoire comme petit.STACK 64; marque le début de SS, et lui réserve 64Ko ; DATA; marque le début de DS DATA_INDB 25h, 12h, 15h, 1Fh, 2Bh ; Le DS définit 5 données et une donnée résultat SUMDB?; SUM. Les allocations mémoire sont de type DB. ; CODE; marque le début de CS MAINPROCFAR; Entrée du progam. avec PROCedure étiquetée MAIN doption FAR charger ladresse du segment de données MOVDS, AX; assigner une valeur à DS MOVCX, 05; Initialiser le compteur boucle a la valeur 5 MOVBX, OFFSET DATA_IN; Assigner au pointeur de données BX ladresse offset de DATA_IN. ; Note: La directive OFFSET permet daccéder une adresse offset ; assignée a une variable ou un nom MOVAL, 0; Initialiser AL ENCORE:ADDAL, [BX]; Ajouter la prochaine donnée au registre Accum. A INCBX; Incrémenter BX pour quil pointe sur la prochaine donnée DECCX; Décrémenter la boucle du compteur JNZENCORE; Sauter si le compteur nest pas zéro MOVSUM, AL; charger le résultat dans la location mémoire SUM MOVAH, 4Ch INT21h ; retourne le control au DOS MAINENDP; fin de la procédure MAIN ENDMAIN; point de sortie du programme BOUCLEBOUCLE Section 2.3 : Quelques Exemples de Programmes R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 5/21

6 Après que le programme soit assemblé (tasm prog1_1.asm ) et linké (tlink prog1_1.obj ), lexécution par DEBUG (debug prog1_1.exe ) donne, avec les commandes –u, -d, -g et -q: C> debug prog2_1.exe -u cs:0:19 0B75:0000B8770BMOVAX, 0B77 0B75:00038ED8MOVDS, AX 0B75:0005B MOVCX, B75:0008BB0000MOVBX, B75:000B0207ADDAL, [BX] 0B75:000D43INCBX 0B75:000E49DECCX 0B75:000F75FAJNZ000D 0B75: MOV[0005], AL 0B75:0014B44CMOVAH, 4C 0B75:0016CD21INT21 -d 0B77:0 f 0B77: F 2B ….. -g Program terminated normally -d 0B77:0 f 0B77: F 2B ….. -q C> NOTES: 1. ADD AL, [BX] ajoute le contenu de la location mémoire pointée par BX au contenu de AL. 2. INC BX incrémente le pointeur en ajoutant 1 au registre BX. Ceci force BX à pointer sur le prochain octet (prochaine donnée à additioner). 3. Il ya dautres alternatives pour écrire le même programme. Celui-ci définit un champ de données et utilise un pointeur [BX] pour accéder à ses éléments. Le programme qui suivra est une autre façon décrire, en évitant la boucle et lutilisation de pointeur. Cest quoi son inconvénient?: fatiguant si beaucoup de données à additionner Adressage direct et indirect. Section 2.3 : Quelques Exemples de Programmes DS CS Notez que loctet LSB est stocké en (1 er ), i.e. ladreese basse. R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 6/21

7 Programme 1b: PAGE60, 132 TITLEprog2_1b.asm: Addition de 5 octets (25h, 12h, 15h, 1Fh, et 2Bh) et stocker le résultat (sous entendu dans A).MODEL SMALL; définit le modèle de mémoire comme petit.STACK 64; marque le début de SS, et lui réserve 64Ko ; DATA; marque le début de DS DATA1DB 25h; Le DS définit une donnée: DATA1 DATA2DB 12h; Le DS définit une donnée: DATA2 DATA3DB 15h; Le DS définit une donnée: DATA3 DATA4DB 1Fh; Le DS définit une donnée: DATA4 DATA5DB 2Bh; Le DS définit une donnée: DATA5 ; les allocations mémoire sont de type DB. SUMDB?; Le DS définit une donnée résultat: SUM ; CODE; marque le début de CS MAINPROCFAR; Entrée du prog. avec PROCedure étiquetée MAIN doption FAR charger ladresse du segment de données MOVDS, AX; assigner une valeur a DS MOVAL, DATA1; Déplacer DATA1 vers AL ADDAL, DATA2; Ajouter la donnée DATA2 au registre Accumulateur A ADDAL, DATA3; Ajouter la donnee DATA3 au registre Accumulateur A ADDAL, DATA4; Ajouter la donnee DATA4 au registre Accumulateur A ADDAL, DATA5; Ajouter la donnee DATA5 au registre Accumulateur A MOVSUM, AL; charger le résultat dans la location mémoire SUM MOVAH, 4Ch INT21h ; retourne le control au DOS MAINENDP; fin de la procédure MAIN ENDMAIN; point de sortie du programme Section 2.3 : Quelques Exemples de Programmes R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 7/21

8 Section 2.3 : Quelques Exemples de Programmes Programme 2: PAGE60, 132 TITLEprog2_2.asm: Addition de 4 mots (234Dh, 1DE6h, 3BC7h, et 566Ah) et stocker le résultat (dans A).MODEL SMALL; définit le modèle de mémoire comme petit.STACK 64; marque le début de SS, et lui réserve 64Ko ; DATA; marque le début de DS DATA_INDW234Dh, 1DE6h, 3BC7h, 566Ah ; Le DS définit 5 données et une donnée résultat ORG10h; Note: La directive ORG permet dassigner une adresse offset ; a une variable (nom). Ici SUM sera localisée a partir de 0010h. SUMDW?; SUM. Les allocations mémoire sont de type DW. ; CODE; marque le début de CS MAINPROCFAR; Entrée du progam. avec PROCedure étiquetée MAIN doption FAR charger ladresse du segment de données MOVDS, AX; assigner une valeur a DS MOVCX, 04; Initialiser le compteur boucle a la valeur 4 MOVDI, OFFSET DATA_IN; Assigner au pointeur de données DI ladresse offset de DATA_IN. MOVBX, 00; Initialiser BX ADD_LP:ADDBX, [DI]; Ajouter le contenu de la mémoire pointe par DI au registre BX INCDI; Incrémenter DI une fois INCDI; Incrémenter DI deux fois DECCX; Décrémenter la boucle du compteur JNZ ADD_LP ; Sauter a linstruction labelée par ADD_LP si le compteur est nonzero MOVSI, OFFSET SUM; charger un pointeur SI pour la variable SUM MOV[SI], BX; stocker la donnée dans BX a la location pointée par SI, i.e. SUM ;MOVAH, 4Ch; retourne le control au DOS INT3h ;INT21h ; retourne le control au DOS MAINENDP; fin de la procédure MAIN ENDMAIN; point de sortie du programme R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 8/21

9 Execution du Programme 2 C> debug prog2_2.exe -u cs:0:19 0B75:0000B8770BMOVAX, 0B77 0B75:00038ED8MOVDS, AX 0B75:0005B90400MOVCX, B75:0008BF0000MOVDI, B75:000BBB0000MOVBX, B75:000E031DADDBX, [DI] 0B75:001047INCDI 0B75:001147INCDI 0B75:001249DECCX 0B75:001375FAJNZ000E 0B75:0015BE1000MOVSI, B75:0018BE891CMOV[SI], BX 0B75:001AB44CMOVAH, 4C 0B75:001CCD21INT21 -d 0B77:0 f 0B77:00004D 23 E6 1D C7 3B 6A 56 xx xx xx xx xx xx xx xx. ….. 0B77:0010xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx. ….. -g Program terminated normally -d 0B77:0 f 0B77:00004D 23 E6 1D C7 3B 6A 56 xx xx xx xx xx xx xx xx. ….. 0B77: D3 xx xx xx xx xx xx xx xx xx xx xx xx xx xx. ….. -q C> Section 2.3 : Quelques Exemples de Programmes Directive ORG = 10 force SUM pour être stockée dans DS:0010 Notez que loctet LSB de SUM (D364) est stocké en (1 er ), i.e. ladreese basse. Little Endian ADD DI, 2 Notez que pour stocker le résultat, en mot, de laddition, le registre SI est chargé par ladresse offset assignée à SUM (0010). Ensuite le contenu de BX est déplacé vers les locations pointées par SI, i.e, les locations 0010 et Addressage Indirect MOV SI, OFFSET SUM MOV [SI], BX Addressage Direct MOV SUM, BX Autre solution R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 9/21

10 Section 2.3 : Quelques Exemples de Programmes Programme 3: PAGE60, 132 TITLEprog3_3.asm: Transfert 6 octets de données des locations avec offset 0010h vers des locations avec offset 0028h.MODEL SMALL; définit le modèle de mémoire comme petit.STACK 64; marque le début de SS, et lui réserve 64Ko ; DATA; marque le début de DS ORG15h DATA_INDB2Eh, 23h, 0 D5h, 6Ah, 89h, 11h ; Le DS définit 6 données de type DB notez que 0D5h et non D5h ORG32h COPIEDB6 DUP(?); pour dupliquer un certain nombre de caracteres: reserver 6 octets ; CODE; marque le début de CS MAINPROCFAR; Entrée du progam. avec PROCedure étiquetée MAIN doption FAR charger ladresse du segment de données MOVDS, AX; assigner une valeur a DS MOVSI, OFFSET DATA_IN; SI pointe sur la donnée a copier. MOVDI, OFFSET COPIE; DI pointe sur la COPIE de la données. MOVCX, 06h; Compteur de boucle = 06 MOV_LP:MOVAL, [SI]; Déplacer la prochaine donnée de lespace DATA_IN vers AL MOV[DI], AL; Déplacer la prochaine donnée vers lespace COPIE INCSI; Incrémenter SI INCDI; Incrémenter DI DECCX; Décrémenter la boucle du compteur JNZ MOV_LP ; Sauter a linstruction MOV_LP si le compteur est nonzero MOVAH, 4Ch; retourne le control au DOS INT21h ; retourne le control au DOS MAINENDP; fin de la procédure MAIN ENDMAIN; point de sortie du programme R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 10/21

11 Execution du Programme 3 C> debug prog2_3.exe -u cs:0:19 0B75:0000B8770BMOVAX, 0B77 0B75:00038ED8MOVDS, AX 0B75:0005BF0000MOVSI, B75:0008BF0000MOVDI, B75:000BB90400MOVCX, B75:000E031DADDAL, [SI] 0B75:00102E32ADD[DI], AL 0B75:001247INCSI 0B75:001346INCDI 0B75:001449DECCX 0B75:001575FAJNZ000E 0B75:0017B44CMOVAH, 4C 0B75:0019CD21INT21 -g Program terminated normally -d 0B77:0 3f 0B77:0000xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx. ….. 0B77:0010xx xx xx xx xx 2E 23 D5 6A xx xx xx xx xx. ….. 0B77:0030xx xx 2E 23 D5 6A xx xx xx xx xx xx xx xx. ….. -q C> Section 2.3 : Quelques Exemples de Programmes NOTE IMPORTANTE: 1. Lune des taches du DOS est de déterminer le montant total de la RAM installée dans le PC. Le DOS utilise la portion dont il a besoin pour le Système dopération et alloue le reste. 2. Mais un programme ne peut dicter les adresses physiques exactes des locations mémoires pour la pile et autres segments, a partir du moment que la gestion de la mémoire incombe au de la responsabilité du seul DOS, qui avec laide du programme LINK, assemble les programmes dans la mémoire du PC. 3. Il est recommande davoir un seul segment de pile pour éviter la fragmentation de la RAM par le pile. mais il nest pas interdit davoir plusieurs segments de code et de données. Cest la responsabilité de LINK de combiner les différents segments de codes et données pour créer un seul programme exécutable avec un seul segment de pile, qui est la pile du système. R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 11/21

12 Dans la séquence des instructions à exécuter, il est souvent nécessaire de transférer le contrôle du programme vers différentes locations dans la mémoire. Intra-segment et Inter-segment: NEAR et FAR Si le contrôle est transféré dans une location à lintérieur du code segment courant, il est de type NEAR (Intrasegment). Par contre, sil se fait à lextérieur, il est de type FAR (Inter-segment). Dans le premier cas seul le registre IP de ladresse logique CS:IP est à mettre à jour, alors que les deux registres CS et IP sont à changer avec loption FAR. Sauts conditionnels Avec le saut conditionnel, le contrôle est transféré vers une certaine location si une certaine condition est rencontrée. Le registre Flag est celui qui indique la condition courante. Section 2.4 : Instructions contrôle de transfert R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 12/21

13 Section 2.4 : Instructions contrôle de transfert Sauts conditionnelsAu dess(o)us réfère à la relation entre 2 valeurs non signées, alors que plus grand/ moins concerne 2 valeurs signées. MnémoniqueCondition testéeSaut Si … JA/JNBE(CF=0) et (ZF=0)Au dessus/non au dessous ni zéro JAE/JNB(CF=0)Au dessus ou égale/non au dessous JB/JNAE(CF=1)Au dessous/non au dessus ni égale JBE/JNA(CF or ZF) =0Au dessous ou égale /non au dessus JC(CF=1)Carry JE/JZ(ZF=1)Égale/Zéro JG/JNLE[ (SF xor OF) or ZF ] = 0Plus grand/ pas moins ni égale JGE/JNL(SF xor OF) = 0Plus grand ou égale/ pas moins JL/JNGE(SF xor OR) = 1Moins / pas plus grand ni égale JLE/JNG[ (SF xor OF) or ZF ] = 1Moins ou égale / Pas plus grand JNC(CF=0)Pas carry JNE/JNZ(ZF=0)Pas égale / pas zéro JNO(OF=0)Pas dépassement JNP/JPO(PF=0)Pas parité / parité impaire JNS(SF=0)Pas signe JO(OF=1)Dépassement JP/JPE(PF=1)Parité / parité égale JS(SF=1)Signe R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 13/21

14 Section 2.4 : Instructions contrôle de transfert Sauts courts Tout les sauts conditionnels sont des sauts courts, ladresse de la cible est à lintérieure de la bande [–128 : 127] octets autour de IP. Le saut conditionnel est une instruction à 2 octets: le 1 er est lopcode et le 2 eme est une valeur entre 00h et FFh (soit un saut en arrière vers –128 et un saut en avant vers +127). 0B75:0008BB0000MOVBX, B75:000B0207ADDAL, [BX] 0B75:000D43INCBX 0B75:000E49DECCX 0B75:000F75FAJNZ000D 0B75: MOV[0005], AL Autre exemple: saut en avant 0005 BB ENCORE:MOVAL, [BX] C 61CMPAL, 61h 000A72 06 JBPROCHAINE 000C3C 7A CMPAL, 7Ah 000E77 02JAPROCHAINE DFANDAL, 0DFh PROCHAINE:MOV[SI], AL 11 + FA = 000Bh Adresse cible Adresse prochaine instruction Adresse de linstruction avec label (vers laquelle le saut seffectue) FA est le Complément à 2 de - 6 ladresse cible est – 6 octets de lIP de la prochaine instruction (0011h) 1 er saut: 000C + 06 = 0012h 2 eme saut: = 0012h R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 14/21

15 Section 2.4 : Instructions contrôle de transfert Sauts inconditionnels Linstruction JMP label permet le transfert de contrôle inconditionnellement vers la location cible label. Ce saut inconditionnel prends différentes formes: 1. JMP SHORT label ou ladresse de la location cible est dans la bande [-128:+127] octets de la mémoire relative a la valeur courante de IP: lopcode est EBh suivi de lopérande de 1 octet dans la bande 00h et FFh. Lopérande + IP + adresse cible, ou lopérande est en C2 si la saut est en arrière, et IP + est le IP de la prochaine instruction. La directive SHORT permet un saut efficace en assignant 1 octet pour lopérande au lieu de 2 octets. 2. Le format par défaut JMP label, dont lopcode est E9h, est un saut inconditionnel de type NEAR. Ladresse de la cible est donnée par lun des modes dadressage; direct, registre, registre indirect, ou mémoire indirect: - Saut Direct est le même que JMP SHORT label, seulement ladresse cible peut etre à lintérieur du segment dans une bande plus large: 0000h – FFFFh, soit a –32768 de lP. - Saut Registre Indirect : ladresse cible se trouve dans un registre, comme dans JMP BX ou IP prend la valeur de BX. - Saut Mémoire Indirect : ladresse cible est le contenu de 2 locations mémoire, comme dansJMP [DI] ou IP prend les contenus des locations mémoire pointées par DI et DI JMP FAR PTR label est un saut de type FAR, à lextérieur du code segment courant; où non seulement le IP qui est à altérer mais aussi le registre CS doit etre changé. R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 15/21

16 Instruction de contrôle de transfert: CALL FAR ou NEAR Elle est utilisée pour appeler une procédure, une tache qui se répète fréquemment. Ladresse cible se trouve dans le segment CS courant (type NEAR, cest le défaut), ou a lextérieur (type FAR), i.e. en dehors du segment code. Quand le compilateur rencontre linstruction CALL, il indique au P de sauvegarder automatiquement ladresse de linstruction après CALL (soit IP pour NEAR ou CS et IP pour FAR) en empilant dans la pile les valeurs de ces registres (IP ou CS,IP). Ensuite il commence à FETCHer les instructions de la procédure en question. Après son exécution, le contrôle est transféré au programme principale, une fois linstruction RET (FAR ou NEAR) est rencontrée dans la subroutine. A ce moment la pile est dépiler pour restaurer le IP (et CS pour FAR). 0B75:0200BB1295MOVBX, B75:0203 E8FA00CALL0300 0B75:0206B82F14 MOVAX, 142F …. 0B75:030053PUSHBX 0B75:0301 ……… …….:…… … … ……… 0B75:02095B POPBX 0B75:020AC3 RET Section 2.4 : Instructions contrôle de transfert PUSH : IP = 0206 le IP doit être sauvegardé Avant lexécution de la procédure POP : 0206 le IP doit être restitué Après lexécution de la procédure Début de la procédure BX IP PILE FFFFh FFFEh FFFDh FFFCh R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 16/21

17 Utilisation de CALL PAGE60, 132 TITLEprog_generic.asm: …..MODEL SMALL; définit le modèle de mémoire comme petit.STACK 64; marque le début de SS, et lui réserve 64Ko ; DATA; marque le début de DS DATA_INDB2Eh, 23h, 28h, 6Ah, 89h, 11h ; COPIEDB6 DUP(?); ; CODE; marque le début de CS MAINPROCFAR; Point dentrée du programme pour le DOS charger ladresse du segment de données MOVDS, AX; assigner une valeur a DS CALLSUBR_1 CALLSUBR_2 MOVAH, 4Ch; retourne le control au DOS INT21h ; retourne le control au DOS MAINENDP; fin de la procédure MAIN ; SUBR1PROC … RET SUBR1ENDP ; SUBR2PROC … RET SUBR2ENDP ; ENDMAIN; point de sortie du programme Section 2.4 : Instructions contrôle de transfert R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 17/21

18 Lassembleur supporte tout les types de données du P80x86 moyennant des directives de données qui définissent leurs types pour leur réserver des espaces mémoire. Voici quelques directives utilisées par les P80x86 et supportées par les vendeurs de logiciels et hardwares de IBM PCs et compatibles. ORG (origine) le début de ladresse offset DB (Define Byte) permet dallouer des locations mémoire en unités octet, la plus petite allocation permise P8088/86. DW (Define Word) permet dallouer 2 octets mémoire en même temps P8088/86 et P Les données, écrites en décimale ou binaire, sont converties en Hex suivant la convention Little Endian DD (Define Doubleword) permet dallouer 4 octets mémoire: P80386 et P80486 Little Endian DQ (Define Quadword) permet dallouer 8 octets mémoire: Pentium. Little Endian DATA1DB25; Décimale DDATA2DB B; Binaire DATA3DB12H; Hexadécimale 0010ORG 0010H; Adresse offset DATA4DB 7681 ; Nombres ASCII 0018ORG 0018H DATA5DB?; Réserver un octet 0020ORG 0020H D 6F 6E 20 6E 6F 4D DATA6DB Mon nom ; Caractères ASCII 0070ORG 0070H 0070 BA03 0C00 3B DATA7DW954, 0CH, B, HI ; 0098ORG 0098H 0098 FDFF AB500 0C3B0000DATA8DD65533, 23AB5H, B ; 00B0ORG 00B0H 00B0 C DATA9DQ4523C2H, HI ; 00C0 Section 2.5 : Définition de données et leurs types R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 18/21

19 DT (Define Ten bytes) permet dallouer des locations mémoire pour les nombres BCD (addition multioctet). 00E0ORG 00E0H 00E DATA10DT h ; BCD 00EA DATA11DT? ; rien DUP (Duplicate) permet de dupliquer un certain nombre de caractères pour éviter de taper beaucoup. 0030ORG 0030H 0030 AFAFAF…AF (16 fois)DATA12DB 0AFh, …, 0AFh ; 16 octets de AF 0050ORG 0050H 0050 AFAFAF…AF (16 fois)DATA12DB 16 DUP (0AFh) ; 16 octets de AF EQU (Equate) permet de définir une constante sans occuper la mémoire. Dans le Code Segment Dans le Data Segment COUNT EQU 25COUNT EQU 25 MOV CX, COUNT COUNTER DB COUNT (dans Data Segment) Notez la différence avec COUNT DB 25 MOV CX, COUNT Cest un adressage direct contrairement au précédent (Adressage immédiat) Avantage de EQU: Si on désire changer une constante, utilisée plusieurs fois dans les segments code et données, on na pas a le faire dans plusieurs places en utilisant la directive EQU. Section 2.5 : Définition de données et leurs types R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 19/21

20 Section 2.6 : Définition du Segment Complet Par opposition au Segment Simplifie MASM Ver. 5 et plus, TASM Ver. 1 et plus: Exemple Prog2_2 TITLEprog2_2b.asm: Addition de 4 mots (234Dh, 1DE6h, 3BC7h, et 566Ah) et stocker le résultat (dans A) PAGE60, 132 STSEGSEGMENT; marque le début de SS DB32 DUP (?); STSEGENDS; marque la fin de SS ; DTSEGSEGMENT ; marque le début de DS DATA_INDW234Dh, 1DE6h, 3BC7h, 566Ah ; Le DS définit 5 données et une donnée résultat ORG10h; Note: La directive ORG permet dassigner une adresse offset SUMDW?; SUM. Les allocations mémoire sont de type DW. DTSEGENDS; marque la fin de DS ; CDSEGSEGMENT ; marque le début de CS MAINPROCFAR; Entrée du programme avec PROCedure étiquetée MAIN doption FAR ASSUME CS:CDSEG, DS:DTSEG, SS:STSEG ; montre a lassembleur quel segments définis par SEGMENT sont a utiliser MOVAX, DTSEG ; charger ladresse du segment de données, DTSEG est le label pour DS MOVDS, AX; DS est le seul que le programme doit initialiser, pas CS/SS (DOS sen charge) MOVCX, 04; Initialiser le compteur boucle a la valeur 4 MOVDI, OFFSET DATA_IN; Assigner au pointeur de données DI ladresse offset de DATA_IN. MOVBX, 00; Initialiser BX ADD_LP:ADDBX, [DI]; Ajouter le contenu de la mémoire pointe par DI au registre BX INCDI; Incrémenter DI une fois INCDI; Incrémenter DI deux fois DECCX; Décrémenter la boucle du compteur JNZ ADD_LP ; Sauter a linstruction labelée par ADD_LP si le compteur est nonzero MOVSI, OFFSET SUM; charger un pointeur SI pour la variable SUM MOV[SI], BX; stocker la donnée dans BX a la location pointée par SI, i.e. SUM MOVAH, 4Ch; retourne le control au DOS INT21h ; retourne le control au DOS MAINENDP; fin de la procédure MAIN CDSEGENDS; marque la fin de CS ENDMAIN; point de sortie du programme R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 20/21

21 Section 2.6 : Fichiers.COM et.EXE Fichier EXE Fichier COM ( P8080/85) Taille illimitéeTaille Max. = 64K octets SS est définitPas de SS DS est définitDS est définit dans CS Code et Données définis a nimporte Adresse Offset Code et Données définis commencent a loffset 0010 Grand fichier (plus de mémoire)Petit fichier (moins de mémoire) TITLEprog2_4.com: Addition de 2 mots PAGE60, 132 CODSGSEGMENT ORG100H ASSUME CS:CODSG, DS:CODSG, ES:CODSG ; l aire du code PROGCODEPROC NEAR MOV AX, DATA1 ADD AX, DATA2 MOV SUM, AX MOV AH, 4CH INT 21H PROGCODEENDP ; l aire des donnees DATA1DW2390 DATA1DW3456 SUMDW? ; CODSGENDS END PROGCODE TITLEprog2_5.com: Addition de 2 mots PAGE60, 132 CODSGSEGMENT ORG100H ASSUME CS:CODSG, DS:CODSG, ES:CODSG DEBUT:JMPPROGCODE ; surpasse laire Don. ; l aire des donnees DATA1DW2390 DATA1DW3456 SUMDW? ; l aire du code PROGCODEMOV AX, DATA1 ADD AX, DATA2 MOV SUM, AX MOV AH, 4CH INT 21H PROGCODEENDP ; CODSGENDS END DEBUT Ce programme tient longtemps pour sassembler : solution Prog2_5 C>EXE2BIN A:PROG, A:PROG.com.exe Note: Pour convertir.exe.com : Mais le fichier source doit être écrit sous format COM, I.e. lune des 2 formes suivantes: R. Beguenane, UQAC, 2002/2003Systèmes à microprocesseurs 21/21


Télécharger ppt "Chapitre 2 : Le Langage Assembleur dIntel 80x86 Section 2.1:Directives Section 2.2: Éditer, Assembler, Lier et Exécuter un programme Section 2.3: Quelques."

Présentations similaires


Annonces Google