CODINGCLASSEURS WEKA ★ Comment exploiter toutes les ressources et augmenter les performances de votre AMSTRAD CPC ★

4/2.2 - Les modes d'adressageCoding Classeurs Weka

4/2 - Assembleur Z80 : Définitions et rappels de base

4/2.2 - Les modes d'adressage

Le Z80 est un microprocesseur 8 bits capable de faire des opérations logiques et arithmétiques sur 8 ou 16 bits avec ses registres internes, ou avec une mémoire de taille maximum 64 kilo-octets.
Les registres sont des mémoires de 8 ou 16 bits internes au microprocesseur. Ils sont identifiés par une lettre s'ils font 8 bits et par deux lettres s'ils font 16 bits. On les appelle alors registres pairs.

Les registres disponibles portent les noms suivants :

A, F, B, C, (ou BC), D, E, (ou DE), H, L, (ou HL), IX, IY, SP, I, R pour les registres primaires,
A', F', BC, DE' et HL' pour les registres secondaires.

Le registre A ou « Accumulateur » est celui qui est le plus souvent utilisé, et son accès est généralement plus rapide que celui à un autre registre. Les opérations arithmétiques, logiques et comparaisons font souvent appel à lui.

Le registre F contient les indicateurs (flags) qui donnent des renseignements sur la dernière opération effectuée.

BIT 0 : C = Carry (retenue)
Positionné par les opérations arithmétiques, décalages, comparaisons et les instructions SCF et CCF.
Les opérations logiques AND, OR et XOR le mettent à 0.

BIT 1 : N = Négative (négatif)
Ce bit est à 1 si l'opération précédente était une soustraction ou une décrémentation.

BIT 2 : P/V = Parity/Overflow (parité/débordement)
Ce bit joue un double rôle en fonction du type d'instruction utilisée :

P est positionné par les instructions logiques :
–   il vaut 1 si le nombre de bits à 1 de A est pair,
–   il vaut 0 si le nombre de bits à 1 de A est impair, V est positionné par les instructions arithmétiques :
–   il vaut 1 si un débordement s'est produit.

BIT 4 : H = Half-Carry (demi-retenue)
Utilisé par l'instruction d'ajustement décimal DAA.
Reportez-vous à cette instruction pour avoir plus de détails.
H = 1 signale qu'une retenue s'est produite sur le LSQ (Last Significative Quartet = quartet de poids faible) du registre A.

BIT 6 : 2 = Zéro
Positionné par toutes les instructions qui peuvent produire un résultat nul (AND, BIT, CP, DEC, etc.)
Positionné à 1 par les instructions INDR, INIR, OTDR et OTIR.

BIT 7 : S = Signe
Donne le signe de la valeur testée.
Positionné par les opérations logiques, arithmétiques, rotations et décalages.

Si S- 1, la valeur est négative (bit 7 à 1 pour les valeurs sur 8 bits et bit 15 à 1 pour les valeurs sur 16 bits).

Si S = 0, la valeur est positive (bit 7 à 0 pour les valeurs sur 8 bits et bit 15 à 0 pour les valeurs sur 16 bits).

Le registre B peut être associé au registre C pour former le registre pair BC. Mais il est manipulé comme registre 8 bits par les instructions du type :
–   Faire une action, décrémenter B, et répéter l'action tant que B n'est pas nul, comme DJNZ, par exemple.

Les registres C, D, E, H et L peuvent être utilisés sous forme de registres pairs BC, DE et HL. Ils permettent de faire des opérations sur 8 ou 16 bits avec ou sans retenue.

Les registres IX et IY sont des registres 16 bits. Ils peuvent être utilisés comme les registres pairs BC, DE ou HL, mais sont obligatoires dans certains modes d'adressages indexés.

Le registre SP (Stack Pointer ou pointeur de pile) donne l'adresse de l'élément mémoire le plus extérieur à la pile.

Le registre I (ou IFF) donne le poids fort de l'adresse où va se débrancher le programme en cas d'interruption.

Le registre R donne l'adresse de rafraîchissement dynamique des blocs de mémoire RAM. Nous n'en parlerons pas dans ce manuel, car il est quasiment inutilisé en programmation.

Modes d'adressage

Le terme « mode d'adressage » désigne la façon qui va être utilisée par le microprocesseur pour accéder à une information.

Le Z80 possède 7 modes d'adressage :

Immédiat, registre, indirect sur registre, direct, relatif, indirect indexé et bit.

Examinons en détails chacun de ces modes :

*   Adressage immédiat

La valeur se trouve dans l'instruction.
Exemple :   LD A,10H
       ou      OR 45H

*   Adressage registre
Les opérations se font entre registres internes sans impliquer la mémoire.
Exemple :  LD A,C ou    CP B

*  Adressage indirect sur registre
Le registre pair spécifié pointe sur une mémoire et l'opération est faite sur cette mémoire.
Exemple :  LD A,(HL)
       ou    OR (HL)

 

*   Adressage direct
Une adresse mémoire spécifiée dans l'instruction pointe sur la donnée qui sera manipulée.
Exemple :   LD A,(5555H)
        ou     LD SP,(3227H)

 

*   Adressage relatif
Concerne les instructions de saut du type JR.
Quand l'adresse à laquelle doit s'effectuer le débranchement est assez proche (entre + 127 et - 128 octets) de l'adresse courante, ces instructions peuvent être employées pour « économiser » un octet en codage. En effet, une instruction JP est codée sur 3 octets, alors que l'instruction JR équivalente est codée sur 2 octets.
 


Remarque :
L'utilisation d'un ordre JR pour accéder à un label situé hors des limites permises (entre (+127 et -128 octets) produira une erreur lors de l'assemblage du programme.

*   Adressage indirect indexé
Accès à une information d'adresse IX + déplacement ou IY+déplacement
de la forme LD      A, (IX + depl)
  ou          AND   (IX + depl)
 

*  Adressage bit Positionnement ou test d'un bit :
Les instructions « BIT » testent un bit,
les instructions « SET » mettent un bit à 1,
et les instructions « RES » mettent un bit à 0.
 

Page précédente : 4/2.1 - Pourquoi utiliser l'assembleur et dans quels domaines

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 066 millisecondes et consultée 914 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.