L'UNITE CENTRALE DE TRAITEMENT
(source : MC68HC11 REFERENCE MANUEL de MOTOROLA)
Le schéma se trouve dans le fichier registres.xls
Les accumulateurs A, B et D
Les registres d'index X et Y
Le pointeur de pile SP
Le compteur programme PC
Le registre code condition CCR
Les modes d'adressage
Les accumulateurs A et B sont des registres de 8 digits utilisés pour contenir des opérandes et les résultats de calculs arithmétiques ou de manipulations de données. Certaines instructions utilisent la combinaison de ces deux accumulateurs 8 digits comme un double accumulateur 16 digits (accumulateur D).La plupart des opérations peuvent utiliser les accumulateurs A ou B indifféremment; cependant, il y a quelques exceptions notables. Les instruction ABX et ABY additionnent le contenu de l'accumulateur B de 8 digits au contenu des registres d'index 16 digits X ou Y, et il n'y a pas d'instructions équivalentes utilisant l'accumulateur A. TAP et TPA sont des instructions utilisées pour transférer des données de l'accumulateur A vers le CCR et vice - versa. Il n'y a pas d'instructions équivalentes utilisant l'accumulateur B.
Les registres d'index 16 digits X et Y sont utilisés pour le mode d'adressage index2. Dans le mode d'adressage indexé, le contenu d'un registre d'index 16 digits est additionné à un décalage de 8 digits, qui fait partie de l'instruction, pour former l'adresse effective de l'opérande utilisisés par l'instruction. Les intructions concernant le registre Y utilisent un octet de plus que celles utilisant le registre X. (voir le jeu d'instructions dans registres.xls).
Nous verrons dans les programmes que le registre d'index X est souvent utilisé pour accéder aux registres de contrôle des entrées / sorties internes. Par exemple pour sortir sur le port B la valeur $E7 on pourrait écrire :
LDAA #$E7 STAA $1004 |
ou |
ou encore comme nous le ferons souvent PORTB EQU $04 |
Le pointeur de pile (stack pointer SP)
La pile est un espace mémoire réservé pour la sauvegarde
de données. Elle fonctionne suivant le mode LIFO (last in, first out).
On accède au dernier élément entré dans la pile.
Chaque fois qu'un octet est poussé sur la pile, le registre SP est automatiquement
décrémenté et chaque fois qu'un octet est retiré
de la pile SP est automatiquement incrémenté. A chaque instant
SP contient l'adresse 16 digits du prochain emplacement libre sur la pile.
Quand un sous-programme est appelé par une instruction "jump to
subroutine" JSR ou "branch to subroutine" BSR, l'adresse de la
prochaine instruction à exécuter après la fin du sous-programme
est poussée sur la pile, l'octet le plus fort en premier. Quand le sous-programme
est terminé (après l'instruction RTS, "return from subroutine")
cette adresse est retirée de la pile et l'exécution du programme
appelant continue. Le programme trouve l'adresse de la prochaine instruction
à effectuer dans le registre PC (program counter). Quand un sous-programme
est appelé, l'adresse contenue dans le PC est poussée sur la pile
et le PC reçoit l'adresse du sous-programme.
Si le sous-programme appelé modifie les valeurs de certains registres
qui doivent être utilisées au retour du sous-programme, il faut
penser à sauvegarder celles-ci avant l'appel du sous-programme ou dans
les premières instructions de celui-ci, et ne pas oublier de les rétablir
à leur place à la fin. On peut pour cela utiliser la mémoire
ou mieux la pile si ce besoin de mémoire n'est que temporaire.
Quand une interruption arrive, l'instruction en cours se termine normalement,
l'adresse de la prochaine instruction qui est dans le PC est poussée
sur la pile, tous les registres du CPU sont poussés sur la pile, et l'exécution
continue à l'adresse spécifiée dans le vecteur de l'interruption
concernée. L'instruction RTI ("return to interrupt" retour
d'interruption) dépile les valeurs des registres dans l'ordre l'inverse
de l'empilement et le programme reprend comme s'il n'y avait pas eu d'interruption.
La pile peut aussi être utilisée pour passer des paramètres aux sous-programmes.
S'assurer quand même que la taille de la pile sera suffisante.
Comme il est dit plus haut, le PC contient l'adresse de la prochaine instruction à effectuer.
Le registre code de condition CCR :
Le CCR donne des indications sur le résultat d'une opération logique ou algébrique. Les huit digits sont représentés par les lettres : S X H I N Z V C
C (carry) est le digit de retenue. Il est mis à 1 si une opération a généré une retenue
V (overflow) est le digit de dépassement. Le résultat de l'opération peut-être erroné
Z (zéro) il est a 1 si le résultat est nul
N (négatif) est à 1 si le résultat est négatif (attention de ne pas interpréter à l'envers).
H (half-carry) une retenue est générée entre les digits 3 et 4
I interruptions masquées. S'il est à zéro les interruptions sont autorisées. S'il est à un, elles ne sont pas autorisées sauf XIRQ.
X est utilisé pour désactivé la broche XIRQ. Après un reset X est à 1 par défaut et peut seulement être mis à zéro par une instrucion logicielle.
S (stop) autorise ou nonl'instruction STOP. Si le digit S est à un l'instruction STOP est traitée comme l'instruction NOP.
Les modes d'adressage
:
Six modes d'adressage
peuvent être utilisés pour référencer une mémoire
: immédiat, direct, étendu, indexé (avec le registre X
ou le registre Y), inhérent et relatif.
L'adressage immédiat :(IMM)
Dans le mode d'adressage immédiat, l'argument actuel est contenu
dans l'(es) octet(s) suivant immédiatement l'instruction dans laquelle
le nombre d'octet donne la taille du registre. Ces instructions ont deux, trois
ou quatre octets.
exemples :
LDAA #22 l'accumulateur A reçoit la valeur 22
NOMBRE EQU 59
LDAA #NOMBRE l'accumulateur A reçoit la valeur 59
L'adressage étendu :(extended EXT)
En mode d'adressage étendu, l'adresse effective de l'instruction
apparaît explicitement dans les deux octets suivant le code d'opération.
Les deux derniers octets de l'instruction contiennent l'adresse absolue de l'opérande.
exemple :
CMPA $1220 compare le contenu de l'accumulateur A avec de contenu de
la mémoire située à l'adresse $1220
L'adressage direct : (DIR)
En mode d'adressage étendu, l'adresse effective de l'instruction
apparaît explicitement dans l'octet suivant le code d'opération.
Le dernier octet de l'instruction contient l'adresse absolue de l'opérande.
Celui-ci se trouve donc entre les adresses mémoire $00 et $FF.
exemple :
STAB $02 écrit le contenu de l'accumulateur B dans la mémoire
située à l'adresse $02
L'adressage indexé : (INDX, INDY)
Dans le mode indexé, l'un des registres X ou Y est utilisé
dans le calcul de l'adresse effective. Dans ce cas l'adresse effective est
variable et dépend du contenu courrant du registre d'index X ou Y et
d'un octet qui représente le décalage (offset), décalage
non signé contenu dans l'instruction
exemple :
LDX $1000
STAB $04,X écrira la valeur de B à l'adresse $1004 (portB)
ou
PORTB EQU $04
STAB PORTB,X
Si le décalage est égal à zéro, il n'est pas
obligatoire de préciser celui-ci :
exemple :
LDX $1004
STAB ,X
L'adressage inhérent : (INH)
Dans certains cas, il n'est pas nécessaire de préciser une
adresse, les opérandes étant des registres du CPU.
exemples :
ABA additionner le contenu de l'accumulateur A à celui de l'accumulateur
B. Le résultat est dans A.
INCB -> B <= B + 1
INX -> X <= X + 1
L'adressage relatif :
Ce mode d'adressage est utilisé avec les opérations de branchement
(BRA, BNE, BLS ...). Il permet de se déplacer dans une autre partie de
la mémoire que celle utilisée pour l'instruction courante. Le
contenu du compteur PC est modifié en ajoutant la valeur du déplacement
+ deux. Le déplacement est un nombre binaire signé de l'intervalle
[-128, 127]. Le déplacement est donc limité à ces valeurs.