Vous êtes sur la page 1sur 14

1ére Année Cycle ingénieur - ISA

Travaux pratiques

Microprocesseur
Electronique numérique

Encadré par :

Mr. EL ZERK Abdallah

Réalisé par :

LAFKIHI Mohamed

Année universitaire 2021/2022


TP MICROPROCESSEUR

TP1. Initiation à l’assembleur et au EMU8086

I. Initiation à l’utilisation du logiciel EMU8086


Emu8086 est un émulateur visuel de microprocesseur d'Intel 8086. Cet outil est intéressant
pour l’apprentissage du langage assembleur. Le code peut être assemblé et exécuté sur
l'émulateur en mode pas à pas, et durant l'exécution on peut vérifier les registres, les drapeaux
(flags) ainsi que les variables ou la mémoire. Le programme peut aussi être stoppé et
réexécuté en tout temps. En plus de la programmation bas-niveau, Emu8086 peut contrôler
des dispositifs virtuels d'entrée/sortie.

1. Lancez l'environnement Emu8086 avec la Template « .com ».

2. Saisissez et exécutez le code suivant :


org 100h
MOV AX, 1234h
MOV BL, AH
MOV CL, AL
Ret

2
TP MICROPROCESSEUR

3. Pour exécuter le programme, cliquer sur emulate (ou appuyer sur F5).
4. Vous pouvez cliquer sur single step (ou appuyer sur F8) pour exécuter le
programme pas à pas.
5. Vous pouvez cliquer sur step back (ou appuyer sur F6) pour revenir en arrière.

6. Essayez, modifiez, expérimentez jusqu'à avoir les idées parfaitement claires sur le
fonctionnement de ce programme.
7. Que fait l’instruction MOV ?
Il déplace une valeur d’un registre à un autre.

Peut-on remplacer le registre CL par CX ?


Généralement oui, mais dans le cas de notre émulateur ça donne une erreur.

8. Que se passe-t-il si on enlève le ‘H’ après le 1234 ?


La valeur 1234 est considéré en décimale (par défaut) mais le système la stock en
hexadécimale.

9. Modifier le programme pour travailler uniquement avec des registres de 8bits.


org 100h
MOV AH, 12h
MOV AL, 34h
MOV BL, AH
MOV CL, AL
Ret

3
TP MICROPROCESSEUR

10. Ajouter l’instruction permettant de mettre le contenu de CL dans la case


mémoire d’adresse 200H.
org 100h
MOV AH, 12h
MOV AL, 34h
MOV BL, AH
MOV CL, AL
MOV [200h], CL
Ret

II. Opérations Arithmétiques

Rechercher dans « l’aide » de ‘EMU8086’ l’instruction adéquate pour chacune des opérations
suivantes :

• Addition
• Soustraction
• Multiplication
• Division

1. Écrire quatre petits programmes pour tester chacune de ces instructions.

2. Modifier vos programmes pour faire les calculs sur des opérandes, écrits
manuellement dans les mémoires 200H et 210H, le résultat doit être enregistré
dans l’adresse 220H.

3. Réécrire les programmes pour faire des calculs sur des opérandes de tailles
16bits.

4. Indiquer dans un tableau le type d’adressage effectué.

4
TP MICROPROCESSEUR

TP2. Instructions de branchement et boucles

I. La comparaison et les sauts


L’opérateur CMP (compare) soustrait la source de la destination. Le résultat n'est pas mis
dans la destination. En effet cette instruction modifie uniquement les indicateurs.

Syntaxe : CMP Destination, source

Les instructions de branchements les plus utilisées :

➢ JA (« Jump if Above ») fait un saut au label spécifié si et seulement si le résultat


de la comparaison est positif.
➢ JB (« Jump if Below ») fait un saut au label spécifié si et seulement si le résultat de
la comparaison est négatif.
➢ JMP (« Jump ») fait un saut inconditionnel à l’étiquette spécifiée.

Mettre deux valeurs quelconques dans les registres AL et AH.

1. Écrire un programme pour qu’AH se retrouve toujours avec le maximum des


deux valeurs, c'est-à-dire que :
• Si AH < AL on permute AH et AL (en utilisant XCHG)
• Si AH > AL le programme ne change rien

org 100h
MOV AL, 9h
MOV AH, 3h
CMP AL, AH
JA etiq
ret
etiq:
XCHG AL, AH
ret

5
TP MICROPROCESSEUR

2. Écrire un programme permettant de comparer AH avec AL.


• Si AH < AL mettre son contenu dans la case mémoire d’adresse [200H]
• Si AH > AL mettre son contenu dans la case mémoire d’adresse [210H]

Org 100h
MOV AL, 2h
MOV AH, 7h
CMP AL, AH
JB etiq
MOV [200h], AH
ret
etiq:
MOV [200h], AH
ret
3. Dans les mêmes programmes, faite varier les différentes instructions de
branchement conditionnels.
4. Commenter et expliquer les instructions et les résultats des programmes.

II. Les boucles

Mettre des valeurs quelconques dans les cases mémoires entre [200H] et [210H].

1. Que fait l’instruction Loop ?

2. Écrire un programme assembleur qui permet de calculer la moyenne des valeurs


des cases mémoires entre [200H…210H].

6
TP MICROPROCESSEUR

3. Écrire un programme assembleur qui permet de chercher la valeur minimale des


cases mémoires entre [200H…210H].

4. Écrire un programme assembleur qui permet de chercher la valeur maximale des


cases mémoires entre [200H…210H].

5. Commenter et expliquer les instructions et les résultats des programmes.

TP3. Feu de circulation ‘Traffic lights’

I. Les procédures avec le langage Assembleur


Une procédure est une suite d'instructions effectuant une action précise. La notion de
procédure en assembleur correspond à celle de fonction en langage C, ou de sous-programme
dans d'autres langages. Comme il a été déjà mentionné, en plus de la programmation bas-
niveau, Emu8086 peut contrôler des dispositifs virtuels d'entrée/sortie. L’objectif de ce TP
donc est de contrôler un dispositif virtuel d'entrée/sortie « Traffic lights ou feu de
signalisation ».

1. Rappeler la syntaxe d’une procédure avec le langage Assembleur.


nom_proc PROC
(…)
ret
nom_proc ENDP
2. Écrire 2 procédures de temporisation tempo1 et tempo2 tel que la durée de la
première est plus grande que la deuxième.
tempo1 PROC
MOV CX, 500h
boucle1:
NOP
LOOP boucle1

7
TP MICROPROCESSEUR

ret
tempo1 ENDP
tempo2 PROC
MOV CX, 100h
boucle2:
NOP
LOOP boucle2
ret
tempo2 ENDP

II. Application : Traffic lights


Un ensemble de périphériques sont disponibles virtuellement sous emu8086. Sous le menu
Virtual Drive de Emulator on peut accéder aux ports qui contrôlent ces périphériques. Pour
faire fonctionner un périphérique, il suffit d’écrire une commande sur son port qui apparait sur
l’image virtuelle associée. Les modules de « Traffic Lights » sont contrôlés par l’envoie d’une
donnée au port I/O numéro 4. Il s’agit d’un périphérique composé de 12 lampes : 4 vertes, 4
oranges (jaunes) et 4 rouges. On peut agir sur l’état de chaque lampe par positionner le bit
associé :

• La lampe est allumée, bit associé=1


• La lampe est éteinte, bit associé=0

Pour contrôler le périphérique qui est composé de 12 lampes, on envoie alors un mot sur le
port. Seuls les bits 0 à 11 de ce mot sont utilisés par le port, les autres bits sont ignorés. La
situation du périphérique indiquée sur la figure en dessus est obtenue avec l’envoie du code
suivant sur le port 4.

mov ax, 0000001100001100b


out 4, ax
1. Écrire un programme permettant de clignoter toutes les lampes jaunes du feu de
signalisation (mode nuit).
Org 100h
MOV AX, 0h
MOV BX, 50h

8
TP MICROPROCESSEUR

OUT 4, AX
Boucle1:
MOV AX, 010010010010b
OUT 4, AX
CALL tempo
MOV AX, 000000000000b
OUT 4, AX
DEC BX
CMP BX, 0h
JA boucle1
Ret
Ret
tempo PROC
MOV CX, 50h
Boucle2:
NOP
LOOP boucle2
Ret
Tempo ENDP
2. En utilisant les procédures de temporisation, écrire un programme assembleur
reflétant le fonctionnement réel des feux de circulation pendant la journée (mode
jour).
Org 100h
MOV BX, 5Oh
Boucle1:
MOV AX, 001100001100b
OUT 4, A
CALL tempo
MOV AX, 001010001010b
OUT 4, A

9
TP MICROPROCESSEUR

CALL tempo
MOV AX, 100001100001b
OUT 4, A
CALL tempo
MOV AX, 010001010001b
OUT 4, A
CALL tempo
DEC BX
CMP BX, 0h
JA boucle1
ret
ret
tempo PROC
MOV CX, 50h
Boucle2:
NOP
LOOP boucle2
Ret
Tempo ENDP

10
TP MICROPROCESSEUR

TP4. Contrôle d’un périphérique d’E/S : Robot

I. Introduction et cahier de charge du fonctionnement


Le robot est contrôlé en envoyant des données au port d'entrées / sorties 9.

Les valeurs qui peuvent être envoyées sont résumées dans le tableau suivant :

Valeur décimal Valeur binaire Action


0 00000000 Ne rien faire

11
TP MICROPROCESSEUR

1 00000001 Avancer
2 00000010 Tourner à gauche
3 00000011 Tourner à droite
4 00000100 Examiner*
5 00000101 Allumer la lampe
6 00000110 Eteindre la lampe

(*) : Examiner un objet (obstacle) en utilisant un capteur. Lorsque le robot termine cette tâche,
le résultat est mis dans le registre ‘data’ et le bit 0 du registre statuts est mis à 1.

Le second port (port 10) est un registre de données ‘data’. Ce registre est mis à jour après que
le robot ait terminé l’examen de l’obstacle :

Valeur décimale Valeur binaire Type d’obstacle


255 11111111 Mur
0 00000000 Rien
7 00000111 Lampe allumée

8 00001000 Lampe éteinte

Le port 11 est un registre d'état. On lit les valeurs de ce port pour déterminer l'état du robot.
Chaque bit de ce robot a une propriété spécifique :

Numéro de bit Description


0 0 lorsqu'il n'y a pas de nouvelles données dans le registre de
données, 1 quand il y a de nouvelles données dans le registre
de données.
1 0 lorsque le robot est prêt pour la commande suivante, 1
lorsque le Robot est occupé (en train d’effectuer une tâche).
2 0 lorsqu'il n'y a pas d'erreur lors de l'exécution de la dernière
commande, 1 lorsqu'il y a une erreur sur l'exécution de la
commande (lorsque le robot ne peut pas terminer la tâche :
déplacer, tourner, examiner, allumer / éteindre la lampe).

12
TP MICROPROCESSEUR

II. Travail demandé


1. En se référant à ce qui a été précédemment expliqué, écrire des procédures pour
les différentes actions et taches à exécuter par le robot (avancer, tourner,
examiner, allumer lampe, éteindre lampe, …).

2. On se propose de contrôler le robot comme suit :


• Examiner l’environnement
• Avancer s’il n’y a pas d’obstacle
• S’il y a obstacle :
▪ Mur, tourner à droite.
▪ Lampe éteinte, allumer la lampe et tourner à gauche.
▪ Lampe allumée, éteindre la lampe et tourner à gauche.
• Reprendre le cycle.

13
TP MICROPROCESSEUR

3. Donner l’organigramme général reflétant le fonctionnement.

4. Ecrire un code assembleur permettant de contrôler le robot selon le


fonctionnement proposé.

14

Vous aimerez peut-être aussi