Vous êtes sur la page 1sur 15

TP N°1

Familiarisation avec le simulateur "8085 Simulator"


et instructions de transfert de données.

Objectifs du TP :
- Se familiariser avec le simulateur 8085 Simulator.
- Maitriser les instructions de transfert de données.
- Maitriser la notion de modes d’adressage.

I. Simulateur "8085 Simulator"


Ce logiciel est très utile pour ceux qui commencent à apprendre le langage
Assembleur. Il compile le code source et l'exécute pas à pas dans un émulateur. Un émulateur
est un logiciel permettant d'exécuter un programme sur une plate-forme.
Il est plus facile de manipuler des interfaces graphiques sur un PC que de travailler sur du
matériel.
En cliquant deux fois sur l'icone de l'émulateur, l’éditeur du programme assembleur
ainsi que d'autres fenêtres s'ouvrentà savoir : registres A, B, C, D, E, H, L, compteur de
programme (CP), pointeur de pile (SP), Flags (F), mémoire, interfaces d'entrée-sortie,
convertisseurs binaire - décimal - hexadécimal,...
La fenêtre ressemble à la figure 1. On doit saisir les programmes dans la fenêtre
blanche "Assembler".

Figure 1 : Interface du simulateur du 8085


TP Systèmes à microprocesseurs
Une fois la saisie du programme est terminée et après la correction des erreurs
syntaxiques on peut le simuler en cliquant sur le bouton "Assemble". La fenêtre suivante
s’ouvre (figure 2).
Le simulateur résume le jeu d'instruction du microprocesseur 8085 dans View - Code
Wizard. C'est une forme d'aide pour le programmeur.

Figure 2 : Programme assemblé.

Le programme peut être exécuter tout entier (Run all At a Time) ou instruction par
instruction (Step By Step). On peut visualiser les contenus de tous les registres du
microprocesseur ainsi que la mémoire et les entrées sorties du système.
L'utilisateur de ce simulateur peut effectuer la simulation avec un Kit d'entrainement
du microprocesseur 8085 en cliquant sur View - 8085 Microprocessor Trainer Kit.

Remarque :
Il faut insérer au début du programme l'adresse mémoire dans laquelle le programme
sera logé (exemple # BEGIN 0000H). Aussi il faut fixer l'adresse de la zone de données
# ORG XXXX, par exemple # ORG 0008 suivi des données, par exemple # DB 85H,54H.
A la fin du programme on doit ajouter l'instruction (HLT).

TP Systèmes à microprocesseurs
II. Instructions de transfert de données
Les instructions de transfert de données représentent un copiage des données depuis
une source vers une destination sans modifier le contenu de la source. L'ancien contenu de la
destination est remplacé par le contenu de la source.
Plusieurs instructions de transferts sont utilisées pour copier les données. On peut
citer:
MOV : Move Copier un octet de données depuis un registre ou adresse
mémoire
MVI : Move Immediate Charger un octet de données directement
OUT : Output to port Envoyer un octet de données vers une interface de sortie
IN : Input from Port Lire un octet de données d'une interface d'entrée
LXI : Load register pair Immediate Charger un mot (16bits) de données directement
LDA : Load Accumulator Charger l'accumulateur par le contenu d'un adresse
mémoire
LDAX : Load Accumulator Charger l'accumulateur par le contenu d'un adresse
mémoire spécifié dans un registre B ou D
STA : Store Accumulator Stocker l'accumulateur dans une case mémoire
STAX : Store Accumulator Stocker l'accumulateur dans une case mémoire dont
l'adresse est spécifié dans un registre B ou D
Exemples :
MOV B,C Instruction à un seul octet
MVI A,82H Instruction à deux octets
OUT 20H Instruction à deux octets
IN 30H Instruction à deux octets
LXI B, 3F10H Instruction à trois octets
LDA 1234H Instruction à trois octets
MOV A,M Instruction à trois octets
LDAX B Instruction à un seul octet
STAX D Instruction à un seul octet
MVI M,45H Instruction à deux octets

III. Modes d’adressage


Les instructions déjà cités effectuent le transfert des données. Cependant, quatre
modes d’adressage sont possibles.

TP Systèmes à microprocesseurs
1. Adressage immédiat : utilisé pour charger (écrire) une valeur dans un registre. La donnée
est spécifiée immédiatement après l’instruction.
Format : MVI R8, donnée de 8bits R8 est un registre de 8 bits.
LXI Rp, donnée de 16bits Rp est un registre de 16 bits (B, D, H ou
SP).
B désigne dans ce cas la paire BC, D la paire DE, H la paire HL et SP est le pointeur de pile.
Exemple :
MVI B,12H B=12H
LXI B,3F10H B=3FH et C=10H

2. Adressage par registre : utile lors du transfert du contenu d’un registre vers un autre.
Format :
MOV Rd,Rs. Avec Rd registre destination et Rs registre source.
Exemple :
MOV B,A Transfert le contenu de l'accumulateur A vers le registre B

3. Adressage direct : permet de transférer une valeur directement entre l'accumulateur A et


une adresse mémoire ou une interface d'entrée-sortie.
Exemples :
IN 20H Transfert le contenu de l'accumulateur A au port d'adresse 20H
OUT 30H Transfert le contenu du port d'adresse 30H vers l'accumulateur A
LDA FFFFH Charger l'accumulateur A par le contenu de l'adresse mémoire FFFFH
STA 2000H Stocker l'accumulateur A dans la case mémoire d'adresse 2000H

4. Adressage indirect : permet les mêmes opérations de transfert que le mode direct, mais
dans ce cas, l’adresse effective est le contenu d’un registre (registre mémoire M=HL ou
registres pairs B ou D).
Exemples :
MVI M, donnée de 8bits Stocker dans la case mémoire M la donnée de 8bits
MOV A,M Charger A par le contenu de l'adresse M
LDAX B Charger A par le contenu de l'adresse spécifiée par BC
LDAX D Charger A par le contenu de l'adresse spécifiée par DE
STAX B Stocker dans l'adresse spécifiée par BC l'accumulateur A
STAX D

TP Systèmes à microprocesseurs
IV. Travail demandé
Partie 1
- Donner une description détaillée du simulateur utilisé.

Partie 2
- Saisir le programme ci-dessous dans l’éditeur du simulateur 8085.
1. Indiquer le mode d’adressage pour chaque instruction.
2. Commenter chaque instruction.
3. Dans le cas d’un adressage mémoire, donner l’adresse spécifiée par l'instruction.
4. Pour chaque instruction donner le résultat du transfert (préciser le nom du registre ou case
mémoire avec la valeur transférée). (Step By Step)

MVI B,F7H
MOV A,B
STA 0075H
MVI C,FFH
LXI H, 0070H
LXI D,0071H
MOV M,C
LDAX D
HLT

Partie 3
1. Charger l'accumulateur A par la valeur 31H.
2. Charger le registre C avec la valeur du registre A.
3. Charger le registre B par la valeur 28H.
4. Charger la case mémoire pointée par le registre pair B avec la valeur du registre A. Donner
l'adresse de cette case.
5. Transférer au port d'adresse 05H le contenu de l'adresse mémoire précédente.
6. Stoker le registre B dans la case mémoire 0010H.
7. Spécifier le contenu des registres après l'exécution de chaque instruction:
MVI A,00H
MVI B,F8H
MOV C,A
MOV D,B
HLT
TP Systèmes à microprocesseurs
Partie 4
1. Ecrire les instructions pour charger le nombre 65H dans le registre C et 92H dans
l'accumulateur A.
2. Afficher le nombre 65H au port 00H et 92H au port 01H
3. Ecrire les instructions pour lire la donnée aux ports d'entrée 07H et 08H. Afficher la donnée
du port 07H au port 00H. Stocker la valeur du port 08H dans le registre B.
4. Spécifier le contenu du port 00H si le programme suivant est exécuté.
MVI B,82H
MOV A,B
MOV C,A
MVI D,37H
OUT 00H
HLT

TP Systèmes à microprocesseurs
TP N°2
Opérations arithmétiques et logiques.

I. Objectifs du TP
- Maitriser les instructions logiques et arithmétiques.
- Maitriser les instructions de rotation.
- Ecrire des programmes en assembleur utilisant ces instructions.

II. Rappels

1. Registre d'état
On mentionne ici les indicateurs (flags) affectés par une instruction arithmétique ou logique,
on utilise les notations suivantes :

D7 D6 D5 D4 D3 D2 D1 D0
S Z AC P CY

Les flags sont des drapeaux ou des indicateurs d'état (registre d'état). Ils indiquent l'état d'une
opération effectuée par l'unité arithmétique et logique. Ce registre contient 5 bits S, Z, AC, P
et CY.
S: Sign-flag (Bit de signe). C'est le bit D7 du résultat de l'opération.
Z: Zero-flag. Si le résultat de l'opération égale à 0 ce bit est mis à 1. Autrement il est mis à 0.
AC : Auxilliary Carry-flag. Dans une opération arithmétique, quand une retenu est générée
par le bit D3 à D4 le AC est mis à 1 sinon il est mis à 0. Il est utilisé dans les codes BCD et il
n'est pas utilisé par le programmeur.
P : Parity-flag. Après une opération arithmétique ou logique, si le résultat contient un nombre
pair de 1, le drapeau P est affecté par 1. Si le résultat contient un nombre impair de 1, le
drapeau P est affecté par 0.
CY : Carry-flag. Dans une opération arithmétique, quand une retenu est générée par les huit
bits le CY est mis à 1 sinon il est mis à 0. Ce bit est accessible par le programmeur.

2. Opérations arithmétiques
Les instructions arithmétiques de base sont l’addition, la soustraction, l'incrémentation et la
décrémentation. Pour ADD, ADI, SUB et INR, le résultat de l'opération sera stocker dans
l'accumulateur A.

TP Systèmes à microprocesseurs
ADD : Addition Additionner le contenu de l'accumulateur A avec le contenu
du registre ou case mémoire.
ADI : Addition Immédiate Additionner le contenu de l'accumulateur A avec une valeur
SUB : Soustraction Soustraire le contenu du registre du contenu de
l'accumulateur A ou case mémoire.
SUI : Soustraction Immédiate Soustraire une valeur du contenu de l'accumulateur A
INR : Incrémentation Incrémente le contenu d'un registre ou case mémoire par 1
(+ 1)
DCR : Décrémentation Décrémente le contenu d'un registre ou case mémoire par 1
(- 1)
INX : Incrémentation 16bits Incrémenter un registre pair ou SP (16bits)
DCX : Décrémentation 16bits Décrémenter un registre pair ou SP (16bits)

3. Opérations logiques
Les opérateurs logiques de base sont AND, OR, XOR et NOT. Le résultat de l'opération sera
stocker dans l'accumulateur A.
ANA : And And logique entre l'accumulateur A et le contenu du registre.
ANI : And Immédiate And logique entre le contenu de l'accumulateur A et une valeur
8bits.
ORA : Or Or logique entre l'accumulateur A et le contenu du registre.
ORI : Or Immédiate Or logique entre le contenu de l'accumulateur A et une valeur
8bits.
XRA : Xor Ou exclusif entre l'accumulateur A et le contenu du registre.
XRI : Xor Immédiate Ou exclusif entre le contenu de l'accumulateur A et une valeur
8bits.
CMA : Complémenter A Complémenter de l'accumulateur A (inverser tous les bits de A).

Exemple : Instruction ANI


MVI B,77H
MVI A, 81H
ANI B

TP Systèmes à microprocesseurs
4. Opérations de rotation
Les opérations de rotation sont RLC, RAL, RRC et RAR. Le résultat de l'opération sera
stocker dans l'accumulateur A.
RLC : Rotation à gauche de A.
RAL : Rotation à gauche de A par CY.
RRC : Rotation à droite de A.
RAR : Rotation à droite de A par CY.

III. Travail demandé


1. Première Partie
1- Spécifier le contenu des registres A et B et le registre d'état en exécutant les instructions
suivantes (Step By Step). Aussi, donner le contenu du port de sortie 00H.
Contenu initial : A B S Z CY
00H FFH 0 0 0
MVI A, F2H
MVI B, 7AH
ADD B
OUT 00H
HLT
2- Quelle est l'opération qui peut être effectuée en exécutant : ADD A
3- Quelle est l'opération qui peut être effectuée en exécutant : SUB A. Donner l'état de Z et
CY dans ce cas.
4- Spécifier le contenu des registres A et C et le registre d'état en exécutant les instructions
suivantes (Step By Step).
Contenu initial : A C S Z CY
XX XX 0 0 0
MVI A, 5EH
ADI A2H
MOV C, A
HLT

2. Deuxième Partie
1- Quelle est l'opération qui peut être effectuée par l'exécution de l'instruction XRA A.
Donner l'état de Z et CY.
2- Trouver le contenu des registres et l'état des flags S, Z et CY après l'exécution de
l'instruction ORA A
TP Systèmes à microprocesseurs
MVI A,A9H
MVI B,57H
ADD B
ORA A
3- Trouver le contenu des registres et l'état des flags S, Z et CY pour le programme suivant.
Contenu initial : A B S Z CY
XX XX X X X
XRA A
MVI B,4AH
SUI 4FH
ANA B
HLT

3. Troisième Partie
1- L'accumulateur pour l'ensemble des instructions suivantes contient un nombre BCD.
Expliquer le rôle de ces instructions
MVI A,79H
ANI F0H
RRC
RRC
RRC
RRC

2- Ecrire l'équation mathématique réalisé par le programme suivant :


MVI A,07H
RLC
MOV B,A
RLC
RLC
ADD B

4. Quatrième Partie
Ecrire un programme assembleur qui permet de réaliser la fonction mathématique suivante.
Sachant que X est un nombre inferieur à 7 et est stocké dans la case mémoire 0100H et Y sera
stocké dans la case 0101H.
Y=(16(2X+1)+X-1)/8
TP Systèmes à microprocesseurs
TP N°3
Les Instructions de branchement et boucles.

I. Objectifs du TP
- Maitriser les instructions de branchement et boucles.
- Différencier entre branchement conditionnel et branchement inconditionnel.
- Ecrire des programmes en assembleur utilisant ces instructions.

II. Rappels
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 :
- Appels de sous-programmes.
- Sauts inconditionnel : JMP
- Sauts conditionnels :
JC : Saut si CY=1
JNC : Saut si CY=0
JZ : Saut le résultat est nul (Z=1)
JNZ : Saut le résultat est différent de zéro (Z=0)
JP : Saut si S=0
JM : Saut si S=1
JPE : Saut si P=1
JPO : Saut si P=0
Ces instructions sont souvent utilisés avec les opérations arithmétiques et logiques avec en
plus les instructions de comparaison avec l'accumulateur CMP R/M et CMI donnée de 8bits.
La comparaison est une soustraction qui ne modifie pas le contenu de l'accumulateur ou
registre/case mémoire, contrairement aux autres opérations arithmétiques et logique.
Tableau
Un tableau est un ensemble de valeurs situés dans une zone mémoire. Sa déclaration dans le
simulateur se fait de la manière suivante après l'instruction HLT:
Exemple d'un tableau de trois cases 56H, 97H, 3AH et qui commence à l'adresse 0050H.
# ORG 0050
# DB 56H, 97H, 3AH

TP Systèmes à microprocesseurs
III. Travail demandé

Exercice N°1
Ecrire un programme en assembleur qui permet de comparer les valeurs contenues dans les
registres A et B pour trouver le minimum et le maximum entre ces deux valeurs.
- Stocker le minimum en mémoire à l’adresse 0100H.
- Stocker le maximum en mémoire à l’adresse 0101H.

Exercice N°2
Ecrire un programme en assembleur qui permet de comparer les valeurs contenues dans les
registres A, B et C pour trouver le minimum et le maximum entre ces trois valeurs.
- Stocker le minimum en mémoire à l’adresse 0100H.
- Stocker le maximum en mémoire à l’adresse 0101H.

Exercice N°3
Trouver le minimum et le maximum des éléments du tableau de 10 éléments stockés en
mémoire à partir de l’adresse 0100H et stocker le minimum à l’adresse 010AH et le maximum
dans l'adresse 010BH.

TP Systèmes à microprocesseurs
TP N°4
Ecriture et simulation des programmes en assembleur.

I. Objectifs du TP
- Maitriser les instructions de branchement et boucles.
- Ecrire des programmes en assembleur utilisant ces instructions.

II. Rappels
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 :
- Appels de sous-programmes.
- Sauts inconditionnel : JMP
- Sauts conditionnels :
JC : Saut si CY=1
JNC : Saut si CY=0
JZ : Saut le résultat est nul (Z=1)
JNZ : Saut le résultat est différent de zéro (Z=0)
JP : Saut si S=0
JM : Saut si S=1
JPE : Saut si P=1
JPO : Saut si P=0
Ces instructions sont souvent utilisés avec les opérations arithmétiques et logiques avec en
plus les instructions de comparaison avec l'accumulateur CMP R/M et CMI donnée de 8bits.
La comparaison est une soustraction qui ne modifie pas le contenu de l'accumulateur ou
registre/case mémoire, contrairement aux autres opérations arithmétiques et logique.
Tableau
Un tableau est un ensemble de valeurs situés dans une zone mémoire. Sa déclaration dans le
simulateur se fait de la manière suivante après l'instruction HLT:
Exemple d'un tableau de trois cases 56H, 97H, 3AH et qui commence à l'adresse 0050H.
# ORG 0050
# DB 56H, 97H, 3AH

TP Systèmes à microprocesseurs
III. Travail demandé

Exercice N°1
1. Effecteur la multiplication des deux opérandes 05H et 06H situés aux adresses mémoire
0050H et 0051H respectivement en utilisant la notion de boucles : A x B = A + A + .....+A
B fois.
Le résultat sera stocké dans la case 0052H.

Exercice N°2
2. Effecteur la division des deux opérandes 14H=2010 et 06H=610 (20/6) situés aux adresses
mémoire 0053H et 0054H respectivement en utilisant la notion de boucles. Le quotient sera
stocker dans la case mémoire 0055H et le reste dans la case 0056H.

Exercice N°3
Ecrire un programme en assembleur qui permet de compter le nombre de valeurs négatives
appartenant à un tableau de 10 octets commençant à l’adresse 0200H, puis stocker le résultat
dans la case mémoire d’adresse 020AH.

Exercice N°4
Ecrire un programme en assembleur qui permet d’écrire les nombres de 30 à 56 en mémoire à
partir de l’adresse 0100H.

Exercice N°5
Ecrire un programme en assembleur qui permet de compter le nombre de 0 dans un octet. Le
résultat sera stocké dans la case mémoire d’adresse 0100H.

Exercice N°6
Permuter les 10 éléments d’un tableau placé en mémoire à l’adresse 0100H.
Exemple :

TP Systèmes à microprocesseurs
TP N°5
Gestion de feux de carrefour

I. Objectifs du TP :
- Maitriser les notions d'appels de sous programmes.
- Maitriser le principe de génération des délais.

II. Travail demandé :


Effectuer la gestion de circulation au niveau d'une intersection des feux tricolores (Vert, Jaune
et Rouge) et les feux des piétons (Marche et Stop). Tous les lampes sont allumées avec le
niveau logique "1" et éteintes par "0".
Pour cela l'accumulateur A du microprocesseur 8085 doit envoyer le commande des feux par
utilisation de l'instruction OUT 00H (pour les trafics) et OUT 01H (pour les piétons).
Cependant, les bits des registres utilisés sont comme suit :

Type Lampe Bit du registre 1 Bit du registre 2 Temps alloué (s)


Verte 1 D0 1
Jaune 1 D1 5
Rouge 1 D2 20
Trafic
Verte 2 D3 15
Jaune 2 D4 5
Rouge 2 D5 20
Marche piéton 1 D0 15
Stop piéton 1 D1 25
Piétons
Marche piéton 2 D2 15
Stop piéton 2 D3 25

TP Systèmes à microprocesseurs