CODINGCLASSEURS WEKA ★ Comment exploiterr 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 :

OUTfCI.X

Load OUTput port (C) with register X. J

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      i. ;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          . -J8Q          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                      U*B           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            3 ùnn          L0AD 9Q00H

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           C14H                    ;@port entrée

4 9002 060F                 LD           B,15                      ; Nombre de données

5  9004 210080            LD           HL8000H             ;@1r' donnée

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 :

V...

1                                      ORG 9000H ?

2                  . gj         LOAD 9000H

3  9000 OEM                 LD           C.14H                    ;@port entrée

..îJ

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
AMSTRAD CPC | CODING : BOOK - Les classeurs Weka 4239 | http://cpcrulez.fr AMSTRAD CPC | CODING : BOOK - Les classeurs Weka 4239 | http://cpcrulez.fr

• Adressage indirect sur chaîne :

OTIR

OuTput, Incrément and Repeat.           ;         f

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 uti-
liser l'ordre OTIR de la façon suivante

:CX>@ 2'?' Q-1LOAD9000Ht *$*, ?

3  9000 0E14 CU      LD           C,14H           ;@port sortie

4  9002 060F 0J       LD           B,15             ;Nombre de données

5  9004 210080         LD           HL,8000H     ;@1" 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 :

1Hôooe zm 0RG9000H         ; *–

2       'e':'         LOAD 9000H             J ?

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

mm

INput, Incrément and Repeat.          -.-,-,

Lit le port en entrée d'adresse 1C) 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 utili-
ser l'ordre INIR, de la façon suivante :

1                                  ORG 9000H

2                                  LOAD 90O0H

3  9000 0E14             LD           C.14H           ;@port entrée

4  9002 060F              LD .;     B,15             ; Nombre de données

5  9004 210080         LD *??   HL,80O0H    ;@V 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 uti-
liser l'ordre INDR de la façon suivante :

1                               ORG 90O0H

2      

..-,e                  LOAD 9000H            j

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

CPCrulez[Content Management System] v8.75-desktop/cache
Page créée en 087 millisecondes et consultée 854 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.