TP 4 : Les Opérations Arithmétiques et Logiques et les Instructions

publicité
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
Téléchargement