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

4/2.3.6 - Les mots-clés de l'assembleur Z80 et leur utilisation : Opérations logiquesCoding 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

VI. Opérations logiques

A. OPÉRATIONS LOGIQUES ÉLÉMENTAIRES

AND

ET logique sur l'accumulateur.

L'adressage peut être immédiat, registre 8 bits, indirect, ou indirect indexé.

La table de vérité de AND au niveau bit est la suivante :

Cette logique est appliquée entre chaque bit de même rang de l'accu-
mulateur et de l'argument fourni.

Remarque :

Pour l'instruction AND, sauf indication contraire, les indicateurs sont modi-
fiés de la façon suivante :

C = 0, N = 0, H = 1, Z, P, et S affectés selon le résultat du AND.

• Adressage immédiat V

AND VAL8

ET logique entre l'acccumulateur et VAL8.
Le résultat est dans A.

• Adressage registre 8 bits :
AND X

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

ET logique entre l'accumulateur et le registre spécifié.

Le résultat est dans A.

• Adressage indirect :

AND (HL)

ET logique entre l'accumulateur et l'octet pointé par HL.

Le résultat est dans A.

• Adressage indirect indexé :

AND (IX+ d)
AND (IY + d)

ET logique entre l'accumulateur et l'octet pointé par IX + d ou lY + d.

d est un déplacement dont la valeur est comprise entre - 127 et 127.

Le résultat est dans A.

OR

OU logique sur l'accumulateur.

L'adressage peut être immédiat, registre 8 bits, indirect, ou indirect indexé.

La table de vérité de OR au niveau bit est la suivante :

Cette logique est appliquée entre chaque bit de même rang de l'accu-
mulateur et de l'argument fourni.

Remarque :

Pour l'instruction OR, sauf indication contraire, les indicateurs sont modi-
fiés de la façon suivante :

C - 0, N - 0, H = 0, 2, P et S affectés selon le résultat du OR.

• Adressage immédiat :

OR VAL8

OU logique entre l'accumulateur et VAL8.
Le résultat est dans A.

• Adressage registre 8 bits :

OR X

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

OU logique entre l'accumulateur et le registre spécifié.

Le résultat est dans A.

• Adressage indirect :

OR (HL)

OU logique entre l'accumulateur et l'octet pointé par HL.

Le résultat est dans A.

• Adressage indirect indexé :

OR (IX+ d)
OR (lY + d)

OU logique entre l'accumulateur et l'octet pointé par IX + d ou !Y+d.

d est un déplacement dont la valeur est comprise entre - 127 et 127.
Le résultat est dans A.

XOR

OU EXCLUSIF sur l'accumulateur.

L'adressage peut être immédiat, registre 8 bits, indirect, ou indirect indexé.
La table de vérité de XOR au niveau bit est la suivante :

Remarques :

a) Si a et b sont des^/ariables binaires, on a :

a XOR b - a b + a b,

c'est-à-dire que a XOR b = 1 sia = 0etb=1

ou si a = 1 et b = 0.
Cette logique est appliquée entre chaque bit de même rang de l'accu-
mulateur et de l'argument fourni.

b) Pour l'instruction XOR, sauf indication contraire, les indicateurs sont
modifiés de la façon suivante :
C = 0, N = 0, H = 0, Z, P et S affectés selon le résultat du XOR.

• Adressage immédiat :

XOR VAL8

OU EXCLUSIF entre l'accumulateur et VAL8.
Le résultat est dans A.

• Adressage registre 8 bits :

XOR X

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

OU EXCLUSIF entre l'accumulateur et le registre spécifié.
Le résultat est dans A.

• Adressage indirect :

XOR (HL)

OU EXCLUSIF entre l'accumulateur et l'octet pointé par HL.

Le résultat est dans A.

• Adressage indirect indexé :

XOR(IX+d)
XOR (IY+d)

OU EXCLUSIF entre l'accumulateur et l'octet pointé par IX + d ou IY + d.
d est un déplacement dont la valeur est comprise entre - 127 et 127.
Le résultat est dans A.

CPL

Complément Accumulator : Complément à 1 de A.
L'adressage est implicite sur A

NEG

Negate Accumulator : Complément à 2 de A.

L'adressage est implicite sur A.

B.  COMPARAISONS ET TESTS

Comparaison de l'accumulateur à une valeur exprimée sur 8 bits.

L'adressage peut être immédiat, registre 8 bits, indirect 8 bits ou indirect indexé 8 bits.
Indicateurs : N= 1, C, 2, V, S et H modifiés.

Adressage immédiat :

CP VAL8

Compare l'accumulateur et VAL8 sans modifier l'accumulateur.

• Adressage registre 8 bits :

CP X

où X peut Ôtre A, B, C, D, E, H oa t.

Compare l'accumulateur et le registre indiqué sans modifier l'accumu-
lateur.

• Adressage indirect :

CP (HL)

Compare l'accumulateur et l'octet pointé par HL sans modifier l'accumulateur.

• Adressage indirect indexé :

CP(IX + d)
CP(IY

+ d)

Compare l'accumulateur et l'octet pointé par IX + d ou IY+d sans modifier l'accumulateur.

d est un déplacement dont la valeur doit être comprise entre -127 et 127.

CPI

ComPare and Incrément

Compare le contenu de HL et l'accumulateur.

Positionne le registre Z en conséquence (Z=1 si (HL) = A et Z = 0 si (HL)<>A). Incrémente HL et décrémente BC. Si BC = 0, l'indicateur
P/V = 0.

P/V= 1 pour les autres valeurs de BC.

Supposons que BC = 10 H
                 ;   ;HL = 3020H
                  ;  (HL) = F1H
                  ;  et A = F1H

Les instructions  LD A,F1H
                     ;  CPI

produiront l'effet suivant :

Z = 1 car (HL) = A

HL = 3021H, BC = 0FH

CPD

ComPare and Décrément

Compare le contenu de HL et l'accumulateur.

Positionne le registre Z en conséquence (Z=1 si (HL) = A et Z = 0 si
IHLloA). Décrémente HL et décrémente BC. Si BC = 0, l'indicateur
P/V = 0. P/V=1 pour les autres valeurs de BC.

Supposons que BC = 10 H
HL = 3020H
(HL) = F1H
et A = 10H

les instructions LD A, 10 H
CPD

produiront l'effet suivant :

Z = 0 car (HL) * A

HL = 301F H et BC = 0 FH

Application Amstrad CPC:

Recherche d'un octet dans une zone mémoire, à partir de &7000, et sur
une longueur de 40 octets.

1                     ; ORG 9000H
2                     ; LOAD 9000H
3  9000 013200         ;LD BC,50
4  9003 210050         ;LD HL,5000H             ; ;@de départ
5  9006 3E12           ;LD A,12H               ;  ;octet recherche
6             ;BOU:     EQU $
7  9008 EDA1           ;CPI
8  900A 2803           ;JR Z,TROUVE ;z=-1~.oct trouve
9  900C EA0890         ;JP PE.BOU ;P/V=1-»BC<>0
10           ; TROUVE:  EQU $
11             ;  ;a ce niveau, si Z= 1, HL = @ +1
12             ;  ;de l'octet recherche
13             ;  ;si Z = 0, l'octet n'est pas trouve
14                 ;   ;END

C. ROTATIONS ET DÉCALAGES

On distingue les décalages :
–   circulaires à gauche et à droite ;
–   circulaires à gauche et à droite à travers le bit de retenue ;
–  arithmétiques à gauche et à droite;"
–   logiques à droite ;
–   circulaires en binaire codé décimal à gauche et à droite.

1) Décatages circulaires :

L'adressage peut être registre 8 bits, indirect ou indirect indexé.

• Adressage registre 8 bits :

RLC X

Rotate Left Circular : Rotation circulaire à gauche où X peut être A, B,
C, D, E, H ou L.

Les bits du registre concerné sont décalés vers la gauche selon le dessin
ci-dessous :

Les indicateurs H et N sont à 0, S, Z, C et P sont modifiés.

RRC X

Rotate Right Circular : Rotation circulaire à droite où X peut être A, B,

C, D, E, H ou L.

Les bits du registre concerné sont décalés vers la droite selon le dessin
ci-dessous :

Les indicateurs H et N sont à 0, S, Z, C et P sont modifiés.

RLCA

Rotate Left Circular Accumulator : Rotation circulaire à gauche de l'accumulateur.
Les bits du registre A sont décalés vers la gauche comme pour RLC A. Les indicateurs H et N sont à 0 ; S, Z et P sont inchangés et C est modifié.

RRCA

Rotate Right Circular Accumulator : Rotation circulaire à droite de l'accumulateur.
Les bits du registre A sont décalés vers la droite comme pour RRC A. Les indicateurs H et N sont à 0 ; S, Z et P sont inchangés et C est modifié.

• Adressage indirect :

RLC (HL)

Rotate Left Circular : Rotation circulaire à gauche de la mémoire pointée par HL comme pour RLC A. Les indicateurs H et N sont à 0 ; S, Z, C et P sont modifiés

RRC (HL)

Rotate Right Circular : Rotation circulaire à droite de la mémoire pointée par HL comme pour RRC A.

Les indicateurs H et N sont à 0 ; S, Z, C et P sont modifiés.

• Adressage indirect indexé :

RLC (IX+ d)

Rotate Left Circular : Rotation circulaire à gauche de la mémoire pointée par IX+ d comme pour RLC A.
d est un déplacement compris entre -127 et 127.
Les indicateurs H et N sont à 0 ; S, 2, C et P sont modifiés.

RRC (IX+ d)

Rotate Right Circular : Rotation circulaire à droite de la mémoire pointée par IX+ d comme pour RRC A.

d est un déplacement compris entre -127 et 127.

Les indicateurs H et N sont à 0 ; S, Z, C et P sont modifiés.

2) Décalages circulaires à travers le bit de retenue :

L'adressage peut être registre 8 bits, indirect ou indirect indexé.

• Adressage registre 8 bits :

RL X

Rotate Left : Rotation circulaire à gauche à travers le bit de retenue.

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

Les bits du registre concerné sont décalés vers la gauche selon le dessin ci-dessous.

Les indicateurs H et N sont à 0 ; S, Z, C et P sont modifiés.

RR X

Rotate Right : Rotation circulaire à droite à travers le bit de retenue.

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

Les bits du registre concerné sont décalés vers la droite selon le dessin ci-dessous.

Les indicateurs H et N sont à 0 ; S, 2, C et P sont modifiés.

RLA

Rotate Left Accumulator : Rotation circulaire à gauche de l'accumula-
teur à travers le bit de retenue.

Les bits du registre A sont décalés vers la gauche comme pour RL A.

Les indicateurs H et N sont à 0 ; S, Z et P sont inchangés et C est modifié.

RRA

Rotate Right Accumulator : Rotation circulaire à droite de l'accumula-
teur à travers le bit de retenue.

Les bits du registre A sont décalés vers la droite comme pour RR A.

Le indicateurs H et N sont à 0 ; S, Z et P sont inchangés et C est modifié.

• Adressage indirect :

RL (HL)

Rotate Left : Rotation circulaire à gauche de la mémoire pointée par HL comme pour RL A.

Les indicateurs H et N sont à 0 ; S, Z, C et P sont modifiés.

RR (HL)

Rotate Right : Rotation circulaire à droite de la mémoire pointée par HL comme pour RR A.

Les indicateurs H et N sont à 0 ; S, Z, C et P sont modifiés.

RL (IX+d)

Rotate Left : Rotation circulaire à gauche de la mémoire pointée par IX+d
comme pour RL A.

d est un déplacement compris entre - 127 et 127.

Les indicateurs H et N sont à 0 ; S, Z, C et P sont modifiés.

RR (IX + d)

Rotate Right : Rotation circulaire à droite de la mémoire pointée par IX + d comme pour RR A.

d est un déplacement compris entre - 127 et 127.

Les indicateurs H et N sont à 0 ; S, Z, C et P sont modifiés.

3) Décalages arithmétiques :

L'adressage peut être registre 8 bits, indirect ou indirect indexé.

• Adressage registre 8 bits :

SLA X

Shift Left Arithmetic : Décalage arithmétique à gauche, où X peut être
A, B, C, D, E, H ou L

Les bits du registre concerné sont décalés vers la gauche selon le dessin ci-dessous.

Les indicateurs H et N sont à 0 ; S, Z, C et P sont modifiés.

SRA X

Shift Right Arithmetic : Décalage arithmétique à droite
Où X peut être A, B, C, D, E, H ou L.

Les bits du registre concerné sont décalés vers la droite selon le dessin ci-dessous.

Les indicateurs H et N sont à 0 ; S, 2, C et P sont modifiés.

• Adressage indirect :

SLA (HL)

Shift Left Arithmetic : Décalage arithmétique à gauche de la mémoire pointée par HL comme pour SLA A.

Les indicateurs H et N sont à 0 ; S, Z, C et P sont modifiés.

SRA (HL)

Shift Right Arithmetic : Décalage arithmétique à droite de la mémoire pointée par HL comme pour SLA A.

Les indicateurs H et N sont à 0 ; S, 2, C et P sont modifiés.

• Adressage indirect indexé :

SLA(IX

+ d)

Shift Left Arithmetic : Décalage arithmétique à gauche de la mémoire pointée par IX+ d comme pour SLA A.

d est un déplacement compris entre -127 et 127.

Les indicateurs H et N sont à 0 ; S, Z, C et P sont modifiés.

SRA (IX+ d)

Shift Right Arithmetic : Décalage arithmétique à droite de la mémoire

pointée par IX + d comme pour SLA A.

d est un déplacement compris entre -127 et 127.

Les indicateurs H et N sont à 0 ; S, Z, C et P sont modifiés.

4) Décalages logiques à droite :

L'adressage peut être registre 8 bits, indirect ou indirect indexé.

• Adressage registre 8 btts

SRL X

Shift Right Logical : Décalage logique à droite,

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

Les bits du registre concerné sont décalés vers la droite selon le dessin ci-dessous.

Les indicateurs H et N sont à 0 ; S, Z, C et P sont modifiés.

• Adressage indirect :

SRL (HL)

Shift Right Logical : Décalage logique à droite de la mémoire pointée par HL comme pour SRL A.

Les indicateurs H et N sont à 0 ; S, Z, C et P sont modifiés.

• Adressage indirect indexé :

SRL (IX+ d)

Shift Right Logical : Décalage logique à droite de la mémoire pointée par IX + d comme pour SRL A.

d est un déplacement compris entre -127 et 127.

Les indicateurs H et N sont à 0 ; S, Z, C et P sont modifiés.

5) Décalages circulaires en binaire codé décimal :

• Adressage indirect sur 8 bits :

RLD

Rotate Left Digit : Rotation SCD à gauctie entre l'accumulateur et l'octet pointé par HL selon le dessin page suivante.

1             ; ORG      9000H
2             ; LOAD     9000H
3  9000 210080 LD       HL,8000H
4  9003 3612   LD       (HL),12H         ;; premier argument
5  9005 3E56   LD       A,56H           ;; 2e argument
6  9007 ED6F   RLD
7             ; ;a ce niveau A =51H
8             ; ;           ; HL=26H
9             ; END

RRD

Rotate Right Digit : Rotation BCD à droite entre l'accumulateur et l'octet pointé par HL selon le dessin ci-dessous :

Exemple :

1             ; ORG      9000H
2             ; LOAD     9000H
3  9000 210080 LD       HL,8000H
4  9003 3612   LD       (HL),12H         ;; premier argument
5  9005 3E56   LD       A,56H           ;; 2e argument
6  9007 ED67   RRD
7             ; ;a ce niveau A =52H
8             ; ;           ; HL=61H
9             ; END

D. OPÉRATIONS SUR LE BIT DE RETENUE C

SCF

Set Carry Flag : Met à 1 le bit indicateur C.

CCF

Complément Carry Flag : Inverse l'état du bit indicateur C.

 

Page précédente : 4/2.3.5 - Les mots-clés de l'assembleur Z80 et leur utilisation: Opérations arithmétiques

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