Académique Documents
Professionnel Documents
Culture Documents
Définition
L'accumulateur (nommé : A)
C'est une des deux entrées de l'UAL. Il est impliqué dans presque toutes les opérations réalisées par
l'UAL. Certains constructeurs ont des microprocesseurs à deux accumulateurs (Motorola : 6800)
Exemple : A étant l'accumulateur et B un registre, on peut avoir : A+BÄ A (ADD A,B : addition du
contenu du registre A avec celui du registre B, le résultat étant mis dans A)
retenue (carry : C)
signe (Sign : S)
débordement (overflow : O)
zéro (Z)
parité (Parity : P)
Retenue : (carry : C)
stockage de la retenue arithmétique
Exemple: addition de nombres binaire sur 8 bits
11111100
+ 10000010 FCH + 82H = 17EH
carry : 1 = 01111110 (252)10 + (130)10 = (382)10
La bascule C (carry) sert aussi à capter le bit expulsé lors d'une opération de décalage ou de rotation
exemple :
décalage à gauche d'un bit de cet octet : 10010110
la carry recueille le 1 du bit de poids fort carry : 1 00101100
Signe: (S)
Cette bascule est mise à 1 lorsque le résultat de l'opération est négatif ( bit de plus fort poids du résultat
à1)
Débordement : (overflow : O)
Cet indicateur est mis 1, lorsqu'il y a un dépassement de capacité pour les opérations arithmétiques en
complément à 2. Sur 8 bits, on peut coder de -128 ( 1000 0000 ) à +127 ( 0111 1111 ).
104 0110 1000 - 18 1110 1110
+ 26 + 0001 1010 - 118 1000 1010
=130 = 1000 0010 (-126) -136 0111 1000 (120) avec C=1
L'indicateur débordement est une fonction logique (OU exclusif) de la retenue (C) et du signe (S).
Zéro : (Z)
Cette bascule est mise à 1 lorsque le résultat de l'opération est nul.
Parité : (P)
Cette bascule est mise à 1 lorsque le nombre de 1 de l'accumulateur est pair.
Remarque
La plupart des instructions modifient le registre d'état
exemple :
ADD A, B positionne les drapeaux : O, S, Z, A, P, C
OR B, C (B ou C -> B) positionne S, Z, P tandis que
MOV A, B (Move, Transférer le contenu de B dans A ) n'en positionne aucun
Les registres
Un emplacement mémoire interne au processeur et où l’on place les données à traiter ainsi que les instructions,
et où l’on trouve quelques millionièmes de seconde plus tard les résultats des calculs. Les registres servent aussi
à stocker les adresses utiles au système.
Il existe deux types de registres : les registres d'usage général, et les registres d'adresses (pointeurs)
Sur la figure 1, on va montrer le fonctionnement de la pile lors d'instructions comme PUSH et POP.
Fig. 1 Sauvegarde sur la pile
Question?
Que se passera-t-il durant l'exécution du programme commençant en 12E30H? Que vaudra SP et que
contiendra la pile à cette adresse, à la fin du programme?
Réponse.
Le programme commence par sauvegarder le contenu de C dans la pile (PUSH C). Pour cela (SP) est
décrémenté de deux((SP)=31000H-2=30FFEH), puis on effectue l'écriture de (C) dans la mémoire à
l'adresse (SP) : (30FFEH) = 6142H.
Pour PUSH A on obtient : (30FFCH)=1234H, et pour PUSH B : (30FFAH)=2D5AH.
Pour l'instruction POP B, ((SP)) est chargé dans le registre B ((SP)=30FFAH ; (B)=2D5AH) puis (SP)
est incrémenté de deux ((SP)= 30FFAH+2=30FFCH). Enfin, pour POP A on obtient : (A)=1234H et
(SP)=30FFCH + 2 = 30FFEH
Pour exécuter les instructions dans l’ordre établi par le programme, le microprocesseur doit savoir à chaque
instant l’adresse de la prochaine instruction à exécuter. Le microprocesseur utilise un registre contenant cette
information. Ce registre est appelé pointeur d’instruction (IP : Instruction Pointer) ou compteur
d’instructions ou compteur ordinal.
Remarque : la valeur initiale du pointeur d’instruction est fixée par le constructeur du microprocesseur. Elle
vaut une valeur bien définie à chaque mise sous tension du microprocesseur ou bien lors d’une remise à zéro
(reset). Pour savoir quel type d’opération doit être exécuté (addition, soustraction, ...), le microprocesseur lit le
premier octet de l’instruction pointée par le pointeur d’instruction (code opératoire) et le range dans un registre
appelé registre d’instruction. Le code opératoire est décodé par des circuits de décodage contenus dans le
microprocesseur. Des signaux de commande pour l’UAL sont produits en fonction de l’opération demandée qui
est alors exécutée.
Remarque : pour exécuter une instruction, l’UAL utilise des registres de travail,
Exemple : l’accumulateur, registre temporaire recevant des données intermédiaires.
Pendant que l’instruction est décodée, le pointeur d’instruction est incrémenté de façon à pointer vers
l’instruction suivante :
Puis le processus de lecture et de décodage des instructions recommence. A la suite de chaque instruction, un
registre du microprocesseur est actualisé en fonction du dernier résultat : c’est le registre d’état du
microprocesseur. Chacun des bits du registre d’état est un indicateur d’état ou flag (drapeau).
Exemple : registre d’´etat du microprocesseur Z80 :
Les indicateurs d’état sont activés lorsqu’une certaine condition est remplie, exemple : le flag Z est mis à 1
lorsque la dernière opération a donné un résultat nul, le flag C est mis à un lorsque le résultat d’une addition
possède une retenue, ...
Les indicateurs d’état sont utilisés par les instructions de saut conditionnels : en fonction de l’état d’un (ou
plusieurs) flags, le programme se poursuit de manière différente.
Toutes ces étapes (lecture de l’instruction, décodage, exécution) sont synchronisées par un séquenceur qui
assure le bon déroulement des opérations :
Pour exécuter le programme contenu dans la mémoire centrale, le séquenceur du microprocesseur exécute lui-
même un programme appelé microcode, contenu dans une m´mémoire morte à l’intérieur du microprocesseur.
Le séquenceur est dirigé par une horloge qui délivre un signal de fréquence donnée permettant d’enchaîner les
différentes étapes de l’exécution d’une instruction :
Chaque instruction est caractérisée par le nombre de périodes d’horloge (ou microcycles) qu’elle utilise (donnée
fournie par le fabricant du microprocesseur).
Exemple : horloge `a 5 MHz, période T = 1/f = 0, 2 μs. Si l’instruction s’exécute en 3 microcycles, la durée
d’exécution de l’instruction est : 3 × 0,2 = 0, 6 μs.
L’horloge est constituée par un oscillateur à quartz dont les circuits peuvent être internes ou externes au
microprocesseur. Structure complète d’un microprocesseur simple : pour fonctionner, un microprocesseur
nécessite donc au minimum les éléments suivants :
Mode d’adressage
Partie 4 : les modes d'adressage
Un mode d'adressage est un moyen qui permet au microprocesseur d'avoir accès à une donnée. Cette donnée peut être
un nombre quelconque dont on aura besoin dans le programme, un nombre qui se trouve déjà dans un registre, ou
encore un nombre qui se trouve écrit quelque part en mémoire.
La connaissance des principaux modes d'adressage est obligatoire : elle permet d'écrire les programmes de la façon la
plus courte, la plus simple et la plus lisible possible.
L'adressage inhérent est habituellement réservé aux instructions qui agissent directement sur les valeurs contenues par
les registres. Ces instructions se composent d'elles-mêmes et n'ont aucunement besoin qu'on leur ajoute des indications.
Exemple : CPL
Tous les microprocesseurs possèdent ce genre d'instruction :elle signifie que le registre A (lui et pas un autre) se verra
complémenté. En clair, cela veut dire que chacun de ses bits prendra l'autre valeur binaire ; les chiffres 1 seront
remplacés par des 0 et réciproquement.
CPL
4-2 L'adressage immédiat
La formule LD signifie que l'on va placer (charger) un nombre dans le registre A. Il est facile de voir qu'ici l'instruction LD
n'aurait pu être écrite toute seule, comme dans l'adressage inhérent. Il nous faut absolument rajouter des indications à la
suite : et, si l'on doit mettre un nombre dans l'accumulateur A, il faut bien dire lequel.
Dans le mode d'adressage immédiat, c'est la valeur marquée après la virgule (ici 100) qui sera écrite dans le registre que
l'on aura choisi en écrivant son nom devant la virgule. Dans notre exemple, c'est le registre A qui est concerné mais
n'importe quel autre registre de 8 bits ou 16 bits aurait fait l'affaire.
LD A,100
LD A,300
Cette ligne devrait, en principe, écrire dans A le nombre 300. Vous l'aurez deviné ; cela n'a aucun sens puisque A est un
registre 8 bits et que le nombre maximal qu'il peut contenir est 255.
On l'appelle souvent adressage absolu car c'est un mode qui permet d'avoir accès directement au contenu de n'importe
quel octet de la mémoire.
LD A,(10)
L'accumulateur A sera chargé non par le nombre 10, comme il l'aurait été dans l'adressage immédiat, mais avec la valeur
écrite dans l'octet n°10. L'instruction BASIC équivalente est la suivante :
En fin de compte, le registre A contiendra 185. Les parenthèses qui englobent la valeur 10 sont là pour éviter la confusion
entre les modes immédiat et étendu. Lorsqu'une valeur est " parenthésée ", elle correspond à l'adresse d'un octet de la
mémoire et c'est cet octet qu'il faut prendre ne compte. Un deuxième exemple :
LD A,(5000)
Un piège, comme dans le paragraphe précédent ? 5000 paraît bien trop important pour notre accumulateur 8 bits. Mais
non, cette ligne n'est pas un contre-sens : elle signifie que le registre A va contenir non pas le nombre 5000 mais le
nombre qui se trouve écrit dans l'octet ayant 5000 pour adresse.
Ce qui fait que A sera chargé, une fois l'instruction exécutée, par la valeur 0.
Ce mode d'adressage ne fait apparaître aucun nombre dans l'instruction et n'est utilisable que lorsque l'on veut intervenir
sur les contenus des registres. Exemple :
INC B
Cette instruction donne au microprocesseur l'odre d'incrémenter le registre B, c'est à dire d'augmenter sa valeur d'une
unité. B contenait 200 (par exemple).
INC B
LD C,D
Nous retrouvons le mnémonique de chargement LD. Il n'y a aucune difficulté à interpréter cette instruction. Si 20 et 30
sont, par exemple, écrits dans les registres C et D, l'exécution de l'instruction inscrira la valeur 30 dans C (et D restera
inchangé).
Il est noté comme l'adressage étendu, mais l'expression qui se trouve entre parenthèses est, cette fois, le nom d'un
registre. Voici quelques exemples :
LD C,(HL)
Le simple registre C va être chargé avec la valeur qui se trouve dans l'octet ayant pour adresse le nombre écrit dans HL.
Supposons que, dans ce registre 16 bits, il y ait le nombre 48000.
Après LD C, (HL), il y aura dans le registre C la valeur 146. Cette instruction est donc tout à fait équivalente à LD C,
(48000) en adressage étendu. Deuxième exemple :
LD HL,45000
LD B,(HL)
Il faut considérer que la première instruction LD place directement dans le registre HL le nombre 45000 (mode
d'adressage immédiat. La seconde instruction va recopier dans le registre B le contenu de l'octet 45000.
LD C,(IX+10)
Cette fois, le processeur va aller chercher, pour l'écrire dans C, la valeur qui se trouve dans l'octet ayant pour adresse le
nombre contenu dans IX auquel on ajoute 10. C'est plus facile à comprendre qu'à expliquer ! admettons que IX contienne
la valeur 46000. On ajoute 10 à 46000 et l'octet concerné est alors le n°46010.
Ainsi dans cet exemple, C va être chargé avec le nombre 63. Un dernier exemple :
LD H,(IY-20)
En considérant que IY contient le nombre 47000 (par exemple), cette instruction indique à la machine qu'elle doit placer
dans H le nombre écrit dans l'octet 46980. Si l'on sait que le PEEK de cet octet vaut 132 , on en déduit que le registre H
aura vu son contenu porté à 132. remarquons que seuls les registres IX et IY ont le privilège de pouvoir accéder à une
case mémoire dont l'adresse est donnée par leurs contenus auxquels est ajoutée ou retranchée une valeur comprise
entre +127 et -128 (un octet signé). Les instructions du type :
LD A,(BC+5)
Ou
LD A,(DE-3)
N'éxistent pas.
- Mode d’adressage
- Exécution d’un microprogramme (L/E)