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

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

V. Opérations arithmétiques

A. ADDITIONS ADD et ADC

Additions sur 8 ou 16 bits avec ou sans retenue.

Remarque :

Les additions sur 8 bits travaillent sur 7 bits de données et 1 bit de signe.

Les additions sur 16 bits travaillent sur 15 bits de données et 1 bit de signe. Les modes d'adressage sont : immédiat, registre 8 ou 16 bits, indirect ou indirect indexé.
Pour les instructions ADD et ADC sur 8 bits, les indicateurs sont modifiés de la façon suivante : N =0, C, Z, V, S et H affectés selon le résultat de l'addition. Pour les instructions ADD et
ADC sur 16 bits, l'indicateur H n'a aucun sens.

• Adressage immédiat sur 8 bits :

ADD A, VAL8

Additionne la valeur VAL8 à l'accumulateur sans tenir compte de la retenue (indicateur C). Le résultat se trouve dans l'accumulateur.

ADC A,VAL8

Additionne la valeur VAL8 à l'accumulateur en tenant compte de la retenue (indicateur C).
Le résultat se trouve dans l'accumulateur.

* Adressage registre 8 bits :

ADD A,X

où X est l'un des registres suivants : A, B, C, D, E, H ou L.

Additionne le registre spécifié à l'accumulateur sans tenir compte de la retenue (indicateur C}. Le résultat est dans l'accumulateur.

ADC A,X

où X est l'un des registres suivants : A, B, C, D, E, H ou L.
Additionne le registre spécifié à l'accumulateur en tenant compte de la retenue (indicateur C).
Le résultat est dans l'accumulateur.

• Adressage registre 16 bits

ADD HL,XX

où XX est un des registres pairs suivants : BC, DE, HL, SP.

ADD IX,XX

où XX est un des registres pairs suivants : BC, DE, IX, SP.

ADD IY.XX

où XX est un des registres pairs suivants : BC, DE, IY, SP.

Additionne les deux registres pairs spécifiés sans tenir compte de la rete-
nue (indicateur C).

Le résultat est dans HL.

ADC HL.XX

où XX est un des registres pairs suivants : BC, DE, HL, SP.

Additionne les deux registres pairs spécifiés en tenant compte de la rete-
nue (indicateur C).

• Adressage indirect sur 8 bits :

ADD A,(HL)

Additionne l'octet pointé par HL à l'accumulateur sans tenir compte de
la retenue (indicateur C).

Le résultat est dans A.

ADC A,(HL)

Additionne l'octet pointé par HL à l'accumulateur en tenant compte de

la retenue (indicateur C).

Le résultat est dans A.

• Adressage indirect indexé sur 8 bits :

ADD A,(IX+d)
ADD A,(IY+d)

Additionne l'octet pointé par IX + d ou IY + d à l'accumulateur sans tenir
compte de la retenue (indicateur C).

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

Le résultat est dans A.

ADC A,(IX + d)
ADC A,(IY + d)

Additionne l'octet pointé par IX + d ou IY+d à l'accumulateur en tenant

compte de la retenue (indicateur C).

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

B. SOUSTRACTIONS

SUB et SBC

Soustraction sur 8 ou 16 bits avec ou sans retenue.

Les modes d'adressage sont : immédiat, registre 8 ou 16 bits, indirect

ou indirect indexé.

Remarques :

a)   Les soustractions sur 8 bits travaillent sur 7 bits de données et 1 bit désigne. Les soustractions sur 16 bits travaillent sur 15 bits de données et 1 bit de signe.

b)   Pour les instructions SUB et SBC sur 8 bits, les indicateurs sont modifiés de la façon suivante : N = 1, C, Z, V, S et H affectés selon le résultat de la soustraction.

c)   Pour les instructions SUB et SBC sur 16 bits, l'indicateur H n'a aucun sens.

• Adressage immédiat sur 8 bits :

SUB VAL8

Soustrait la valeur VAL8 de l'accumulateur sans tenir compte de la retenue avant soustraction (indicateur C).

Le résuftat se trouve dans l'accumulateur.

SBC A.VAL8

Soustrait la valeur VAL8 de l'accumulateur en tenant compte de la retenue avant soustraction (indicateur C).

Le résultat se trouve dans l'accumulateur.

• Adressage registre 8 bits :

SUB X

où X est l'un des registres suivants : A, B, C, D, E, H ou L.
Soustrait le registre spécifié de l'accumulateur sans tenir compte de la retenue avant soustraction.

Le résultat est dans l'accumulateur.

SBX A,X

où X est l'un des registres suivants : A, B, C, D, E, H ou L.
Soustrait le registre spécifié de l'accumulateur en tenant compte de la retenue avant soustraction (indicateur C).

Le résultat est dans l'accumulateur.

• Adressage registre 16 bits :

SBC HL.XX

où XX est un des registres pairs suivants : BC, DE, HL, SP.

Soustrait les deux registres pairs spécifiés en tenant compte de la rete-
nue avant soustraction (indicateur C}.

Le résultat est dans HL.

Remarque :

L'ordre de soustraction de deux registres pairs sans tenir compte de la retenue n'existe pas. Vous serez donc obligé d'utiliser un SBC pour soustraire deux registres pairs. Pour ne pas avoir de mauvaise surprise, nous vous conseillons d'effacer l'indicateur Carry avant de faire la soustraction.

• Adressage indirect sur 8 bits :

SUB (HL)

Soustrait l'octet pointé par HL de l'accumulateur sans tenir compte de
la retenue avant la soustraction (indicateur C).

Le résultat est dans A.

SBC A,(HL)

Soustrait l'octet pointé par Hl_ de l'accumulateur en tenant compte de
la retenue avant la soustraction (indicateur C).

Le résultat est dans A.

• Adressage indirect indexé sur 8 bits :

SUB A,(IX + d)
SUB A,(IY + d)

Soustrait l'octet pointé par IX + d ou lY + d de l'accumulateur sans tenir
compte de la retenue avant la soustraction (indicateur C).

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

Le résultat est dans A.

SBC A,(IX+d)
SBC A,(IY+d)

Soustrait l'octet pointé par IX + d ou lY+d de l'accumulateur en tenant
compte de la retenue avant la soustraction (indicateur C).

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

Le résultat est dans A.

C. INCRÉMENTATION ET DÉCRÉMENTATION

INC et DEC

Agissent sur un registre 8 ou 16 bits ou sur une mémoire 8 ou 16 bits.

Les modes d'adressage sont : adressage registre 8 bits ou 16 bits, indirect 8 bits ou indirect indexé 8 bits.

Remarque :

Pour l'instruction INC, sauf indication contraire, les indicateurs sont modifiés de la façon suivante :

N = 0, C inchangé, Z, V, S et H affectés selon le résultat de l'incrémentation.

• Adressage registre 8 bits :
INC X

où X =A, B, C, D, E, H ou L

Incrémente de 1 la valeur du registre spécifié.

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

LD        C,12H
INC       C          ; C=13H
LD        B, 0FFH
INC       B          ; B = 0 Flag Z=1

DEC X

où X = A, B, C, D, E, H ou L

Décrémente de 1 la valeur du registre spécifié.

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

LD       D,12H
DEC      D             ;  ;D = 11H
LD       D,0
DEC      D             ;  ;D = 0FFH

• Adressage registre 16 bits :

INC XX

où XX = BC, DE, HL, IX, IY ou SP.

Incrémente de 1 la valeur du registre spécifié.
Les indicateurs ne sont pas modifiés.

LD      HL,3000H
INC     HL             ; ;HL=3001H
LD      HL,0FFFFH
INC     HL             ; ;HL = 0

DEC XX

où XX = BC, DE, HL, IX, IY ou SP.

Décrémente de 1 ia valeur du registre spécifié.

Les indicateurs ne sont pas modifiés.

LD      HL, 3000H
DEC     HL             ;;HL = 2FFFH
LD      HL,0
DEC     HL             ;;HL = FFFFH

• Adressage indirect sur 8 bits :

INC (HL)

Incrémente de 1 l'octet pointé par HL.

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

DEC (HL)

Décrémente de 1 l'octet pointé par HL.

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

• Adressage indirect indexé sur 8 bits :

INC (IX+ d)
INC (IY + d)

Incrémente de 1 l'octet pointé par IX + d ou lY + d

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

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

DEC (IX + d)
DEC (IY + d)

Décrémente de un l'octet pointé par IX + d ou IY + d.

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

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

DAA

Décimal Adjust Accumulator : Ajustement décimal.

Transforme une donnée 8 bits exprimée en binaire et stockée dans le registre A en là même donnée codée en décimal dans le registre A.

L'adressage est implicite.

Indicateurs : N inchangé, C, Z, P, S, H modifiés.

Comment fonctionne l'instruction DAA ?

Elle divise le registre A en deux quartets que nous appelerons MSQ et LSQ (Most Significative quartet et Last Significative quartet, c'est-à-dire quartets de poids fort et de poids faible).

Si LSQ est supérieur à 9 ou si H = 1 (voir remarque), LSQ est incrémenté de 6, c'est-à-dire que A est incrémenté de 6.

Si MSQ est supérieur à 9 ou si C = 1, MSQ est incrémenté de 6, c'est-à-dire que A est incrémenté de 60H.

Ce qui se traduit par l'organigramme suivant :

Remarque :

Le bit H est appelé « Half Carry » ou demi-retenue.

Il est positionné sur les opérations arithmétiques, décalages et comparaisons si une retenue est obtenue sur le quartet de poids faible LSQ.

Page précédente : 4/2.3.4 - Les mots-clés de l'assembleur Z80 et leur utilisation : Ruptures de séquences (!)

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