Vous êtes sur la page 1sur 23

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


1. Écrire quatre petits programmes pour tester chacune de ces instructions.
• Addition
org 100h
MOV AH, 9H
MOV AL, 3H
ADD AH, AL
ret

• Soustraction
org 100h
MOV AH, 9H
MOV AL, 3H
SUB AH, AL
ret

• Multiplication
org 100h
MOV AL, 9H
MOV CL, 3H
MUL CL
ret

4
TP MICROPROCESSEUR

• Division
org 100h
MOV AL, 9H
MOV CL, 3H
DIV CL
ret
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.
• Addition
org 100h
MOV AH, [200H]
MOV AL, [210H]
ADD AH, AL
MOV [220H], AH
ret

• Soustraction
org 100h
MOV AH, [200H]
MOV AL, [210H]
SUB AH, AL
MOV [220H], AH
ret

• Multiplication
org 100h
MOV AL, [200H]
MOV CL, [210H]
MUL CL
MOV [220H], AX
ret

5
TP MICROPROCESSEUR

• Division
org 100h
MOV AL, [200H]
MOV CL, [210H]
DIV CL
MOV [220H], AL
ret
3. Réécrire les programmes pour faire des calculs sur des opérandes de tailles
16bits.
• Addition
org 100h
MOV AX, 0197H
MOV BX, 7910H
ADD AX, BX
ret

• Soustraction
org 100h
MOV AX, 0197H
MOV BX, 7190H
SUB AX, BX
ret

• Multiplication
org 100h
MOV AX, 07H
MOV CX, 19H
MUL CX
ret

6
TP MICROPROCESSEUR

• Division
org 100h
MOV AX, 81H
MOV CX, 9H
DIV CX
ret
4. Indiquer dans un tableau le type d’adressage effectué.

7
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
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]

8
TP MICROPROCESSEUR

Org 100h
MOV AL, 2H
MOV AH, 7H
CMP AL, AH
JB etiq
MOV [200H], AH
ret
etiq:
MOV [210H], 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.

9
TP MICROPROCESSEUR

II. Les boucles


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

1. Que fait l’instruction Loop ?


Elle décrémente CX Tant que ce dernier est différent de zéro.

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


des cases mémoires entre [200H…205H].
org 100h
MOV CX, 200H
MOV AL, 0H
teste:
CMP CX, 205H
JB boucle
MOV BL, 6H
DIV BL
ret
boucle:
MOV BX, CX
ADD AL, [BX]
INC CX
JMP teste
ret
3. Écrire un programme assembleur qui permet de chercher la valeur minimale des
cases mémoires entre [200H…205H].
org 100h
MOV BX, 200H
MOV AH, [200H]
teste:
CMP BX, 205H
JB boucle

10
TP MICROPROCESSEUR

ret
boucle:
CMP [BX], AH
JB min
INC BX
JMP teste
min:
MOV AH, [BX]
INC BX
JMP teste
4. Écrire un programme assembleur qui permet de chercher la valeur maximale des
cases mémoires entre [200H…205H].
org 100h
MOV BX, 200H
MOV AH, 0H
teste:
CMP BX, 205H
JB boucle
ret
boucle:
CMP [BX], AH
JA max
INC BX
JMP teste
max:
MOV AH, [BX]
INC BX
JMP teste

11
TP MICROPROCESSEUR

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

12
TP MICROPROCESSEUR

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
ret
tempo1 ENDP
tempo2 PROC
MOV CX, 100H
boucle2:
NOP
LOOP boucle2
ret
tempo2 ENDP

13
TP MICROPROCESSEUR

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
OUT 4, AX
Boucle1:
MOV AX, 010010010010b
OUT 4, AX
CALL tempo
MOV AX, 000000000000b
OUT 4, AX
DEC BX
CMP BX, 0h

14
TP MICROPROCESSEUR

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, AX
CALL tempo
MOV AX, 001010001010b
OUT 4, AX
CALL tempo
MOV AX, 100001100001b
OUT 4, AX
CALL tempo
MOV AX, 010001010001b
OUT 4, AX
CALL tempo
DEC BX
CMP BX, 0h

15
TP MICROPROCESSEUR

JA boucle1
ret
ret
tempo PROC
MOV CX, 50h
Boucle2:
NOP
LOOP boucle2
Ret
Tempo ENDP

16
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
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.

17
TP MICROPROCESSEUR

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).

18
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, …).
Ava PROC
MOV AX, 1d
OUT 9, AX
ret
Ava ENDP

ToG PROC
MOV AX, 2d
OUT 9, AX
ret
ToG ENDP

ToD PROC
MOV AX, 3d
OUT 9, AX
ret
ToD ENDP

Exa PROC
MOV AX, 4d
OUT 9, AX
ret
Exa ENDP

All PROC
MOV AX, 5d

19
TP MICROPROCESSEUR

OUT 9, AX
ret
All ENDP

Ete PROC
MOV AX, 6d
OUT 9, AX
ret
Ete ENDP

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.

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

20
TP MICROPROCESSEUR

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


fonctionnement proposé.

org 100h
CALL Exa
IN AX, 10h
teste:
CMP AX, 0d
JE etiqAva

CMP AX, 255d


JE etiqToD

CMP AX, 8d
JE etiqALL
CMP AX, 7d
ret
etiqAva:
CALL Ava
JMP teste

etiqToD:
CALL ToD
JMP teste

etiqAll:
CALL All
CALL ToG
JMP teste

21
TP MICROPROCESSEUR

etiqEte:
CALL Ete
CALL ToG
JMP teste
ret

Ava PROC
MOV AX, 1d
OUT 9, AX
ret
Ava ENDP

ToG PROC
MOV AX, 2d
OUT 9, AX
ret
ToG ENDP

ToD PROC
MOV AX, 3d
OUT 9, AX
ret
ToD ENDP

Exa PROC
MOV AX, 4d
OUT 9, AX
ret
Exa ENDP

22
TP MICROPROCESSEUR

All PROC
MOV AX, 5d
OUT 9, AX
ret
All ENDP

Ete PROC
MOV AX, 6d
OUT 9, AX
ret
Ete ENDP

23

Vous aimerez peut-être aussi