Vous êtes sur la page 1sur 43

Cours systèmes à

microprocesseurs
(Partie.2)
Chargé du module : Dr. Mohamed
KHIDER
2021-2022
• Questions du Cours précédent :
1. Donner les principaux microprocesseurs en citant les indiquer
différences.
2. Indiquer le rôle des pin RD*,WR*,IO/M*,ALE du µp 8085.
3. Quelle est la taille que peut adresser le µp 8085 ?
4. Quel est l’importance du multiplexage du LS-Byte du bus
d’adresses et de données dans le 8085 ?
5. Expliquer l’intérêt de l’utilisateur de représenter en
hexadécimal le code machine, les adresses et les opérandes.
6. Montrer la fonction des pin AD7-0
7. Quel est l’importance du registre A par rapport aux autres
registres GPR.
8. Quel est la particularité du paire de registre HL.
1. Kit de programmation du microprocesseur
8085 :
C’est un véritable micro-ordinateur, il doit comporter les
composants suivants :
1. un µp 8085.
2. une EPROM qui contient le programme de contrôle.
3. un clavier alphanumérique pour l’utilisateur.
4. une RAM pour stocker le programme de l’utilisateur et les
résultats.
5. Afficheur (par exemple à sept segments) pour indiquer les
adresses mémoire et leurs contenus.
6. Ports d’E/S (en anglais I/O) pour communiquer avec les
différents périphériques.
1.2. Le rôle du Kit de programmation du µp :
Un kit de programmation permet à l’utilisateur d’effectuer
plusieurs opérations :
1. Implémenter le programme et introduire des données avec
le clavier.
2. Exécuter le programme sans interruption, ou l’exécuter étape
par étape pour détecter d’éventuelles erreurs.
3. Examiner ou si nécessaire modifier les contenus des
registres.
4. Examiner ou si nécessaire modifier les contenus de la
mémoire.
Ceci est réalisé grâce au programme de contrôle implémenté
dans l’EPROM (en anglais Monitor Program ou Control
Program)
• Remarque :
Lorsque Intel a réalisé son µp 8085, elle a développé aussi le kit de
programmation SDK-85 (System Design Kit for 8085), c’est le
premier kit de programmation dédié à ce microprocesseur.
Exemple: Kit de programmation ALS-SDA-85M
Ce Kit possède : ● un µp 8085 qui fonctionne avec une fréquence
d’horloge de 3 MHz ● une EPROM 27128 de 16 k octets
(adresses de 0000 h → 3FFF h) ● une RAM 6116 de 2 k octets de
taille (adresses F800 h → FFFF h) ● deux circuits d’interface
programmable 8255 (avec 48 pin pour port d’E/S) ● clavier
alpha-numérique de 28 touches ● afficheur à 7 segments de 6
digits ● le 8279 utilisé comme interface entre le clavier et
l’afficheur à 7 segments ● le 8253 qui contient 3 compteurs de
16 bits ● le 8251 USART utilisé pour communication série avec
micro-ordinateur.
2. Jeu d’instructions Assembleur du 8085 :
Il existe plusieurs types d’instructions pour le 8085,
comme :
1. Instructions de transfert de données.
2. Instructions arithmétiques.
3. Instructions logiques.
4. Instructions de la pile.
5. Instructions de Branchements.
6. Instructions d’entrées/sorties (E/S).
7. Instructions d’interruptions.
En tout, 246 code opération différent (code machine
d’instruction).
• La taille d’une instruction en Assembleur 8085
est de 1 octet ou 2 octets ou 3 octets.
• L’opération code est toujours de 1 octet.
• L’opérande est de 1 octet ou 2 octets.
• Avec 8 bits, il est possible d’avoir 28=256 code
opération différents, soit de 00h → FFh, il faut
noter qu’on trouve 246 code opération pour le
8085.
• En effet, il existe : ● 202 code opération sans
opérande. ● 18 code opération avec opérande
de 1 octets. ● 26 code opération avec
opérande de 2 octets.
2.1. instructions de transfert de données :
Dans ces instructions, on trouve 83 codes opérations et 13
types de transfert différent, qui sont :
2.1.A. Instructions de type MVI r,d8 : on appelle la
partie MVI mnémonique (qui veut dire facile à mémoriser par
l’utilisateur), en effet, MVI (MoVe Immediate).
c’est une instruction qui utilise l’adressage immédiat, avec :
d8 : pour indiquer les données sur 8 bits.
r : pour indiquer les registres A,B,C,D,E,H ou L.
ainsi, on a 7 code opération pour cette instruction.
c’est une instruction qui occupe deux octets dans la mémoire.
exemple :
On exécute l’instruction MVI A, 8Fh avec A=EFh à l’état initial
le code machine = le code opération, l’opérande
= 3Eh, 8Fh
la taille de cette instruction est de 2 octets

Avant l’exécution Après l’exécution


Registre A EFh 8Fh
2.1.B. Instructions de type MOV r1,r2 : la partie
MOV c’est une mnémonique pour indiquer (MOVe), c’est un
transfert de données du registre source r2 vers le registre
destination r1. avec
r1, r2 : pour indiquer les registres A,B,C,D,E,H ou L.
ainsi, on aura 7x7=49 code opération pour cette instruction,
on trouve même MOV A, A dans le jeu d’instructions !
c’est des instructions de 1 octet de taille, qui ne possèdent pas
d’opérandes.
exemple :
On exécute l’instruction MOV B, E avec B=14h et E=18h à l’état
initial
le code machine = le code opération
= 43h
la taille de cette instruction est de 1 octets
Avant l’exécution Après l’exécution
Registre B 14h 18h
Registre E 18h 18h
2.1.C. Instructions de type MOV r,M : la partie
MOV c’est une mnémonique pour indiquer (MOVe), c’est un
transfert de données d’une case mémoire considérée comme
source M vers le registre destination r. avec
r : pour indiquer les registres A,B,C,D,E,H ou L.
mais comment identifier cette case mémoire ?
Il suffit de prendre le contenu du paire de registre HL, voir la
partie.1 du cours.
ainsi, on aura 7 code opération pour cette instruction.
c’est des instructions de 1 octet de taille, qui ne possèdent pas
d’opérandes.
exemple :
On exécute l’instruction MOV C, M avec C=F0h, H=28h et L=18h
avec le contenu de la case mémoire <2818h>=30h à l’état
initial
le code machine = le code opération
= 4Eh
la taille de cette instruction est de 1 octets

Avant l’exécution Après l’exécution


Registre C F0h 30h
Registre H 28h 28h
Registre L 18h 18h
<2818h> 30h 30h
2.1.D. Instructions de type MOV M,r : la partie
MOV c’est une mnémonique pour indiquer (MOVe), c’est un
transfert de données d’un registre considérée comme source r
vers la case mémoire de destination M. avec
r : pour indiquer les registres A,B,C,D,E,H ou L.
Il suffit de prendre le contenu du paire de registre HL, pour
obtenir l’adresse de la case mémoire de destination.
ainsi, on aura 7 code opération pour cette instruction.
c’est des instructions de 1 octet de taille, qui ne possèdent pas
d’opérandes.
exemple :
On exécute l’instruction MOV M, E avec E=5Fh, H=80h et L=05h
avec le contenu de la case mémoire <8005h>=00h à l’état
initial
le code machine = le code opération
= 73h
la taille de cette instruction est de 1 octets

Avant l’exécution Après l’exécution


Registre E 5Fh 5Fh
Registre H 80h 80h
Registre L 05h 05h
<8005h> 00h 5Fh
2.1.E. Instructions de type LXI rp,d16 : la partie LXI
c’est une mnémonique pour indiquer (Load eXtended register
Immediate), c’est un transfert de données immédiat d16 vers
la paire de registre de destination rp. avec
rp : pour indiquer les paires de registres BC, DE ou HL.
d16 : indique que c’est des données de 16 bits.
ainsi, on aura 3 code opération pour cette instruction.
c’est des instructions de 3 octets de taille, puisqu’elles
possèdent une opérande de 16 bits = 2 octets.
Remarque : dans l’écriture des instructions assembleur, qui
utilisent paire de registre rp, il suffit d’indiquer le MS registre
(Most Significant), à savoir pour BC c’est B, pour DE c’est D et
pour HL c’est H.
exemple :
On exécute l’instruction LXI B, 0102h avec B=55h, C=44h à l’état
initial
le code machine = le code opération, opérande
= 01h, 02h, 01h
la taille de cette instruction est de 3 octets

Avant l’exécution Après l’exécution


Registre B 55h 01h
Registre C 44h 02h
2.1.F. Instructions de type MOV M, r : la partie
MOV c’est une mnémonique pour indiquer (MOVe), c’est un
transfert de données d’un registre considérée comme source r
vers la case mémoire de destination M. avec
r : pour indiquer les registres A,B,C,D,E,H ou L.
Il suffit de prendre le contenu du paire de registre HL, pour
identifier l’adresse de la case mémoire de destination.
ainsi, on aura 7 code opération pour cette instruction.
c’est des instructions de 1 octet de taille, qui ne possèdent pas
d’opérandes.
exemple :
On exécute l’instruction MOV M, B avec B=00h, H=38h et L=48h
avec le contenu de la case mémoire <3848h>=01h à l’état
initial
le code machine = le code opération
= 70h
la taille de cette instruction est de 1 octets

Avant l’exécution Après l’exécution


Registre B 00h 00h
Registre H 38h 38h
Registre L 48h 48h
<3848h> 01h 00h
2.1.G. Instructions de type MVI M,d8 : MVI (MoVe
Immediate) des données d8 de 8 bits vers la case mémoire M
dont l’adresse est le contenu du paire de registre HL.
c’est une instruction qui utilise l’adressage immédiat, avec :
d8 : pour indiquer les données sur 8 bits.
M : pour indiquer la case mémoire d’adresse HL.
ainsi, on a 1 code opération pour cette instruction.
c’est une instruction qui occupe deux octets dans la mémoire.
exemple :
On exécute l’instruction MVI M, FFh avec H=58h et L=68h avec
le contenu de la case mémoire <5868h>=00h à l’état initial
le code machine = le code opération, l’opérande
= 36h, FFh
la taille de cette instruction est de 2 octets

Avant l’exécution Après l’exécution


Registre H 58h 58h
Registre L 68h 68h
<5868h> 00h FFh
2.1.H. Instructions de type LDA d16 : LDA
mnémonique qui veut dire (LoaD Accumulator) charger
l’accumulateur à partir du contenu de l’adresse mémoire d16
de 16 bits.
c’est une instruction qui utilise l’adressage direct, avec :
d16 : pour indiquer l’adresse de la case mémoire.
ainsi, on a 1 code opération pour cette instruction.
c’est une instruction qui occupe trois octets dans la mémoire.
À savoir un octet pour le code opération et deux octets pour
l’adresse mémoire de 16 bits.
exemple :
On exécute l’instruction LDA 3344h avec A=08h le contenu de la
case mémoire <3344h>=7Dh à l’état initial
le code machine = le code opération, l’opérande
= 3Ah, 44h, 33h
la taille de cette instruction est de 3 octets

Avant l’exécution Après l’exécution


Registre A 08h 7Dh
<3344h> 7Dh 7Dh
2.1.I. Instructions de type STA d16 : STA
mnémonique qui veut dire (STore Accumulator) stocker le
contenu de l’accumulateur dans la case mémoire dont
l’adresse est d16 de 16 bits.
d16 : pour indiquer l’adresse de la case mémoire.
ainsi, on a 1 code opération pour cette instruction.
c’est une instruction qui occupe trois octets dans la mémoire.
À savoir un octet pour le code opération et deux octets pour
l’adresse mémoire de 16 bits.
exemple :
On exécute l’instruction STA 5566h avec A=E8h le contenu de la
case mémoire <5566h>=7Dh à l’état initial
le code machine = le code opération, l’opérande
= 32h, 66h, 55h
la taille de cette instruction est de 3 octets

Avant l’exécution Après l’exécution


Registre A E8h E8h
<5566h> 7Dh E8h
2.1.J. Instructions de type XCHG : XCHG
mnémonique qui veut dire (eXCHanGe) instruction utilisée
pour échanger les contenus entre la paire de registre HL avec
la paire de registre DE.
ainsi, on a 1 code opération pour cette instruction.
c’est une instruction qui occupe 1 octet dans la mémoire. À
savoir un octet pour le code opération.
exemple :
On exécute l’instruction XCHG avec H=99h, L=AAh, D=44h et
E=11h à l’état initial
le code machine = le code opération
= EBh
la taille de cette instruction est de 1 octets

Avant l’exécution Après l’exécution


Paire Registre HL 99AAh 4411h
Paire Registre DE 4411h 99AAh
2.1.K. Instructions de type LDAX rp : LDAX
mnémonique qui veut dire (LoaD Accumulator from memory
pointed by eXtended register) instruction utilisée pour charger
l’accumulateur avec le contenu de la case mémoire dont
l’adresse est donnée par la paire de registre rp.
ainsi, on a 2 codes opérations pour cette instruction avec
LDAX B et LDAX D.
on ne trouve pas LDAX H puisqu’elle est équivalente à MOV
A,M
c’est une instruction qui occupe 1 octet dans la mémoire. À
savoir un octet pour le code opération.
2.1.L. Instructions de type STAX rp : STAX
mnémonique qui veut dire (STore Accumulator in memory
pointed by eXtended register) instruction utilisée pour stocker
le contenu de l’accumulateur dans la case mémoire dont
l’adresse est le contenu de rp.
ainsi, on a 2 codes opérations pour cette instruction, STAX B et
STAX D. on ne trouve pas STAX H.
c’est une instruction qui occupe 1 octet dans la mémoire. À
savoir un octet pour le code opération.
2.1.M. Instructions de type LHLD a16 : LHLD
mnémonique qui veut dire (Load HL pair using direct
addressing from memory location a16)
ainsi, on a 1 code opérations pour cette instruction.
c’est une instruction qui occupe 3 octets dans la mémoire. À
savoir un octet pour le code opération et deux pour
l’opérande.
2.1.N. Instructions de type SHLD a16 : LHLD
mnémonique qui veut dire (Store HL pair using direct
addressing in memory location a16)
ainsi, on a 1 code opérations pour cette instruction.
c’est une instruction qui occupe 3 octets dans la mémoire. À
savoir un octet pour le code opération et deux pour
l’opérande.
Comment obtient-on les codes opérations :
il est intéressant de savoir comment peut-on obtenir quelques
codes opérations de certaines instructions de transfert
précédentes. D’abord, Intel a codé les registres GPR par :
Registre Code du registre
B 000
C 001
D 010
E 011
H 100
L 101
M 110
A 111
• code opération pour MOV r1, r2 → 01 code de r1 code de r2

• code opération pour MVI r, d8 → 00 code de r 110

exemple : trouver les codes opérations de :


MOV A,B et MVI C,55h

solution : MOV A,B et MVI C,55h

(01111000)2 (00001110)2
7 8 h 0 E h
Les différents Modes d’adressage du 8085 :
Pour des raisons évidentes, l’utilisateur doit avoir la possibilité
d’accéder aux données de plusieurs façon. On appelle ça les
modes d’adressage.
C’est un peu comme un enseignant qui veut désigner un
étudiant, pour ce faire :
o Il utilise sont nom et prénom.
o Il donne son matricule.
o Il indique sa position dans la salle de classe.
Sur le même principe, on trouve plusieurs modes d’adressage
des données, à savoir : ● implicite ● direct ● par registre ●
indirect par registre ● immédiat
A. Adressage direct :
par exemple l’instruction LDA 3344h qui veut dire charger
l’accumulateur avec le contenu de la case mémoire dont
l’adresse est 3344h. Dans ce cas les données se trouve dans
cette case mémoire, dans cette instruction on donne l’adresse
mémoire des données (l’adresse effective) et on n’indique pas
le contenu qu’on a transféré dans l’instruction. C’est un
adressage direct on utilise 2 octets pour stocker l’adresse.
B. Adressage par registre :
pour MOV B, C on transfère le contenu du registre source C
vers le registre destination B, aussi on n’indique pas le
contenu transféré, mais on donne seulement les registres. En
effet, dans le code opération, un registre est désigné par 3
bits. C’est un adressage par registre.
C. Adressage indirect par registre :
dans l’instruction MOV B, M les données à transférer sont
dans la case mémoire dont l’adresse est le contenu de la paire
de registre HL. C’est un adressage indirect par registre.
D. Adressage immédiat :
dans l’instruction MVI A, 33h on indique les données qu’on va
transférer, il s’agit ici de 33h. Il s’agit dans ce cas d’adressage
immédiat.
E. Adressage implicite (inhérent) :
pour les instructions tels que CMA et XCHG il n’est pas
nécessaire d’indiquer l’emplacement des données puisque
dans la première instruction c’est le calcul du complément à
un de l’accumulateur, et dans la 2ième instruction c’est
l’échange des contenus entre les paires HL et DE. C’est un
adressage implicite ou inhérent.

Vous aimerez peut-être aussi