Le language Assembleur 8086Plan 1. Introduction 2. Les registres 3. Gestion de la mémoire 4. Les modes d’adressage 5. Programmation en Assembleur 8086 6. Réalisation pratique d’un programme 1. Introduction • langage assembleur : langage de bas niveau • Intimement lié au fonctionnement de la machine • Représentations mnémoniques des instructions machine (faciles à mémoriser). • Avantages : – programme plus rapide – moins gourmand en espace mémoire – permet d'accéder directement aux ressources matérielles de l'ordinateur (ex ports d'entrées sortie) .Processeur 80×86 Micro-processeur 80× 86 équipent les PC (INTEL) et compatibles – Premier PC (Début 80) = 8086 microprocesseur 16 bits – Puis 80286.80386.80486. de la largeur des bus d'adresse et de données – Ajout de nouvelles instructions et de registres. Compatibilité ascendante : un programme écrit dans un langage machine 80286 peut s'exécuter dans une machine 80386 (l'inverse est faux). Pentium… Amélioration – Augmentation de la fréquence d'horloge. Les Bus • Pour la machine 8086 : – Bus de données : 16 bits – Bus d'adresses : 20 bits • Pour des machine plus récentes : . Les registres du 8086 .2. Spécialisé dans l'adressage indexé – CX (Count) utilisé pour le comptage – DX (Data) utilisé par la multiplication et la division.spécialisé : – AX. Registres de travail à usage +/.Accumulateur principal – BX.Les registres du 8086 1. Chaque registre peut être utilisé comme 2 registres de 8 bits . – BP : Base Pointer. associé à DS – DI : Destination Index utilisé lors des opérations sur des chaines de caractères. associé à SS pour accéder aux données de la pile lors d'appels de sous programmes. associé à SS. il indique la prochaine instruction à exécuter.Les registres du 8086 2. associé à CS. associé à DS – IP : Instruction Pointer . Registres d'offset – SI : Source Index utilisé lors des opérations sur des chaines de caractères. Sa valeur est modifiée par les instructions de branchement et les appels aux sous-programmes. il indique l'adresse du dernier élément de la pile . . – SP : Stack Pointer. Les registres du 8086 • A partir du microprocesseur 80386. EIP et ESP Exemple . ECX et EDX – ESP. EBX.. EDI. – EAX. tous ces registres sont étendus à 32 bits si leur nom est précédé de E (Extended). EBP. Les registres du 8086 3. Travaille avec IP – DS : Data Segment pointe le segment qui contient les données. Les registres de segment Registres spécialisés dans l'adressage de segments (pages) de la mémoire Centrale. Tout accès à la MC ne peut se faire qu'avec le concours de l'un de ces quatre registres : – CS : Code Segment pointe sur un segment qui contient les instructions du programme exécuté.. – ES : Extra Segment : registre supplémentaire pour adresser les données – SS : Stack Segment pointe sur le segment qui contient la pile . Les registres du 8086 . Le registre d'état • Determine l’état courant du microprocesseur. • Son contenu est modifié automatiquement suite aux opérations arithmétique ou logiques.Les registres du 8086 4. • Il contient les indicateurs suivants : . Le registre d'état . 2. Gestion de la mémoire du microprocesseur 8086 Le 8086 dispose de 20 bits d'adresse accepte jusqu'à 1 Mo de mémoire limitation registre 16 bits la mémoire est découpée en segments de 64 bits . Ségmentation de la mémoire Questions : Quel est le nombre de segments possibles : Pourquoi l'adresse est un multiple de 16 ? . 1 . Adresse physique : L’adresse (sur 20 bits ) d’une case mémoire envoyée réellement sur le bus d’adresses A0 .A19. 2 Adresse logique : La donnée d’un couple segment : offset.L’adresse de base d'un segment (registre de segment) .Ségmentation de la mémoire Une case mémoire est repérée en moyen de deux quantités sur 16 bits : .Le déplacement ou offset dans ce segment (registre général) . . Calcul de l’adresse physique : Adresse physique = 16 × segment + offset Exemple : l'adresse logique 3100h : 27EEh l'adresse physique 31000h + 27EEh = 337EEh . La zone mémoire réservée à un programme utilisateur après son chargement en mémoire Remarque : les segments peuvent se chevaucher ou se recouvrir complètement. . 4 . Exemple : MOV DX. 3Ah . 1. copie dans AL la valeur 3A hexa . copie dans AL la valeur 12 (8 bits) MOV AH. 12 . copie dans DX la valeur 4 (codé sur 16 bit) MOV AL. Adressage implicite : L'instruction n'utilise aucun opérande ou concerne des registres implicites. Exemple : RET MOVSB . Les modes d’adressage du microprocesseur 8086 Un mode d'adressage est la méthode de localisation des opérandes qui interviennent dans une opération. copie l'octet d'adresse SI dans celui d'adresse DI 2. retour d'un sous-programme . Adressage immédiat : l'opérande est une constante fournie immédiatement dans l'instruction.3. Exemple : MOV DX. Adressage de la mémoire Une seule des éventuelles opérandes d’une instruction peut être stockée dans la mémoire. le contenu de BH est copié dans AL (8 bits) 4.3. copie dans DX la valeur contenue dans DI MOV AL. SI } déplacement = { Aucun. Adressage de registre (inhérent) : l’opérande se trouve dans un registre de 8 ou 16 bits. BH . DI . valeur 8 bit. valeur 16 bits) Possibilité d’adressage très variés . Son offset est calculé par la formule générale suivante : Offset = Base + Index + déplacement Base = { BX. BP } Index= { DI. Formule de L’offset Déplacement Mode d'adressage Adressage direct Combinaisons possibles [d8] [d16] [BX] [BP] Base Base +déplacement Adressage basé [BX]+[d8] [BX]+[d16] [BP]+[d8] [BP]+[d16] [DI] [SI] [DI]+[d8] [SI]+[d16] [DI]+[d8] [SI]+[d16] [BX + SI] [BX + DI] [BP + SI] [BP + DI] Index Index+ déplacement Adressage indexé Base+Index Base+déplacement +Index Adressage basé indexé [BX + SI] + [d8] [BX + DI] + [d8] [BP + SI] + [d8] [BP + DI] + [d8] [BX + SI] + [d16] [BX + DI] + [d16] [BP + SI] + [d16] [BP + DI] + [d16] . AL est copié dans l'octet d'adresse SS:(BP+5) MOV DH. [DI] MOV AL. copie dans DX le mot d'adresse S:(BX+TABLE) MOV 5[BP]. TABLE[BX] . copie dans DX le mot d'adresse DS:BX MOV DX. 13[SI] MOV [VCT + SI]. copie dans AL l'octet d'adresse DS:(SI+13) MOV BX. [BX + SI + 2] . [BX + VEC] Adressage indexé . copie le mot d'adresse DS:DI dans le registre BX . AL . AX . [BX] . copie l'octet d'adresse DS:(BX+SI+2) dans AL MOV TABLE[BP][DI]. AX MOV [SI].Exemples d'adressage indirect Adressage basé MOV DX. AH Adressage basé indexé MOV AL. Il comporte au maximum 31 caractères et se termine par (:) (sauf pour les directives) Opération : un mnémonique qui définit l’opération à exécuter et qui doit être rigoureusement respecté. Commentaire : champ commençant par( . Programmation en Assembleur 8086 4.1 .4. ADD Opérande : champ qui présente les paramètres éventuels de l’opération ( 0 ou plusieurs données ). ex JUMP. Syntaxe d’une instruction en assembleur Label (facultatif) Opération (obligatoire) opérande (selon opération) Commentaire (facultatif) Label : étiquette attribué à une ligne du programme utile pour les branchements .) ou (#) sans valeur pour le programme assembleur . 2. mots clefs spéciaux qui consistent en des ordres déstinés au programme assembleur sur la façon dont il doit traduire le programme.4. ( ne génèrent généralement pas d'instructions en langage machine ). Structure d’un programme en Assembleur : Un programme en langage assembleur contient deux types de commandes : • Les instructions proprement dites. qui appartiennent du jeu d'instruction du microprocesseur et seront traduites par le programme assembleur en instructions en langage machine. . (déstinées au microprocesseurs) • Les pseudo-instructions ou directives. mot clef stack (pile) . Principales Directives pour l’assembleur 8086 -pseudo instructions- Déclaration des segments SEGMENT stack DW 100 dup (?) seg_pile ENDS seg_pile Définitions de constantes : nom constante EQU valeur Exemple : escape equ 1BH . reserve espace .a. a. DQ : Define Quadruple. Principales Directives pour l’assembleur 8086 (suite) Déclaration des variables (Réservation de cases mémoires ) DB : Define Byte. DD : Define Double. en hexa . DW : Define Word. Exemple data (1 octets) (2 octets) (4 octets) (8 octets) data SEGMENT truc DW 0F0AH masque DB 01110000b ENDS . en binaire . . ENDP . fin de la procedure CALL Calcul . 0FH . 2 fois 1 octet chose db -2.. ’ALORS’ data ENDS • Déclaration d’une procédure Calcul Calcul PROC near .Appel de la procédure . procedure nommee Calcul . instructions .• Déclaration des tableaux data SEGMENT machine db 10. b. Jeu d'instructions du microprocesseur 8086 • Instructions de transfert de données (affectation) • Instructions Arithmétiques et logiques • Instructions de branchement (saut de programme) . Jeu d'instructions du microprocesseur 8086 Type d'opérandes .b. . A=6 B DB 3 . Définition du segment de donnée ----------------------------------------------------------data SEGMENT A DB 6 . Définition du segment de code et début du code ---------------------------------------code Addition SEGMENT PROC ASSUME DS:data ASSUME CS:code .4. Attribution du registre de segment de code . Resultat data ENDS .--------------------------------------------------------------------------------------------------------. Exemple de programmes : . Attribution du registre de segment de donnée .--------------------------------------------------------------------------------------------------------.B=3 Somme DB ? .Programme calculant la somme de 6 et 3 et l'affiche .3. rangement résultat . fin des instructions. 2 . . fin de segment END debut . fonction du DOS qui affiche INT 21H . AL . Conversion ASCII puis Affichage--------------------------------------------Mov DL.48 le code ASCII de 0 MOV AH. 48 . data . à l'écran le caractère se trouvant dans DL . B MOV result. Le programme d'addition -------------------------------------------------------MOV AL. initialisation de DS . fin de traitement et retour au DOS INT 21H Addition ENDP . Retour au DOS-------------------------------------------------------------------MOV AH. Result Add DL.debut : . Pointage des données-----------------------------------------------------------MOV AX. AX . 4CH . fin de procédure code ENDS . première instruction MOV DS. A ADD AL. AX . segment de données MOV BX.offset chaine . Initialisation du registre de .data MOV DS. Segment de données code SEGMENT . .-------------------------------------------------------------------------------------------------data chaine data SEGMENT DB 'Hello world\0' ENDS .-------------------------------------------------------------------------------------------------. . Chargement de l'adresse de la chaîne dans BX Il s'agit de l'adresse relative au début du segment . Segment de code ASSUME DS:data. .. CS:code main: MOV AX. Programme qui calcule la longueur d'une chaine de caractère . Adressage indirect . Initialisation compteur loop: MOV AL. Test de fin de chaîne .0 JZ fini INC BX INC CX JMP loop . Incrémentation pointeur .4CH INT 21H code ENDS END main . retour au Dos . transfert des caractères dans AL .0 .MOV CX.[BX] CMP AL. Incrémentation compteur fini: MOV AH. COM . Réalisation pratique d’un programme en assembleur fichier.5. Le programme Debug debug est un programme qui s’exécute sur PC (sous DOS) et qui permet de manipuler des programmes en langage symbolique. Les fonctionnalités principales de debug sont les suivantes : L' Entrée d’un programme en langage symbolique . debug traduit les instructions en langage machine L’exécution pas a pas. La visualisation du contenu des registres et de la mémoire . Il est normalement distribué avec toutes les versions du système MS/DOS. .