Tutorial 19
Utilisation des registres (Partie 2)

Survol
    Ce tutorial couvrira les utilisations plus complexes de l'instruction ld.

Ld, ld, ld!
    Des utilisation plus complexes de ld impliquent le déplacement de données entre la mémoire et les registres. Comme vous le savez, la mémoire est accessible au moyenb d'adresses. L'instruction ld est utilisée pour charger des données d'un registre vers un emplacement de la mémoire spécifié par une adresse. Cette adresse peut être une valeur brute:

ld a, ($80DF)

    Cela chargera la valeur enregistrée en mémoire à l'emplacement $80DF et la placera dans le registre a. Les parenthèses placées autour d'un nombre indiquent qu'il est utilisé comme une adresse et non pas comme une valeur.

    Dans l'exemple précédent, charger un registre à partir de la mémoire en utilisant une adresse spécifique, nous devions utiliser le registre A. Cela signifie que nous ne pouvons pas charger un autre registre directement à partir de la mémoire. Pour charger un autre registre, on doit charger à partir de la mémoire dans le registre A, et ensuite de A dans le registre désiré:

ld a, ($80DF)
ld c, a

    On peut aussi charger deux octets de données en mémoire à la fois:

ld bc, ($80D3)

    Cette ligne charge deux octets de données provenant de ($80D3) dans la paire de registres bc. En fait, elle charge à partir de deux emplacements mémoire - ($80D3) dans b et ($80D4) dans c. Lorsque vous chargez une paire comme celle-là, on peut utiliser n'importe quelle paire. Une autre méthode utilise la paire de registres hl pour retenir l'adresse pour nous:

ld hl, $80DF
ld a, (hl)

    Le premier ld charge une valeur dans hl. Le second utilise la valeur dans hl comme une adresse, et charge les données situées à cette adresse dans a. On constate exactement le même effet que l'exemple avec ld précédent. Remarquez que $80DF ne comporte pas de parenthèses autour de lui. Dans le premier ld, $80DF est seulement une valeur, pas une adresse. Seul le second ld est une adresse, c'est pourquoi nous avons mis des parenthèses autour de hl pour indiquer que sa valeur est une adresse. Nous pouvons transférer des données de la mémoire vers n'importe quel registre, mais nous ne pouvons pas charger ces données vers une paire de registres ou utiliser n'importe quel autre registre excepté hl  pour enregistrer l'adresse.

    Maintenant renvoyons les données des registres vers la mémoire. La manière la plus simple de le faire est d'utiliser une valeur immédiate pour l'adresse:

ld ($80DF), a

    Cette ligne charge la valeur du registre A à l'emplacement mémoire $80DF. Lorsque vous déplacez des données des registres vers la mémoire de cette façon, nous ne pouvons utiliser que le registre A. En d'autres mots, nous ne pouvons pas charger le registre C ou n'importe quel autre directement en mémoire - nous devons charger el contenu du registre dans A et ensuite de A vers la mémoire.

    Nous pouvons aussi enregistrer une paire de registres dans deux emplacements mémoire:

ld ($80DF), bc

    Encore une fois, cette ligne charge dans deux emplacements mémoires différents. Ici, nous pouvons utiliser n'importe quelle paire de registres.

    Comme au-dessus, nous pouvons utiliser une paire de registres pour garder l'adresse que nous utilisons:

ld (hl), 123

    On charge la valeur 123 dans un emplacement mémoire dont l'adresse est stockée dans HL. Nous ne pouvons utiliser que HL pour cette opération.

ld (hl),a
ld (hl),e
ld (bc),a

    Voici trois exemples de transfert de données d'un registre vers un emplacement mémoire dont l'adresse n'est pas immédiate. On peut utiliser HL pour enregistrer l'adresse et charger à partir de n'importe quel registre, ou nous pouvons utiliser n'importe quelle paire de registres et charger à partir de A. On en peut pas faire les deux, comme:

ld (bc),d ; On ne peut pas faire ça

    Vous devez utiliser soit hl pour l'adresse ou a pour les données.

Conclusion
    C'est tout ce que vous devez savoir à propos des registres pour le moment. D'autres tutoriaux seront écrits plus tard au besoin. Si vous avez d'autres questions, mailez-moi.

Tutorial 20

    Cliquez pour revenir au menu du site... ou ici pour retourner au menu du tutorial.