Spécialité : Electrique Module : TP Microprocesseur Année universitaire : 2016– 2017 TP 4 : Les Opérations Arithmétiques et Logiques et les Instructions de Branchement. Objectifs du TP : - Maitriser les instructions logiques et arithmétiques. Maitriser les instructions de décalage et rotation. Maitriser les instructions de branchement. Différencier entre branchement conditionnel et branchement inconditionnel. Ecrire des programmes en Assembleur 8086 utilisant ces instructions. Première Partie : Préparation Théorique (à remettre obligatoirement lors de la séance du TP) I. Les opérations logiques Ce sont des instructions qui permettent de manipuler des données au niveau des bits. Les opérations logiques de base sont : ET, OU, OU exclusif, Complément à 1. - Expliquer les instructions : AND, OR, XOR, NOT, en suivant le modèle ci-dessous. Modèle : l’instruction AND : ET logique. Syntaxe : AND opérande1, opérande2 L’opération effectuée est : opérande1 ← opérande1 ET opérande2. Opérandes autorisés : - Registre ET registre. - Registre ET mémoire. - Mémoire ET registre. - Registre ET immédiat. - Mémoire ET immédiat. Indicateurs affectés : on mentionne ici les indicateurs (flags) affectés par l’instruction, on utilise les notations suivantes : - x : si le bit n’est pas modifié. - ? : le bit a une valeur indéfinie après l’exécution de l’instruction. - * : le bit est modifié en fonction du résultat de l’exécution de l’instruction. - 0 : le bit est mis à 0. - 1 : le bit est mis à 1. OF 0 DF x IF x TF x SF * ZF * AF ? PF * CF 0 TP 2 : Les Opérations Arithmétiques et Logiques et les Instructions de Branchement Exemple : (il faut commenter chaque instruction et montrer où est stocker le résultat) MOV AL,10010110B MOV BL,11001101B AND AL, BL II. Les opérations arithmétiques Les instructions arithmétiques de base sont l’addition, la soustraction, la multiplication et la division qui incluent diverses variantes. - Expliquer les instructions : ADD, ADC, SUB, SBB, MUL, IMUL, DIV, IDIV, INC, DEC, NEG. Montrer la différence entre MUL et IMUL à l’aide d’un exemple. III. Les instructions de décalage et de rotation Ces instructions déplacent d’un certain nombre de positions les bits d’un mot vers la gauche ou vers la droite. Dans les décalages, les bits qui sont déplacés sont remplacés par des zéros. Il y a les décalages logiques (opérations non signées) et les décalages arithmétiques (opérations signées). Dans les rotations, les bits déplacés dans un sens sont réinjectés de l’autre côté du mot. - Expliquer les instructions : SHR, SHL, SAR, SAL, ROR, ROL, RCR, RCL. IV. Les instructions de branchement (saut) Les instructions de branchement (ou saut) permettent de modifier l’ordre d’exécution des instructions du programme en fonction de certaines conditions. Il existe 3 types de saut : - saut inconditionnel, sauts conditionnels, appel de sous-programmes. Répondre aux questions suivantes : - Expliquer les instructions JMP, JZ. Quelle est la différence entre ces deux instructions ? Citer d’autres instructions de saut. Deuxième Partie : Manipulation Exercices 1. Soit le programme suivant : MOV AL, 72H ADD AL, 78H ADC AH, 00H SAR AX, 1 MOV [3000H], AL HLT 2 Module : TP Microprocesseur 2 - Expliquer l’opération effectuée par chaque instruction (commenter chaque instruction). Mentionner le mode d’adressage pour chaque instruction. Dans le cas de l’adressage de la mémoire, donner l’adresse logique de la donnée et calculer son adresse physique (Sachant que DS = 0500H). Quelle est la fonction réalisée par ce programme ? 2. Ecrire un programme en Assembleur 8086 qui permet d’évaluer l’expression suivante et de stocker le résultat en mémoire à l’adresse 1000H : Y = (4x2 + 3x) / (2x -7). Sachant que x est un nombre entier positif (non nul) d’un octet stocké en mémoire à l’adresse 200H. 3. Ecrire un programme en Assembleur 8086 qui permet de comparer les valeurs contenues dans les registres AL, BL et CL pour trouver le minimum et le maximum de ces trois valeurs. - Stocker le minimum en mémoire à l’adresse 100H. - Stocker le maximum en mémoire à l’adresse 200H. 4. Ecrire un programme en Assembleur 8086 qui permet de calculer le nombre de valeurs négatives appartenant à un vecteur de 25 octets commençant à l’adresse 0900H, puis stocker le résultat dans la case mémoire d’adresse 1000H. 5. Ecrire un programme en Assembleur 8086 qui permet d’écrire les nombres de 283 à 306 en mémoire à partir de l’adresse 100H. 6. Ecrire un programme en Assembleur 8086 qui permet de compter le nombre de 0 dans un mot binaire de 16 bits. Le résultat sera stocké dans la case mémoire d’adresse 100H. 3