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

4/2.3.9 - Les mots-clés de l'assembleur Z80 et leur utilisation : Entrées/SortiesCoding Classeurs Weka
4/2 - Assembleur Z80 : Définitions et rappels de base

4/2.3 - Les mots-clés de l'assembleur Z80 et leur utilisation

IX. Entrées/Sorties

Ces instructions permettent d'envoyer un ou plusieurs octet(s) vers un périphérique pour les instructions du type OUT, et de recevoir un ou plusieurs octet(s) d'un périphérique pour les instructions du type IN.

L'adressage peut être direct, indirect sur registre 8 bits, indirect sur registre avec incrément/décrément ou indirect sur chaîne.

  • Adressages direct :

OUT (VAL8),A

Load OUTput port with Accumulator.

Envoie le contenu de l'accumulateur vers le périphérique d'adresse VAL8.
Indicateurs : non affectés.

LD A, 56H ;Donnée à émettre
OUT (12H),A ; Emission sur port d'adresse 12H

IN A,(VAL8)

Load Accumulator with INput port register.

Lit un octet sur le périphérique d'adresse VAL8.

Indicateurs : non affectés.

IN A,(12H) ; Lecture sur le port d'adresse 12H
;la donnée lue est dans A.

  • Adressage indirect sur registre 8 bits :

OUT(C),X

Load OUTput port (C) with register X.

Où X peut être A, B, C, D, E, H ou L.

Envoie le contenu du registre spécifié sur le port de sortie dont l'adresse est donnée dans C.

Indicateurs : non modifiés.

LD C,18H ; Adresse du port en sortie
LD B,5H ;Donnée à émettre
OUT (C),B ;Emission

IN X,(C)

Load register X with INput from port (C).

Où X peut être A, B, C, D, E, H ou L.

Lit un octet sur le périphérique d'adresse (C) et stocke la valeur lue dans le registre spécifie.

LD C,18H ; Adresse du port en entrée
IN (D),C ; Lecture sur le port d'adresse 18H
;La donnée est dans le registre D

  • Adressage indirect sur registre avec incrément/décrément :

OUTI

Envoie le contenu de la mémoire pointée par HL (C), décrémente B et incrémente HL.

Indicateurs : N = 1, V, S, H et C inchangés, Z modifié.

Par exemple, si nous voulons émettre 15 données situées en mémoire à partir de l'adresse 8000 H, sur le port d'adresse 14 H, il faudra faire :

1 ORG 9000H
2 LOAD 9000H
3 9000 0E14 LD C,14H ;@port sortie
4 9002 060F LD B,15 ;Nombre de données
5 9004 210080 LD HL,8000H ;@debut données
6 BOUCLE: EQU $
7 9007 EDA3 ; OUTI ;Sortie d'1 donnée
8 9009 20FC ; JR NZ.BOUCLE
9 END

OUTD

OUTput and Décrément.

Envoie le contenu de la mémoire pointée par HL sur le port dont l'adresse est définie par (C), décrémente B et décrémente HL.

Indicateurs : N = 1, V, S, H et C inchangés, 2 modifié.

Par exemple, si nous voulons émettre 15 données situées en mémoire (la dernière étant en 800FH} sur le port d'adresse 14H, il faudra faire :

1 ORG 9000H
2 LOAD 9000H
3 9000 0E14 LD C.14H ;@port sortie
4 9002 060F LD B,15 ; Nombre de données
5 9004 210F80 LD HL,800FH ;@derniere donnée
6 BOUCLE: EQU $
7 9007 EDAB OUTD ;Emission
8 9009 20FC JR NZ,BOUCLE
9 END

INI

INput and Incrément.

Charge la mémoire pointée par HL par la valeur lue sur le port en entrée : d'adresse (C), décrémente B et incrémente HL ...

Indicateurs : N= 1, V, S, H et C inchangés, Z modifié.

Par exemple, si nous voulons lire quelques données et les stocker en mémoire, à partir de l'adresse 8000H sur un port d'entrée d'adresse 14H, il faudra faire :

1 ORG 9000H
2 LOAD 9000H
3 9000 0E14 LD C,14H ;@port entrée
4 9002 060F LD B,15 ; Nombre de données
5 9004 210080 LD HL,8000H ;@1er données
6 BOUCLE: EQU $
7 9007 EDA2 INI ;Lecture
8 9009 20FC JR NZ,BOUCLE
9 END

IND

INput and Décrément.

Charge la mémoire pointée par HL par la valeur lue sur le port en entrée d'adresse (C), décrémente B et décrémente HL.

Indicateurs : N= 1, V, S, H et C inchangés, Z modifié.

Par exemple, si nous voulons lire 15 données et les stocker en mémoire, la dernière en 800FH, la première en 8000H sur un port d'entrée d'adresse 14H, il faudra faire :

1 ORG 9000H
2 LOAD 9000H
3 9000 OE14 LD C,14H ;@port entrée
4 9002 060F LD B,15 ; Nombre de données
5 9004 210F80 LD HL,800FH ;@dernière donnée
6 BOUCLE: EQU $
7 9007 EDAA IND ;Lecture
8 9009 20FC JR NZ,BOUCLE
9 END

  • Adressage indirect sur chaîne :

OTIR

OuTput, Incrément and Repeat.

Envoie le contenu de la mémoire pointée par HL sur le port dont l'adresse est définie par (C), décrémente B, incrémente HL et répète ces actions jusqu'à ce que B soit nul.

Indicateurs : N = 1, Z= 1, V, S, H et C inchangés.

Si nous reprenons l'exemple donné pour l'ordre OUTI, nous pouvons utiliser l'ordre OTIR de la façon suivante

1 ORG 9000H
2 LOAD 9000H
3 9000 0E14 LD C,14H ;@port sortie
4 9002 060F LD B,15 ;Nombre de données
5 9004 210080 LD HL,8000H ;@1er donnée
6 9007 EDB3 ;OTIR Emission
7 END

OTDR

Envoie le contenu de la mémoire pointée par HL sur le port dont l'adresse est définie par (C), décrémente B, décrémente HL et répète ces actions jusqu'à ce que B soit nul.

Indicateurs : N= 1, Z= 1, V, S, H et C inchangés.

Si nous reprenons l'exemple donné pour l'ordre OUTD, nous pouvons utiliser l'ordre OTDR de la façon suivante :

1 ORG 9000H
2 LOAD 9000H
3 9000 0E14 LD C,14H ;@port sortie
4 9002 060F LD B,15 ;Nombre de données
5 9004 210F80 LD HL,800FH ;@derniere donnée
6 9007 EDBB OTDR ; émission
7 END

INIR

INput, Incrément and Repeat.

Lit le port en entrée d'adresse (C) et stocke la valeur lue à l'adresse pointée par HL.

Décrémente N et incrémente HL. Répète ces opérations jusqu'à ce que B soit nul.

Indicateurs : N = 1, Z = 1, V, S, H et C inchangés.

Si nous reprenons ['exemple donné par l'ordre INI, nous pouvons utiliser l'ordre INIR, de la façon suivante :

1 ORG 9000H
2 LOAD 9000H
3 9000 0E14 LD C,14H ;@port entrée
4 9002 060F LD B,15 ; Nombre de données
5 9004 210080 LD HL,8000H ;@1er donnée
6 9007 EDB2 INIR ; Lecture
7 END

INDR

INput, Décrément and Repeat.

Lit le port en entrée d'adresse (C) et stocke la valeur lue à l'adresse pointée par HL.

Décrémente B et décrémente HL. Répète ces opérations jusqu'à ce que B soit nul.

Indicateurs : N= 1, Z= 1, V, S, H et C inchangés.

Si nous reprenons l'exemple donné pour l'ordre IND, nous pouvons utiliser l'ordre INDR de la façon suivante :

1 ORG 90O0H
2 LOAD 9000H ;
3 9000 0E14 LD C,14H ;@port entrée
4 9002 060F LD B,15 ;Nombre de données
5 9004 210F80 LD HL,800FH ;@derniere donnée
6 9007 EDBA INDR ; Lecture
7 END

Page précédente : 4/2.3.8 - Les mots-clés de l'assembleur Z80 et leur utilisation : Opérations sur la pile
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop
Page créée en 022 millisecondes et consultée 1719 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.