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

4/2.10 - Accès aux vecteurs mathématiques en Assembleur et utilisation (15e Complément)Coding Classeurs Weka
4/2 - Assembleur Z80 : Définitions et rappels de base

4/2.10 Accès aux vecteurs mathématiques en Assembleur et utilisation

Avant de parler des vecteurs mathématiques de l'AMSTRAD, nous allons faire une courte parenthèse sur les nombres flottants afin d'en comprendre le fonctionnement et la nature.

Les nombres flottants (ou réels) sont codés sur 5 octets. Les quatre premiers octets contiennent la mantisse. Le cinquième octet est réservé à l'exposant.

Appelons 01, 02, 03, 04 et 05 ces cinq octets. Le nombre de chiffres après le point décimal est déterminé par l'octet 05, c'est-à-dire l'exposant. Le bit 7 de cet octet étant toujours à un, il suffit d'y soustraire &H80. Nous avons donc :

Nombre de chiffres après la virgule = 05 - &H80

Le bit 7 de 04 contient le signe du nombre. S'il est à un, le nombre est négatif. S'il est à zéro, le nombre est positif.

Les bits de données doivent être lus du bit 6 de 04 au bit 0 de 01. Chacun d'entre eux représente une fraction. Ces fractions ajoutées les unes aux autres représentent les chiffres significatifs du nombre réel. Le bit 6 de 04 vaut 112. Le bit 5 de 04 vaut 114. Le bit 4 de 04 vaut 118, ainsi de suite jusqu'au bit 0 de 01.

Les vecteurs mathématiques de l'AMSTRAD permettent d'effectuer des opérations courantes à base de nombres flottants. Ils sont accessibles à travers plusieurs routines écrites en langage machine et situées aux adresses BDxx.

Les points d'entrée de ces routines sont listés ci-dessous. Notez que ces points d'entrée fluctuent en fonction du type de l'ordinateur utilisé.

ENTFLO : Conversion d'un entier en flottant.
FonctionCette fonction convertit l'entier qui se trouve dans le registre HL en un flottant dont l'adresse se trouve dans le registre DE.
EntréeHL = Entier à convertir.
DE = Adresse du résultat.
SortieRésultat flottant dans (DE) à (DE+ 4).
Point d'entréeCPC 464 : #BD3D
CPC 664 : #BD5E
CPC 6128 : #BD61

Exemple :

Version Assembleur

Version Chargeur Basic

FLOENT : Conversion d'un flottant en entier.
Fonction

Cette fonction convertit le flottant dont l'adresse se trouve dans le registre HL en un entier dans le registre HL.

EntréeHL = Adresse du flottant à convertir.
SortieEntier converti dans le registre HL.
Point d'entrée
CPC 464 : #BD46
CPC 664 : #BD67
CPC 6128 : #BD6A
Exemple :

Version Assembleur

Version Chargeur Basic

ADDFLO : Addition de deux flottants.
FonctionCette fonction additionne deux nombres flottants dont les adresses se trouvent dans les registres DE et HL.
Entrée

HL = Adresse du premier flottant.
DE = Adresse du second flottant.

SortieRésultat flottant dans (HL) à (HL + 4).
Point d'entrée
CPC 464 : #BD58
CPC 664 : #BD79
CPC 6128 : #BD7C
Exemple :

Version Assembleur

Version Chargeur Basic

SOUFLO : Soustraction de deux flottants.
FonctionCette fonction soustrait deux nombres flottants dont les adresses se trouvent dans les registres DE et HL.
Entrée

HL = Adresse du premier flottant.
DE = Adresse du second flottant.

SortieRésultat flottant dans (HL) à (HL + 4).
Point d'entrée
CPC 464 : #BD5B
CPC 664 : #BD7F
CPC 6128 : #BD82
Exemple :

Version Assembleur

Version Chargeur Basic

MULFLO : Multiplication de deux flottants.
FonctionCette fonction multiplie deux nombres flottants dont les adresses se trouvent dans les registres DE et HL.
Entrée

HL = Adresse du premier flottant.
DE = Adresse du second flottant.

SortieRésultant flottant dans (HL) à (HL + 4).
Point d'entrée
CPC 464 : #DB61
CPC 664 : #BD82
CPC 6128 : #BD85
Exemple :

Version Assembleur

Version Chargeur Basic

DIVFLO : Division de deux flottants.
FonctionCette fonction soustrait deux nombres flottants dont les adresses se trouvent dans les registres DE et HL.
Entrée

HL = Adresse du premier flottant.
DE = Adresse du second flottant.

SortieRésultant flottant dans (HL) à (HL + 4).
Point d'entréeCPC 464 : #BD64
CPC 664 : #BD85
CPC 6128 : #BD88

Exemple :

Version Assembleur

Version Chargeur Basic

COS : Cosinus
FonctionCette fonction calcule le cosinus flottant de l'argument flottant dont l'adresse se trouve dans le registre HL.
EntréeHL = Adresse de l'angle flottant dont on cherche le cosinus.
SortieCosinus de l'angle passé dans (HL) à (HL + 4).
Point d'entrée
CPC 464 : #BD8B
CPC 664 : #BDAC
CPC 6128 : #BDAF

Exemple :

Version Assembleur

Version Chargeur Basic

SIN : Sinus
FonctionCette fonction calcule le sinus flottant de l'argument flottant dont l'adresse se trouve dans le registre HL.
EntréeHL = Adresse de l'angle flottant dont on cherche le sinus.
SortieSinus de l'angle passé dans (HL) à (HL + 4).
Point d'entrée


CPC 464 : #BD88
CPC 664 : #BDA9
CPC 6128 : #BDAC

Exemple :

Version Assembleur

Version Chargeur Basic

TAN : Tangente.
FonctionCette fonction calcule la tangente flottante de l'argument flottant dont l'adresse se trouve dans le registre HL.
EntréeHL = Adresse de l'angle flottant dont on cherche la tangente.
SortieTangente de l'angle passé dans (HL) à (HL + 4).
Point d'entrée
CPC 464 : #BD8E
CPC 664 : #BDAF
CPC 6128 : #BDB2

Exemple :

Version Assembleur

Version Chargeur Basic

ATAN : Arc Tangente.
FonctionCette fonction calcule l'arc tangente flottante de l'argument flottant dont l'adresse se trouve dans le registre HL.
EntréeHL = Adresse de l'angle flottant dont on cherche l'arc tangente.
SortieArc Tangente de l'angle passé dans (HL) à (HL + 4).
Point d'entréeCPC 464 : #BD91 CPC 664 : #BDB2 CPC 6128 : #BDB5
Exemple :

Version Assembleur

Version Chargeur Basic

NEG : Négation d'un flottant.
FonctionCette fonction complémente le contenu du registre HL. Le résultat est stocké dans le registre HL.
Entrée(HL) = Donnée à complémenter.
Sortie(HL) = - (HL).
Point d'entréeCPC 464 : #BD6D CPC 664 : #BD88 CPC 6128 : #BD8E
Exemple :

Version Assembleur

Version Chargeur Basic

SIG : Signe d'un flottant.
FonctionCette fonction calcule le signe du flottant pointé par le registre HL. Le résultat est renvoyé dans le registre A.
Entrée(HL) = Flottant dont le signe doit être calculé.
Sortie

Si (HL) > 0, A = 1.
Si (HL) = 0, A = 0.
Si (HL) < 0, A = 255.

Point d'entréeCPC 464 : #BD70 CPC 664 : #BD91 CPC 6128 : #BD94
Exemple :

Version Assembleur

Version Chargeur Basic

DR : Bascule Degrés/Radians.
FonctionCette fonction permet de choisir l'unité des fonctions sinusoïdales et hyperboliques (radians ou degrés).
EntréeA = 0 pour exprimer les angles en radians.
A < > 0 pour exprimer les angles en degrés.
SortieAucune.
Point d'entréeCPC 464 : #BD73
CPC 664 : #BD94
CPC 6128 : #BD97
Exemple :

Version Assembleur

Version Chargeur Basic

PIFLOT : Nombre PI en flottant.
FonctionCette fonction stocke dans le contenu de HL la valeur transcendentale PI.
EntréeAucune.
Sortie(HL) = PI
Point d'entréeCPC 464 : #BD76
CPC 664 : #BD97
CPC 6128 : #BD9A
Exemple :

Version Assembleur

Version Chargeur Basic

RAC : Racine carrée.
FonctionCette fonction calcule la racine carrée du contenu du registre HL et stocke le résultat dans le contenu de HL.
Entrée(HL) = Nombre dont on désire connaître la racine carrée
Sortie(HL) = RAC(HL).
Point d'entréeCPC 464 : #BD79
CPC 664 : #BD9A
CPC 6128 : #BD9D
Exemple :

Version Assembleur

Version Chargeur Basic

PUIS Puissance
FonctionCette fonction calcule le résultat du contenu de HL mis à la puissance du contenu de DE. Le résultat est renvoyé dans le contenu de HL.
Entrée(HL) = Nombre à mettre à la puissance de DE.
(DE) = Exposant.
Sortie(HL) = (HL)^(DE).
Point d'entréeCPC 464 : #BD7C
CPC 664 : #BD9D
CPC 6128 : #BDA0
Exemple :

Version Assembleur

Version Chargeur Basic

LOG : Logarithme népérien.
FonctionCette fonction renvoie le logarithme népérien du contenu du registre
Entrée(HL) = Nombre dont on désire connaître le logarithme népérien.
Sortie(HL) = LOG(HL).
Point d'entréeCPC 464 : #BD7F
CPC 664 : #BDA0
CPC 6128 : #BDA3
Exemple :

Version Assembleur

Version Chargeur Basic

LOG10 Logarithme décimal.
FonctionCette fonction renvoie le logarithme décimal du contenu du registre HL.
Entrée(HL) = Nombre dont on désire connaître le logarithme décimal.
Sortie(HL) = LOG10(HL).
Point d'entréeCPC 464 : #BD82
CPC 664 : #BDA3
CPC 6128 : #BDA6
Exemple :

Version Assembleur

Version Chargeur Basic

EXP : Exponentielle.
FonctionCette fonction calcule l'exponentielle du contenu du registre HL.
Entrée(HL) = Nombre dont on désire connaître l'exponentielle.
Sortie(HL) = EXP(HL).
Point d'entréeCPC 464 : #BD85
CPC 664 : #BDA6
CPC 6128 : #BDA9
Exemple :

Version Assembleur

Version Chargeur Basic

COMPARE : Comparaison de deux nombres.
FonctionCette fonction compare le contenu des registres HL et DE. Le registre A est initialisé en fonction du résultat de la comparaison.
Entrée(HL) et (DE) contiennent les nombres à comparer.(HL) et (DE) contiennent les nombres à comparer.
Sortie

Si (HL) > (DE), A = 1.
Si (HL) = (DE), A = 0.
Si (HL) < (DE), A = 255.

Point d'entréeCPC 464 : #BD6A
CPC 664 : #BD8B
CPC 6128 : #BD8E
Exemple :

Version Assembleur

Version Chargeur Basic

FIX : Fonction BASIC FIX.
Fonction Cette fonction est l'équivalent de la fonction FIX du LOCOMOTIVE BASIC.
Entrée (HL) = Nombre dont on désire connaître l'arrondi.
Sortie (HL) = FIX(HL).
Point d'entréeCPC 464 : #BD4C
CPC 664 : #BD6D
CPC 6128 : #BD70
Exemple :

Version Assembleur

Version Chargeur Basic

INT : Fonction BASIC INT.
Fonction Cette fonction est l'équivalent de la fonction INT du LOCOMOTIVE BASIC.
Entrée (HL) = Nombre dont on désire connaître l'arrondi.
Sortie (HL) = INT(HL).
Point d'entréeCPC 464 : #BD4F
CPC 664 : #BD70
CPC 6128 : # BD73
Exemple :

Version Assembleur

Version Chargeur Basic

Page précédente : 4/2.9 - Les RSX
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/c
Page créée en 292 millisecondes et consultée 297 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.