Revenir au plan du site


Les registres


Le Z80 contient 13 registres 16 bits dont la plupart sont accessibles directement en 8 bits :
AF, BC, DE, HL, IX, IY, SP, PC, IR ainsi qu'un jeu secondaire de registres généraux AF', BC', DE', HL'.
À part SP (stack pointer ou pointeur de pile), PC (program counter ou pointeur d'instruction courante), tous les registres sont accessibles en 8 bits, que ce soit le poids fort (bits 8 à 15) ou le poids faible (bits 0 à 7). Généralités
Pour adresser les 8 bits de poids fort ou de poids faible, on utilise directement les lettre A,B,C,D,E,H,L,I ou R Ainsi, BC=B*256+C, DE=D*256+E, etc.

Les registres IX et IY n'ont pas de convention de nommage officielle. Les assembleurs utilisent différentes notations (voir toutes) comme XL,LX,IXL,LIX (pour IX low, de poids faible) et XH,HX,IXH,HIX pour le poids fort du registre IX.

On peut noter aussi qu'il n'existe pas d'instruction pour lire le registre F, les flags s'utilisent! On peut l'écrire de façon détournée avec un POP AF (écrire la valeur dans la pile et récupérer les flags de la pile).

Les registres alternatifs ne sont pas accessible directement, il faut passer d'une page de registres à l'autre grâce aux instructions EX AF,AF' pour échanger AF par AF', et EXX pour l'échange des registres BC, DE, HL. Ceci permet d'utiliser deux contextes (cette méthode étant plus rapide qu'une sauvegarde dans la pile) ou virtuellement plus de registres pour un seul programme.

En règles générales on utilise surtout A,BC,DE,HL en programmation car très peu d'opérations sont possibles sur les autres registres et aussi parce que les instructions les utilisant sont plus rapides.

Registre AF

Registre A
Le registre A est l'accumulateur 8 bits. Il sert à toutes les opérations de calcul 8 bits (additions, soustractions) et bénéficie d'instructions spécifiques plus rapide que celles communes aux autres registres voir d'instructions exclusives qui n'existent que pour le registre A.

Registre F
Le registre F est un registre d'état ou registre flags (drapeaux). Les flags sont les témoins de résultats de certaines instructions.

7 6 5 4 3 2 1 0
S Z y H x V N C


conditionétat des flags
CC=1
NCC=0
ZZ=1
NZZ=0
MS=1
PS=0
PEP/V=1
POP/V=0

Registre BC


Ainsi, le LDIR est un équivalent plus rapide que
boucle : LDI : JP PE,boucle
Registre B
Le registre B est utilisé comme compteur 8 bits avec l'instruction de bouclage DJNZ (saute si non zéro). Il sera décrémenté à chaque itération sans modifier les flags.

Registre C
Le registre C est conçu pour être utilisé comme le registre d'adresse du port d'entrée/sortie (instructions IN,OUT et dérivées). C'est le cas de presque toutes les machines à base de Z80, sauf l'Amstrad CPC tel qu'évoqué dans l'introduction, pour des raisons économiques de design.

Registre DE

Le registre DE est utilisé comme adresse (DE)stination par les instructions de répétition (copie exclusivement).

Registre HL

HL peut-être considéré comme l'accumulateur 16 bits. C'est le registre de référence pour les opérations d'addition 16 bits et de soustraction.

C'est aussi le registre principal d'adressage. Il peut s'utiliser avec presque tous les registres et dispose d'instructions plus rapides pour sa sauvegarde/lecture en mémoire.

Enfin, le registre HL est le registre d'adresse source unique pour les opérations groupées telles que LDIR, LDDR, OTIR, OTDR, CPIR, CPDR et leurs variantes non (R)épétitives.

Registres IX et IY

IX et IY sont des registres spécialisés dans l'indexage mais on peut les utiliser comme les autres, à un détail près que leur utilisation est plus coûteuse en temps machine. Leur utilisation en tant que registre d'index est systématiquement associée à un déplacement relatif 8 bits signés (valeur de -127 à +128).

Registre PC

PC (program counter) est l'adresse de l'instruction en cours d'exécution.

Registre SP

SP (stack pointer) est l'adresse du haut de la pile de donnée et d'appels dans la RAM.

Registre I

I est un registre qui sert à définir l'adresse de la table des vecteurs d'interruption quand le Z80 est en mode 2. Le fonctionnement des interruptions vectorisées étant assez spécifique au design d'intégration du Z80 et au matériel connecté à celui-ci, ce chapitre ne sera pas évoqué. Quand le Z80 n'est pas en mode 2, on peut très bien utiliser le registre I comme un registre de sauvegarde. Les instructions le concernant sont limités: Copier A dans I et copier I dans A avec l'instruction LD.

Registre R

R est le registre de rafraichissement mémoire. Il est incrémenté de 1 ou 2 unités en fonction de l'instruction lue par le processeur.