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, B et D

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.

Haut de page

Les registres d'index X et Y

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

LDX #$1000
LDAA #$E7
STAA $04,X

ou encore comme nous le ferons souvent

PORTB EQU $04
REGIST EQU $1000
..........
ORG $0000 le programme commence à l'adresse $00

LDX #REGIST
LDAA #$E7
STAA PORTB,X
........

Haut de page

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.

Haut de page

Le compteur programme PC :

Comme il est dit plus haut, le PC contient l'adresse de la prochaine instruction à effectuer.

Haut de page

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.

Haut de pagepage

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.

Haut de pagepag

Retour sommaire