Microprocesseur Intel 8085 : Caractéristiques
Microprocesseur Intel 8085 : Caractéristiques
CHAPITRE 5
5.1 Introduction
L
ES microprocesseurs 4 et 8 bits font déjà partie du passé. Ils illustrent malgré tout les principes de fonc-
tionnement de ce type de composants. Nous nous concentrerons notre étude sur les microprocesseurs de
la première génération le 8085 d’INTEL. Une fois assimilé ce microprocesseur d’un point de vue matériel (hard),
nous aborderons le point de vu logiciel (soft), et les différentes instructions : Logique, arithmétique, saut, adressage
mémoire, adressage port E/S.
Comme nous avons déjà mentionné dans le chapitre précédent, INTEL produit le premier microprocesseur 8 bits,
8008. L’énorme succès de ce microprocesseur fut à l’origine de la fabrication massive des microprocesseurs. A
la suite du succès du 8008, INTEL produisit le 8080 qui constituera le premier élément de la future famille de
microprocesseurs de ce fabriquant. Cependant, MOTOROLA , autre fondeur de silicium, décide de lancer le 6800
qui constituera lui aussi le début d’une grande famille. Les années 70 voient apparaı̂tre de petites entreprises de
fabrication de microprocesseurs souvent constituées par des transfuges des deux grandes compagnies. On peut no-
tamment citer MOSTEK avec son 6502 très inspiré du 6800 et ZILOG avec son Z80 qui constitue une amélioration
technique du 8080 (augmentation du nombre de registres, simplification de l’alimentation...)
Très vite les 8 bits commencent à atteindre la limite de leurs performances et les constructeurs se penchent sur
de nouvelles solutions. Afin d’améliorer encore la performance de microprocesseur 8 bits, les constructeurs com-
mencent à étudier une nouvelle génération de microprocesseurs. De sorte que l’on verra apparaı̂tre des micropro-
cesseurs 8 bits plus puissants permettant de manipuler plus facilement des informations sur 16 bits et offrant de
nouvelles possibilités d’adressage comme le 6809 de MOTOROLA ou le 8085 d’INTEL. Les deux grands construc-
teurs INTEL et MOTOROLA ont alors proposé les éléments de leur nouvelle génération de microprocesseurs
Le 8085 est un microprocesseur 8 bits introduit en 1976 (avec 6500 Transistors) et fonctionne avec du 5V. C’est
une amélioration du microprocesseur 8080 et il est 100% compatible avec son code (voir Fig. 5.1). Il peut adresser
64 Ko de mémoire comme son prédécesseur mais a un brochage différent. Ce microprocesseur a permis à INTEL
de concurrencer le Z80 en attendant la sortie de sont microprocesseur 16 bits (le microprocesseur 8086).
Le microprocesseur 8085 est un circuit intégré de 40 broches comme le montre la figure suivante (voir Fig. 5.2).
» Broches 1, 2 et 37 : les limites de fréquence l’horloge d’un 8085 sont f min = 500 kHz et f max = 3,125 MHz.
Lorsqu’un cristal est relié aux entrées X1 et X2 , il détermine la fréquence sur la puce. La sortie de l’oscillateur
actionne une bascule qui fournit deux signaux d’horloge 10 et 20 (voir Fig. 5.2). Ces signaux conduire les circuits
internes de 8085. Le signal CLK va également à la broche 37 afin de conduire les puces des périphériques.
» Broche 3 : Cette broche transmet le signal RESET OUT. S’il est élevé, indique que le microprocesseur est en
cours de réinitialisation (par exemple le compteur ordinaire, le registre d’instruction sont remis à zéro). Le signal
RESET OUT va aux puces des périphériques. Après la première réinitialisation, le signal RESET OUT est coupé et
le traitement commence.
» Broches 4 et 5 : SOD : signifie données série en sortie et SID : signifie données série en entrée.
» Broches 6 à 11 : Ces broches font partie de l’unité de contrôle d’interruption. Le 8085 dispose cinq entrées
pour les demandes d’interruption. Broches 6 à 10 sont des entrées pour les signaux d’interruption. Broche 11 est
une sortie appelé reconnaissance d’interruption (INTA).
» Broches 12 à 19 et 30 : Broches 12 à 19 portent les 8 bits inférieurs de l’adresse ou les 8 bits de données. Pour
travailler correctement, ils sont connectés à une mémoire. Cette mémoire est appelée latch d’adresse. ALE (broche
30) signifie latch d’adresse validé.
niveau bas de IO / M indique une opération de mémoire et un niveau haut de IO / M signifie qu’une instruction d’E / S
est en cours d’exécution. La RD et WR dénote une lecture ou une écriture en mémoire. Un niveau bas sur WR
signifie une opération d’écriture et un niveau bas sur RD signifie une opération de lecture.
» Broche 35 : Certains périphériques sont lents; ils sont incapables de fonctionner à la même vitesse que le 8085.
Le signal READY permet de ralentir le 8085. Le 8085 adresser un périphérique, si ce dernier est ne pas prêt, il envoi
au 8085 un niveau bas sur READY. Cependant, le 8085 génère un certain nombre des états d’attente. Lorsque le
périphérique est prêt, il envoi un niveau haut sur READY. Ensuite, le 8085 peut effectuer le transfert de données.
» Broche 36 : Quand il est lent la microprocesseur réinitialiser le compteur de programme, registre d’instruction
et d’autres circuits. Il envoie aussi un niveau haut sur le RESET OUT de la broche 3.
» Broches 38 et 39 : Ces signaux sont utilisés dans les opérations d’accès direct à la mémoire (DMA).
» Broches 40 : Tension d’alimentation, connecter à une source + 5V.
La logique interne du microprocesseur 8085 est d’une très grande complexité. La figure 5.3 montre l’architecture
interne de ce microprocesseur en présentons les différents blocs fonctionnels.
¼ Registres,
¼ Unité arithmétique et logique (UAL),
¼ Registre tampon d’adresse,
¼ Incrémentation/décrémentation adresse,
¼ Contrôle d’interruption,
¼ Contrôle d’E/S série,
¼ Circuits de commande.
¼ Décodeur d’instructions.
x Registres: Le microprocesseur 8085 contient plusieurs registres, le tableau ci-dessous résume ceux registres.
Il est à noté que les registres généraux de 8085 sont tous de 8 bits, mais peuvent également être utilisés comme
des registres 16 bits en combinons les paires-BC, DE et HL. Les registres temporaires de 8085 sont des registres
de données temporaire (notés registres W et Z). Ces registres ne sont pas accessibles par le programmeur, mais
le 8085 les utilise pour stocker les données temporaires lors de l’exécution de certaines instructions. Le registre
d’incrémentation/décrémentation d’adresse incrémente ou décrémente le contenu du PC ou SP lorsque les instruc-
tions sont exécutées. Le registre d’état ou drapeaux est formé par un ensemble des drapeaux (flags), il est un
registre de 8-bits dans lequel seulement 5 bits sont utilisés. L’association de ce registre avec l’accumulateur forme
le contexte ou PSW (Program Status Word). Le format de registre d’état de 8085 est représenté sur la figure 5.4.
µ Flag S (Signe) : Si le signe du résultat d’une opération est “-”, ce drapeau est mis à “1”, sinon il est remis à zéro.
µ Flag Z (Zéro) : Si le résultat de l’opération est zéro, ce drapeau est mis à “1”, sinon il est remis à zéro.
µ Flag AC (Carry auxiliaire): S’il y a eu un dépassement sur le 4eme bit résultant de l’exécution d’une opération
arithmétique, ce drapeau est mis à “1”, sinon il est remis à zéro. Ce flag est utilisé pour les opérations BCD.
µ Flag C (Carry): S’il y a eu un dépassement sur le 8eme bit résultant de l’exécution d’une opération arithmétique,
ce drapeau est mis à “1”, sinon il est remis à zéro.
µ Flag P (Parité): Ce flag est à “1” lorsque le résultat d’une opération arithmétique ou logique contient un nombre
y Unité arithmétique et logique (UAL): C’est l’unité qui permet d’effectuer des calculs arithmétiques simples
(additions, soustractions, décalages, etc.) et des opérations logiques (ET, OU, etc.). Le résultat de l’opération est
toujours stocké dans l’accumulateur. L’ALU de 8085 peut effectuer les tâches suivantes:
® Addition binaire sur 8-bits, avec ou sans carry.
® Addition binaire sur 16 bits.
® Addition BCD sur 2 chiffres (digit).
® Soustraction binaire sur 8-bits avec ou sans emprunt.
® Opérations logiques (OU, ET, XOR) sur 8-bit, complément (NOT).
® Opération de décalage de bits. instructions
Un programme est une suite de code machine représentant des instructions (selon un codage bien défini), et placé en
mémoire. Chaque instruction machine contient un code qui indique l’instruction à exécuter : addition, multiplica-
tion, branchement, etc. Ce code est appelé le code-opération, en abrégé opcode. Une instruction, comme l’addition,
s’applique généralement à des opérandes. Suivant les cas, chaque opérande est indiqué comme une valeur con-
stante, une adresse, un registre, etc. Cette représentation des instructions est fixée une fois pour toutes par le jeu
d’instructions. Celui-ci précise quel opcode correspond à telle instruction, quels sont les opérandes permis, quels
sont les modes d’adressage possibles pour chaque instruction, etc. L’ensemble de cette spécification s’appelle le
langage machine. Donc, chaque instruction indique une opération à effectuer sur certaines données. Il y a plusieurs
méthodes pour spécifier les données pour les instructions, cette spécification appelée “modes d’adressage”. Le mi-
croprocesseur 8085, possède cinq modes d’adressage:
On peut définir l’adressage comme une fonction permettant de sélectionner une donnée parmi un ensemble de
données par un calcul d’adresse. Le résultat de tout mode d’adressage est une adresse opérationnelle d’une donnée.
La donnée en question pourra être, par exemple, un mot mémoire ou un registre.
x Adressage implicite: Dans ce mode d’adressage, l’opérande est fixe et connue implicitement par la machine
(L’opérande est absent dans l’instruction). Il s’adresse donc aux instructions sans opérande. Aussitôt que le code
opération détecté, le microprocesseur 8085 agit instantanément sur la mémoire impliquée implicitement.
Exemple : RAR , RAL , CMA .
y Adressage immédiat: La façon la plus simple de spécifier un opérande dans une instruction, c’est d’écrire
directement sa valeur dans la zone d’adresse de l’instruction. On appelle ce type d’opérande opérande immédiat.
Celui-ci est chargé automatiquement dans la mémoire registre de l’unité de traitement lors du cycle de décodage de
l’instruction, après bien sûr l’identification de ce mode d’adressage. Donc, On parle de mode d’adressage immédiat
lorsque le code opérande contient une donnée. La taille de la donnée peut varier entre 1 et 2 octets.
Exemple : MVI A, 07 , ADI, 0Fh
z Adressage direct: C’est le mode d’adressage le plus simple et le plus utilisé. Ce mode permet de référer à un
mot mémoire en faisant figurer dans la zone adresse, directement l’adresse du mot désiré sans plus de complication,
mot contenant la valeur de l’opérande impliqué.
Exemple : LDA 4000h , STA 5513h
{ Adressage registre: Un grand nombre d’instructions de 8085 utilisent ce type d’adressage. Avec ce type
d’adressage, les registres de A à E, H ou L ainsi que le code d’opération sont indiqués dans l’instruction. Généralement,
l’accumulateur (A) est impliqué en tant que second opérande. Par exemple, l’instruction CMP E peut être in-
terprétée comme : comparer le contenu du registre E avec le contenu de l’accumulateur.
Exemple : MOV A, B , ADD, D
| Adressage indirect: Ce mode d’adressage adresse la mémoire d’une façon indirecte via une paire de registre.
Ainsi, l’instruction MOV M, C se déplace le contenu du registre C dans l’adresse de mémoire stockée dans la paire
de registre M et L. L’instruction LDAX B charge l’accumulateur avec l’octet de données spécifiées par l’adresse
dans la paire de registre B et C.
Exemple : MOV A, M , ADD, M
Le jeu d’instructions est l’ensemble des instructions machines qu’un processeur peut exécuter. Ces instructions
machines permettent d’effectuer des opérations élémentaires (addition, ET logique,...) ou plus complexes (divi-
sion). Le jeu d’instructions définit quelles sont les instructions supportées par le processeur. Il précise aussi quels
sont les registres du processeur manipulables par le programmeur.
Les mnémoniques affectées aux instructions sont conçus pour indiquer leurs fonctions. Les instructions peuvent
être regroupées suivant les catégories fonctionnelles suivantes:
® Groupe de transferts (Data Transfer Group)
® Groupe arithmétiques (Arithmetic Group)
® Groupe logiques (Logical Group)
® Groupe de branchements (sauts) (Branch Group)
® Groupe de contrôles (Control Group)
Il n’est pas nécessaire de connaı̂tre le jeu d’instruction par cœur, par contre il faut savoir le genre d’instruction qui
existe, savoir comment trouver l’instruction dont on a besoin. Cependant, il est très utile de connaı̂tre un ensemble
d’instructions couramment utilisées. Ce sont ces instructions que nous allons détailler ici.
Instructions de transferts: Les instructions de transferts de données se déplacent des données entre les
différents registres ou entre la mémoire et les différents registres.
J MOV (Move ≡ Déplacement): L’instruction MOV transfert un octet de données d’une source vers une destina-
tion. La source reste inchangée. Les opérandes de l’instruction précisent si le transfert est de registre vers registre,
de registre vers mémoire ou de mémoire vers registre.
◦ Transfert registre vers registre
Opcode Opérande
MOV regl,reg2
L’instruction copie le contenu d’un registre reg2 dans le registre reg1. On peut utiliser cette instruction avec tous
les registres A, B, C, D, E, H ou L.
◦ Transfert registre vers mémoire
Opcode Opérande
MOV M,reg
Cette instruction copie le contenu du registre spécifié dans l’emplacement de mémoire adressé par les registres H
et L. M est une référence symbolique de paire de registres H et L. Le second opérande (reg) est l’un des registres.
◦ Transfert mémoire vers registre
Opcode Opérande
MOV reg,M
Cette instruction copie le contenu de l’emplacement mémoire adressé par les registres H et L dans le registre
spécifié. Le premier opérande est le registre de destination.
Exemple Opcode Opérande Commentaire
MOV A,M Copie le contenu de l’emplacement mémoire dans A
MOV A,B Copie le contenu de B dans A
MOV M,C Copie le contenu de C dans l’emplacement mémoire
!!!!!!
J MVI (Move Immediate ≡ transfert d’une immédiat): Le second octet de l’instruction MVI contient les données
de base qui doivent être transférés. Cette instruction copie la valeur (second octet) dans la destination. La destina-
tion peut être un registre ou un emplacement mémoire.
◦ Transfert une immédiate vers un registre
Opcode Opérande
MVI reg,data
Le premier opérande est l’un de registres A, B, C, D, E, H ou L. Le second opérande spécifie les données d’être
transférées dans la destination. Ces données peuvent se présenter sous la forme d’un nombre, un code ASCII, une
étiquette d’une valeur préalablement définie, ou une expression. Les données ne doivent pas dépasser un octet.
◦ Transfert une immédiate vers un emplacement mémoire
Opcode Opérande
MVI M,data
Cette instruction copie les données stockées dans son second octet dans l’emplacement mémoire adressé par H et
L. M est une référence symbolique de paire de registres H et L.
Exemple Opcode Opérande Commentaire
MVI M,01000001b Copie la valeur binaire dans l’emplacement mémoire
MVI A,’A’ Copie le caractère ’A’ dans A
MVI C,41h Copie la valeur hexadécimale dans C
MVI M,65 Copie la valeur décimale dans l’emplacement mémoire
MVI B,5+30*2 Copie l’expression dans B
!!!!!!
J LDA (Load Accumulator Directly from Memory ≡ Charge l’accumulateur directement depuis la mémoire):
Charge l’accumulateur A directement avec une copie de l’octet de l’emplacement spécifié par le deuxième et le
troisième octet de l’instruction LDA.
Opcode Opérande
LDA adress
L’adresse peut être déclarée comme un nombre, une étiquette ou une expression.
Exemple Opcode Opérande Commentaire
LDA 300h Ces instructions sont équivalentes. Lorsqu’il est exécuté, chacune
LDA 3*(16*16) remplace le contenu de l’accumulateur avec l’octet de données
LDA 200h+256 stockées dans l’emplacement de mémoire adressé par 300h.
!!!!!!
J STA (Store Accumulator Directly in Memory ≡ Mémorisé l’accumulateur directement en mémoire): Stocker
une copie de l’accumulateur A dans l’emplacement mémoire spécifié par le deuxième et le troisième octet de
l’instruction STA.
Opcode Opérande
STA adress
L’adresse peut être déclarée comme un nombre, une étiquette ou une expression.
Exemple Opcode Opérande Commentaire
STA 5B3h Ces instructions stockent une copie du l’accumulateur aux
STA 10FAh) emplacements mémoire adressés par 5B3h et 10FAh
!!!!!!
J LHLD (Load H and L Registers Directly from Memory ≡ Charge les registres H et L directement depuis la
mémoire): Charge les registres H et L directement. Le registre L est chargé par l’octet mémorisé à l’emplacement
mémoire spécifié par le deuxième et le troisième octet de l’instruction LHLD. Le registre H est chargé par l’octet
de l’emplacement mémoire suivant.
Opcode Opérande
LHLD adress
L’adresse peut être déclarée comme un nombre, une étiquette ou une expression.
Exemple Opcode Opérande Commentaire
LHLD 3000h Charger les registres H et L
MOV A,M Charger A avec le contenu mémoire adressé par H et L
!!!!!!
J SHLD (Store H and L Registers Directly in Memory ≡ Stocké les registres H et L directement en mémoire):
Stocke les registres H et L directement. Le registre L est stocké dans l’emplacement mémoire spécifié par le
deuxième et le troisième octet de l’instruction SHLD. Le registre H est stocké dans l’emplacement mémoire suivant.
Opcode Opérande
SHLD adress
L’adresse peut être déclarée comme un nombre, une étiquette ou une expression.
Exemple Opcode Opérande Commentaire
MVI L,25h Charger L avec la valeur 25h
MVI H,0Eh Charger H avec la valeur 0Eh
SHLD 010Ah Stocker L et H dans les emplacement mémoires 010Ah et 010Bh
!!!!!!
J LXI (Load Register Pair Immediate ≡ Charge la paire de registre avec une immédiate): LXI copie une donnée
dans une paire de registres.
Opcode Opérande
LXI regp,data
regp doit préciser la paire de registre à chargé. LXI peut charger la paire de registre B et C, la paire de registre D
et E, la paire de registre H et L ou le pointeur de la pile.
Exemple Opcode Opérande Commentaire
LXI B,256Ah Charger B et C avec la valeur 256Ah
LXI D,011Eh Charger D et E avec la valeur 011Eh
LXI H,010Ah Charger H et L avec la valeur 010Ah
LXI SP,2555h Charger le pointeur de la pile avec la valeur 2555h
On peut remplacer LXI par deux instructions MVI successives. Par exemple : LXI H,1234h, qui copie 1234h
dans la paire de registres HL. La valeur 12h sera copié dans le registre H et la valeur 34h dans le registre L. Cette
instruction peut être remplacée par: MVI H,12h suivi par MVI L,34h.
!!!!!!
J LDAX (Load Accumulator Indirect ≡ Charge l’accumulateur A indirectement): Charge l’accumulateur avec
une copie de l’octet stocké dans l’emplacement mémoire adressé par la paire de registre B ou la paire de registre
D.
Opcode Opérande
LDAX regp
regp peut être soit B (la paire de registres B et C ) ou D (la paire de registres D et E).
Exemple Opcode Opérande Commentaire
MVI D,93h Charger D avec la valeur 93h
MVI E,8Bh Charger E avec la valeur 8Bh
LDAX D Charger A avec la valeur de l’emplacement mémoires adressé par DE
!!!!!!
J STAX (Store Accumulator Indirect ≡ Stock l’accumulateur A indirectement): Stocke le contenu de l’accumulateur
dans l’emplacement mémoire adressé par la paire de registre B ou la paire de registre D.
Opcode Opérande
STAX regp
regp peut être soit B (la paire de registres B et C ) ou D (la paire de registres D et E).
Exemple Opcode Opérande Commentaire
MVI B,3Fh Charger B avec la valeur 3Fh
MVI C,16h Charger C avec la valeur 16h
MVI A,2Ah Charger A avec la valeur 2Ah
STAX B Stock 2A dans l’emplacement mémoires adressé par BC
!!!!!!
J XCHG (Exchange Hand L with D and E ≡ Échange les registres D et E avec H et L): Cette instruction échange
les contenus des registres H et L avec le contenu des registres D et E.
Opcode Opérande
XCHG
!!!!!!
J XTHL (Exchange Top of Stack with H and L ≡ Échange top de la pile avec les registres H et L): Échange les
deux octets du haut de la pile avec les deux octets stockés dans les registres H et L. XTHL stock les contenus
actuels des registres H et L et charge de nouvelles valeurs dans H et L.
Opcode Opérande
XTHL
!!!!!!
Instructions arithmétiques: Les instructions arithmétiques regroupent l’ensemble des instructions de calcul.
Les opérations arithmétiques possibles sont l’addition, la soustraction, l’incrémentation et le décrémentation.
J ADD (Addition ≡ Addition): L’instruction ADD permet d’ajouter la donnée d’un registre ou un emplacement
mémoire à l’accumulateur. Le résultat est stocké dans l’accumulateur. Cette instruction affecte les flags pour
indiquer le résultat de l’opération.
◦ Addition de l’accumulateur et un registre
Opcode Opérande
ADD reg
L’opérande est l’un des registres A à E, H ou L. L’instruction permet d’additionner le contenu du registre spécifiée
(reg) avec le contenu de l’accumulateur et stocke le résultat dans l’accumulateur.
◦ Addition de l’accumulateur et une mémoire
Opcode Opérande
ADD M
Cette instruction permet d’additionner le contenu de l’emplacement mémoire (M) adressé par les registres H et L
avec le contenu de l’accumulateur et stocke le résultat dans l’accumulateur. M est une référence symbolique de la
paire de registres H et L.
Exemple Opcode Opérande Commentaire
ADD B Additionne A et le contenu de registre B et met le résultat dans A.
MVI L,C4h Copie la valeur C4h dans le registre L
MVI H,01h Copie la valeur 01h dans le registre H
ADD M Additionne A et le contenu de l’emplacement mémoire adressé par HL
!!!!!!
J ADI (Addition immediat to A ≡ Additionne immédiat à A): additionne le contenu du l’opérande et le contenu
de l’accumulateur et stocke le résultat dans l’accumulateur.
Opcode Opérande
ADI data
L’opérande spécifie les données à ajouter à l’accumulateur. Ces données peuvent être sous la forme d’un nombre,
un code ASCII, une étiquette ou une expression. Il est à noter que les données ne dépasse pas un octet.
Exemple Opcode Opérande Commentaire
ADI 47h Additionne A et la valeur hexadécimal 47h et met le résultat dans A.
ADI ’D’ Additionne A et la valeur ASCII ’D’ et met le résultat dans A.
ADI 01100011b Additionne A et la valeur binnaire et met le résultat dans A.
!!!!!!
J ADC (Addition With Carry ≡ Additionne avec carry): Cette instruction permet d’additionner une donnée située
dans un registre ou un emplacement mémoire et le contenu de l’accumulateur ainsi que le carry. Le résultat est
stocké dans l’accumulateur. ADC met ensuite à jour les flags pour indiquer le résultat de l’opération.
◦ Addition de l’accumulateur et un registre avec carry
Opcode Opérande
ADC reg
L’opérande est l’un des registres A à E, H ou L. L’instruction permet d’additionner le contenu du registre spécifiée
(reg) et le bit de carry avec le contenu de l’accumulateur et stocke le résultat dans l’accumulateur.
◦ Addition de l’accumulateur et une mémoire avec carry
Opcode Opérande
ADC M
Cette instruction permet d’additionner le contenu de l’emplacement mémoire (M) adressé par les registres H et L
et le bit de carry avec le contenu de l’accumulateur et stocke le résultat dans l’accumulateur. M est une référence
symbolique de la paire de registres H et L.
!!!!!!
J ACI (Addition immediate to A with carry ≡ Additionne immédiat à A avec le carry): Cette instruction permet
d’additionner une immédiate et le bit de carry avec l’accumulateur et stocke le résultat dans l’accumulateur.
Opcode Opérande
ACI data
L’opérande spécifie l’immédiat à ajouter à l’accumulateur. Ces données peuvent être sous la forme d’un nombre,
un code ASCII, une étiquette ou une expression. Il est à noter que l’immédiat ne dépasse pas un octet.
Exemple Opcode Opérande Commentaire
ggggggg
ACI AAh A + AAh + C −−−−−→ A
ggggggg
ACI ’E’ A + ’E’ + C −−−−−→ A
ggggggg
ACI 01100011b A + 01100011b + C −−−−−→ A
!!!!!!
J SUB (Subtract ≡ Soustrait): L’instruction SUB permet de soustrait la donnée d’un registre ou un emplacement
mémoire à l’accumulateur. Le résultat est stocké dans l’accumulateur. Cette instruction utilise le complément à
deux afin de le transformer en une instruction d’addition. Cette instruction affecte les flags pour indiquer le résultat
de l’opération.
◦ Soustraction d’un registre de l’accumulateur
Opcode Opérande
SUB reg
L’opérande est l’un des registres A à E, H ou L. L’instruction permet de soustrait le contenu du registre spécifiée
(reg) et le contenu de l’accumulateur à l’aide de la représentation de données en complément à deux et stocke le
résultat dans l’accumulateur.
◦ Soustraction d’une mémoire de l’accumulateur
Opcode Opérande
SUB M
Cette instruction permet de soustrait le contenu de l’emplacement mémoire (M) adressé par les registres H et L et
le contenu de l’accumulateur et stocke le résultat dans l’accumulateur. M est une référence symbolique de la paire
de registres H et L.
!!!!!!
J SUI (Subtract immediate from A ≡ Soustrait immédiat de A): Soustraire le contenu du l’opérande de contenu de
l’accumulateur et stocke le résultat dans l’accumulateur.
Opcode Opérande
SUI data
L’opérande spécifie les données à soustraire de l’accumulateur. Ces données peuvent être sous la forme d’un
nombre, un code ASCII, une étiquette ou une expression. Il est à noter que la donnée ne dépasse pas un octet.
Exemple Opcode Opérande Commentaire
SUI 22h Soustrait la valeur hexadécimal 22h de A et met le résultat dans A.
SUI ’C’ Soustrait la valeur ASCII ’C’ de A et met le résultat dans A.
SUI 11101011b Soustrait la valeur binnaire de A et met le résultat dans A.
!!!!!!
J INR (Increment ≡ Incrémente): Cette instruction additionne un à l’opérande. Elle affecte tous les flags sauf le
carry.
◦ Incrémentation d’un registre
Opcode Opérande
INR reg
L’opérande est l’un des registres A à E, H ou L. L’instruction permet d’ajouter un au contenu du registre spécifié.
◦ Incrémentation d’un emplacement mémoire
Opcode Opérande
INR M
Cette instruction permet d’ajouter un au contenu de l’emplacement mémoire (M) adressé par les registres H et L.
M est une référence symbolique de la paire de registres H et L.
Exemple Opcode Opérande Commentaire
ggggggg
INR B B + 1 −−−−−→ B
MVI L,25h Copie la valeur 25h dans le registre L
MVI H,3Ah Copie la valeur 3Ah dans le registre H
ggggggg
INR M (M) + 1 −−−−−→ (M)
!!!!!!
J DCR (Decrement ≡ Décremente): Cette instruction soustraire un de l’opérande. Elle affecte tous les flags sauf
le carry.
◦ Décrémentation d’un registre
Opcode Opérande
DCR reg
L’opérande est l’un des registres A à E, H ou L. L’instruction permet de soustraire un de contenu du registre
spécifié.
◦ Incrémentation d’un emplacement mémoire
Opcode Opérande
DCR M
Cette instruction permet de soustraire un de contenu de l’emplacement mémoire (M) adressé par les registres H et
L. M est une référence symbolique de la paire de registres H et L.
Exemple Opcode Opérande Commentaire
ggggggg
DCR E B - 1 −−−−−→ B
MVI L,01h Copie la valeur 01h dans le registre L
MVI H,BAh Copie la valeur BAh dans le registre H
ggggggg
DCR M (M) - 1 −−−−−→ (M)
!!!!!!
J INX (Increment Register Pair ≡ Incrément la pair des registres): Cette instruction additionne un à la paire de
registres. Elle affecte tous les flags sauf le carry.
Opcode Opérande
INX regp
INX peut incrémenter seulement les paires des registres B&C, D&E, H&L, ou le registre SP (Stack Pointer). Notez
que les lettres B, D ou H doit être utilisés pour spécifier la paire des registres à incrémentés.
Exemple Opcode Opérande Commentaire
INX B Incrémente la paire BC
INX D Incrémente la paire DE
INX H Incrémente la paire HL
INX SP Incrémente la paire SP
!!!!!!
J DCX (Decrement Register Pair ≡ Décremente la pair des registres): Cette instruction soustraire un de la paire
de registres. Elle affecte tous les flags sauf le carry.
Opcode Opérande
DCX regp
DCX peut décrémenter seulement les paires des registres B&C, D&E, H&L, ou le registre SP (Stack Pointer).
Notez que les lettres B, D ou H doit être utilisés pour spécifier la paire des registres à incrémentés.
Exemple Opcode Opérande Commentaire
DCX B Décrémente la paire BC
DCX D Décrémente la paire DE
DCX H Décrémente la paire HL
DCX SP Décrémente la paire SP
!!!!!!
J DAD (Double Register Addition ≡ Addition Double registres): Cette instruction additionne le contenu de la
paire des registres (valeur 16 bits) et le contenu de la paire des registres H et L.
Opcode Opérande
DAD regp
DAD peut d’additionner seulement les paires des registres B&C, D&E, H&L, ou le registre SP (Stack Pointer) avec
la paire des registres H&L. Notez que les lettres B, D ou H doit être utilisés pour spécifier la paire des registres à
incrémentés.
Exemple Opcode Opérande Commentaire
ggggggg
DAD B BC + HL −−−−−→ HL
ggggggg
DAD D DE + HL −−−−−→ HL
ggggggg
DAD H HL + HL −−−−−→ HL
ggggggg
DAD SP SP + HL −−−−−→ HL
!!!!!!
Instructions logiques: Les instructions logiques regroupent l’ensemble des instructions des manipulations
des bits. Les opérations logiques comprennent l’AND, l’OR, le XOR, la comparaison et la complémentation.
J ANA (Logical AND with Accumulator ≡ ET logique avec l’accumulateur): Cette instruction réalise un ET-
logique bit à bit entre l’opérande source et l’accumulateur. Le résultat est rangé dans l’accumulateur.
◦ ET-logique de l’accumulateur avec un registre
Opcode Opérande
ANA reg
L’opérande est l’un des registres A à E, H ou L. Cette instruction réalise le ET-logique entre le contenu du registre
spécifié et l’accumulateur et stocke le résultat dans l’accumulateur.
◦ ET-logique de l’accumulateur avec la mémoire
Opcode Opérande
ANA M
Cette instruction réalise un ET-logique bit à bit entre le contenu de l’emplacement mémoire et l’accumulateur. Le
résultat est rangé dans l’accumulateur.
Exemple Opcode Opérande Commentaire
ANA B ET logique entre l’accumulateur et le contenu de registre B
MVI H,12h Copie la valeur 12h dans H
MVI L,3Eh Copie la valeur 3Eh dans L
ANA M ET logique entre l’accumulateur et le contenu mémoire adressé par H et L
!!!!!!
J ANI (Logical AND with Accumulator Using Immediate Data ≡ ET logique d’une immédiat avec l’accumulateur):
Cette instruction réalise un ET-logique bit à bit entre l’opérande source (le deuxième octet de l’instruction) et
l’accumulateur. Le résultat est rangé dans l’accumulateur.
Opcode Opérande
ANI data
L’opérande doit spécifier les données à être utilisé dans l’opération ET. Ces données peuvent être sous la forme
d’un nombre, un code ASCII, une étiquette ou une expression. Il est à noter que la donnée ne dépasse pas un octet.
Exemple Opcode Opérande Commentaire
ANI 19h ET-logique entre A et la valeur 19h et met le résultat dans A.
ANI ’C’ ET-logique entre A et la valeur ASCII ’C’ et met le résultat dans A.
ANI 01101111b ET-logique entre A et la valeur binnaire et met le résultat dans A.
!!!!!!
J ORA (Logical OR with Accumulator ≡ OU logique avec l’accumulateur): Cette instruction réalise un OU-
logique bit à bit entre l’opérande source et l’accumulateur. Le résultat est rangé dans l’accumulateur.
◦ OU-logique de l’accumulateur avec un registre
Opcode Opérande
ORA reg
L’opérande est l’un des registres A à E, H ou L. Cette instruction réalise le OU-logique entre le contenu du registre
spécifié et l’accumulateur et stocke le résultat dans l’accumulateur.
Opcode Opérande
ORA M
Cette instruction réalise un OU-logique bit à bit entre le contenu de l’emplacement mémoire et l’accumulateur. Le
résultat est rangé dans l’accumulateur.
Exemple Opcode Opérande Commentaire
ORA D OU-logique entre l’accumulateur et le contenu de registre D
MVI H,33h Copie la valeur 33h dans H
MVI L,ABh Copie la valeur ABh dans L
ORA M OU-logique entre l’accumulateur et le contenu mémoire adressé par H et L
!!!!!!
J ORI (Logical OR with Accumulator Using Immediate Data ≡ OU logique d’une immédiat avec l’accumulateur):
Cette instruction réalise un OU-logique bit à bit entre l’opérande source (le deuxième octet de l’instruction) et
l’accumulateur. Le résultat est rangé dans l’accumulateur.
Opcode Opérande
ORI data
L’opérande doit spécifier les données à être utilisé dans l’opération OU. Ces données peuvent être sous la forme
d’un nombre, un code ASCII, une étiquette ou une expression. Il est à noter que la donnée ne dépasse pas un octet.
Exemple Opcode Opérande Commentaire
ORI 4Fh OU-logique entre A et la valeur 4Fh et met le résultat dans A.
ORI ’E’ OU-logique entre A et la valeur ASCII ’E’ et met le résultat dans A.
ORI 11100011b OU-logique entre A et la valeur binnaire et met le résultat dans A.
!!!!!!
J XRA (Exclusive Logical OR with Accumulator ≡ OU exclusif logique avec l’accumulateur): Cette instruction
réalise un OU exclusif (XOR-logique) bit à bit entre l’opérande source et l’accumulateur. Le résultat est rangé dans
l’accumulateur.
◦ XOR-logique de l’accumulateur avec un registre
Opcode Opérande
XRA reg
L’opérande est l’un des registres A à E, H ou L. Cette instruction réalise le OU exclusif logique entre le contenu
du registre spécifié et l’accumulateur et stocke le résultat dans l’accumulateur.
◦ XOR-logique de l’accumulateur avec la mémoire
Opcode Opérande
XRA M
Cette instruction réalise un OU exclusif logique bit à bit entre le contenu de l’emplacement mémoire et l’accumulateur.
Le résultat est rangé dans l’accumulateur.
Exemple Opcode Opérande Commentaire
XRA B XOR-logique entre l’accumulateur et le contenu de registre B
MVI H,11h Copie la valeur 11h dans H
MVI L,B0h Copie la valeur B0h dans L
XRA M XOR-logique entre l’accumulateur et le contenu mémoire adressé par H et L
!!!!!!
J XRI (Exclusive OR Using Immediate Data ≡ OU exclusif logique d’une immédiat avec l’accumulateur):
Cette instruction réalise un OU exclusif (XOR-logique) bit à bit entre l’opérande source (le deuxième octet de
l’instruction) et l’accumulateur. Le résultat est rangé dans l’accumulateur.
Opcode Opérande
XRI data
L’opérande doit spécifier les données à être utilisé dans l’opération OU exclusif. Ces données peuvent être sous la
forme d’un nombre, un code ASCII, une étiquette ou une expression. Il est à noter que la donnée ne dépasse pas
un octet.
Exemple Opcode Opérande Commentaire
XRI 52h XOR-logique entre A et la valeur 52h et met le résultat dans A.
XRI ’A’ XOR-logique entre A et la valeur ASCII ’A’ et met le résultat dans A.
XRI 10000011b XOR-logique entre A et la valeur binnaire et met le résultat dans A.
!!!!!!
J CMP (Compare ≡ Comparaison): Cette instruction compare le contenu de l’accumulateur avec l’opérande.
Pour comparer ces deux valeurs, on en fait la différence et on étudie le flag de signe S, de carry C et de zéro Z.
Les deux valeurs restent inchangées. Le programme test les flags à l’aide de l’un des instructions Jump, Call, ou
Return. Par exemple, JZ (Saut si Zéro) tests pour l’égalité.
◦ Compare de l’accumulateur avec un registre
Opcode Opérande
CMP reg
L’opérande est l’un des registres A à E, H ou L. La différence fondamentale entre l’instruction CMP et l’instruction
SUB est que l’instruction de comparaison n’affecte pas l’accumulateur, elle affecte seulement les flags.
◦ Compare de l’accumulateur avec la mémoire
Opcode Opérande
CMP M
Cette instruction compare le contenu de l’emplacement mémoire adressé par les registres H et L et l’accumulateur.
Exemple Opcode Opérande Commentaire
CMP D Comparaison entre l’accumulateur et le contenu de registre B
LXI H,4A04h Copie la valeur 4A04h dans la paire des registres H et L
CMP M Comparaison entre A et le contenu mémoire adressé par H et L
!!!!!!
J CPI (Compare Using Immediate Data ≡ Compare une immédiat avec A): Cette instruction compare le contenu
de l’accumulateur avec l’opérande source (le deuxième octet de l’instruction) et affecte les flags Z, C et S afin
d’indiquer le résultat.
Opcode Opérande
CPI data
L’opérande doit spécifier les données à être utilisé dans l’opération de comparaison. Ces données peuvent être sous
la forme d’un nombre, un code ASCII, une étiquette ou une expression. Il est à noter que la donnée ne dépasse pas
un octet.
Exemple Opcode Opérande Commentaire
CPI BBh Comparaison entre A et la valeur BBh et met le résultat dans A.
CPI ’C’ Comparaison entre A et la valeur ASCII ’C’ et met le résultat dans A.
CPI 11110011b Comparaison entre A et la valeur binnaire et met le résultat dans A.
!!!!!!
J RLC (Rotate Accumulator Left ≡ Rotation de l’accumulator vers la gauche): Rotation ou décalage à gauche
de l’accumulateur sans utilisation du Carry. Donc, le bit position élevée de l’accumulateur transféré à la position
faible de celui-ci et au bit de carry.
Opcode Opérande
RLC
!!!!!!
J RRC (Rotate Accumulator Right ≡ Rotation de l’accumulateur vers la droite): Rotation ou décalage à droite
de l’accumulateur sans utilisation du Carry. Donc, le bit position faible de l’accumulateur transféré à la position
élevée de celui-ci et au bit de carry.
Opcode Opérande
RRC
!!!!!!
J RAL (Rotate Left Through Carry ≡ Rotation A vers la gauche avec le carry): Rotation ou décalage à gauche de
l’accumulateur avec utilisation du Carry. Donc, le flag carry, qui est traité comme une partie de l’accumulateur, est
transféré à la position faible de l’accumulateur. Le bit de position élevée de l’accumulateur est transféré au bit de
carry.
Opcode Opérande
RAL
!!!!!!
J RAR (Rotate Right Through Carry ≡ Rotation A vers la droite avec le carry): Rotation ou décalage à droite de
l’accumulateur avec utilisation du Carry. Donc, le flag carry, qui est traité comme une partie de l’accumulateur, est
transféré à la position élevée de l’accumulateur. Le bit de position faible de l’accumulateur est transféré au carry.
Opcode Opérande
RAR
!!!!!!
J CMA (Complement Accumulator ≡ Complément de l’accumulateur): Cette instruction complémente chaque bit
de l’accumulateur afin d’obtenir le complément à un. Tous les flags restent inchangés.
Opcode Opérande
CMA
Cette instruction ne contient pas un opérande. Afin d’obtenir le complément à deux de l’accumulateur, il suffit
d’ajouter un au contenu de l’accumulateur après l’instruction CMA.
Exemple Opcode Opérande Commentaire
MVI A,51h Copie la valeur 51h dans l’accumulateur A.
CMA complément à un de l’accumulateur, après exécution, A devient AEh .
!!!!!!
J CMC (Complement Carry Flag ≡ Complément de carry): Si le flag Carry est égal à 0, CMC met C égal à 1. Si
le flag Carry est égal à 1, CMC met C égal à 0. Tous les autres flags restent inchangés.
Opcode Opérande
CMC
!!!!!!
J STC (Set Carry Flag ≡ Fixe le carry): Cette instruction initialise le flag C par 1.
Opcode Opérande
STC
!!!!!!
Instructions de sauts: Les programmes séquentiels (sans sauts) s’exécutent ligne après ligne. Le compteur
ordinal (PC) s’incrémente après chaque instruction de 1, de 2 ou de 3 suivant la longueur de l’instruction. Il est
cependant possible de faire un saut dans le programme, et exécuter une instruction beaucoup plus éloignée, ou au
contraire revenir en arrière.
◦ Sauts inconditionnels
J JMP (Jump ≡ Saut inconditionnel): Le saut inconditionnel est un branchement systématique. L’instruction JMP
modifie la séquence d’exécution par le chargement de la nouvelle adresse, déclarée dans le deuxième et le troisième
octet de l’instruction, dans le PC.
Opcode Opérande
JMP adress
l’opérande de cette instruction est une adresse, soit 16 bits. Cette instruction a donc une taille de 3 octets.
Exemple Adresse Opcode Opérande Commentaire
0000h MVI A,55h Copie la valeur 55h dans l’accumulateur A.
0002h CMA Complémente l’accumulateur.
0003h JMP 0002h Saut à l’adresse 0002h.
Ce programme exécute une boucle sans fin.
!!!!!!
J CALL (Call ≡ Appel inconditionnel): Le 8085 possède des instructions d’appel et de retour des sous pro-
grammes. Lorsque l’instruction d’appel est exécutée, l’adresse de l’instruction suivante (le contenu du PC) est
sauvegardée (généralement dans la pile). Le contenu du PC est remplacé par l’adresse du sous-programme souhaité.
A la fin du sous-programme, une instruction de retour apparaı̂t, à cet effet l’adresse précédemment sauvegardée
est transférée dans le PC, ensuite le programme poursuit son exécution. La figure 2 montre le déroulement de
l’instruction d’appel et de retour des sous-programmes.
L’instruction d’appel CALL combine les deux instructions PUSH et JMP. Elle stocke le contenu du PC dans la pile,
utilisant l’instruction PUSH, puis saut à l’adresse indiquée dans l’instruction CALL, utilisant l’instruction JMP.
Opcode Opérande
CALL adress
Généralement, l’utilisation d’une instruction d’appel CALL implique l’utilisation d’une instruction de retour RET.
!!!!!!
J RET (Return ≡ Retour): L’instruction de retour d’un sous-programme RET recharge le PC avec les deux
octets de l’adresse stockés précédemment avec l’instruction CALL. Ensuite, l’exécution du programme reprend à
la nouvelle adresse dans le compteur de programme.
Opcode Opérande
RET
Cette instruction ne contient pas un opérande. Typiquement, l’instruction RET est utilisée en conjonction avec
l’instruction d’appel CALL (voir l’exemple précédent).
!!!!!!
◦ Sauts conditionnels Le saut conditionnel se fera si une condition donnée est remplie. Cette condition sera évaluée
grâce aux flags. L’instruction de branchement conditionnel examine l’état de l’un des quatre flags pour déterminer
si le saut spécifié doit être exécuté. Les conditions qui peuvent être spécifiés sont les suivants:
!!!!!!
Instructions de contrôles:
J PUSH (Push Two Bytes of Data onto the Stack ≡ Empile la paire de données): L’instruction PUSH empile les
deux octets de données (sauvegarder dans la pile). Ces données peuvent être le contenu d’une paire des registres
ou l’état du programme (PSW).
Opcode Opérande
PUSH regp
PUSH peut empiler seulement les paires des registres B&C, D&E, H&L, ou le registre PSW (Program Status
Word). Notez que les lettres B, D ou H doit être utilisés pour spécifier la paire des registres à empilés. PSW
comprend le contenu de l’accumulateur et les flags.
Exemple Opcode Opérande Commentaire
PUSH B Empile la paire de registre B et C.
PUSH D Empile la paire de registre D et E.
PUSH H Empile la paire de registre B et C.
PUSH PSW Empile la paire de registre A et les flags.
!!!!!!
J POP (Pop Two Bytes of Data off the Stack ≡ Dépile la paire de données): L’instruction POP dépile les deux
octets de données (supprimer à partir de la pile). Ces données peuvent être le contenu d’une paire des registres ou
l’état du programme (PSW).
Opcode Opérande
POP regp
PUSH peut Dépiler seulement les paires des registres B&C, D&E, H&L, ou le registre PSW (Program Status
Word). Notez que les lettres B, D ou H doit être utilisés pour spécifier la paire des registres à empilés. PSW
comprend le contenu de l’accumulateur et les flags.
Exemple Opcode Opérande Commentaire
POP B Dépile la paire de registre B et C.
POP D Dépile la paire de registre D et E.
POP H Dépile la paire de registre B et C.
POP PSW Dépile la paire de registre A et les flags.
!!!!!!
J XTHL (Exchange Top of Stack with H and L ≡ Échange top de la pile avec les registres H et L): L’instruction
XTHL échanges les deux octets du haut de la pile avec les deux octets stockés dans les registres H et L.
Opcode Opérande
XTHL
!!!!!!
J SPHL (Move contents of H and L to Stack Pointer ≡ Stock H et L dans la pile): Cette instruction stocke le
contenu des registres H et L dans la pile.
Opcode Opérande
SPHL
!!!!!!
J IN (Input ≡ Entrée): L’instruction IN lit huit bits de données (un octet) à partir du port spécifié et les charge
dans l’accumulateur.
Opcode Opérande
IN exp
L’opérande peut être un nombre ou une expression qui donne une valeur comprise entre 00h et FFh.
Exemple Opcode Opérande Commentaire
IN 01h Lecture du port, le résultat est dans l’accumulateur.
!!!!!!
J OUT (Output ≡ Sortie): L’instruction OUT met le contenu de l’accumulateur (huit bits de données) dans le
port. Le nombre des ports est 255.
Opcode Opérande
OUT exp
L’opérande peut être un nombre ou une expression qui donne une valeur comprise entre 00h et FFh.
Exemple Opcode Opérande Commentaire
MVI A,60h Copie la valeur 60h dans l’accumulateur A.
OUT 02h Ecriture de 60h à l’adresse 02h.
!!!!!!
J EI (Enable Interrupt System ≡ Active les interruptions): Après l’exécution de l’instruction EI, les interruptions
système sont autorisées.
Opcode Opérande
EI
!!!!!!
J DI (Disable Interrupt System ≡ Désactive les interruptions): Après l’exécution de l’instruction DI, les interrup-
tions système sont désactivées lorsque le processeur les reconnaı̂t.
Opcode Opérande
DI
!!!!!!
J HLT (Halt ≡ Arrête): L’instruction HLT arrête le processeur. Le compteur de programme contient l’adresse de
l’instruction séquentielle suivante et les flags et les registres restent inchangés.
Opcode Opérande
HLT
!!!!!!
J NOP (No Operation ≡ Pas d’opération): L’instruction NOP ne réalise aucune opération et n’affecte aucuns
flags. Elle est utilisée pour la synchronisation.
Opcode Opérande
NOP
Exercice 1: Dites si cette instruction est possible ou non. Si elle est impossible, expliquez pourquoi.
Solution:
MOV H,L OUI
MOV D, 23h NON,il faut utiliser l’instruction MVI
MOV E, F OUI
MOV C, D NON, il faut utiliser l’instruction MOV
MOV H, 99h OUI
Exercice 2: Dites si cette instruction est possible ou non. Si elle est impossible, expliquez pourquoi.
Solution:
ADI 2FFh NON, l’opérande est sur plus de 8 bits
ORA Ch NON, Ch est une valeur hexadécimale
ORA C OUI
ANA FFh NON, ANI FFh est correct
ORB D NON, l’instruction ORB n’existe pas, seul ORA existe
ORI 00h OUI
ADD B,C NON, il n’est pas possible de faire une addition de 2 registres si on utilise pas le registre A.
Exercice 3: Soit le programme suivant. Donnez l’état de chaque registre après l’exécution de l’instruction.
On suppose que la première instruction est à l’adresse 0000h.