Suivez-nous sur X

|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
Programmation : Assembleur - Les bibliothèques mathématiques
(Article écrit par Dominique Genot et extrait d'Amiga News Tech - mai 1990)
|
|
Sans doute savez-vous que les nombres peuvent être stockés et manipulés sous différentes formes par l'ordinateur.
La forme courante (integer = entier) concerne les nombres entiers uniquement ; elle permet un traitement rapide
et nécessite 4 octets (un mot long). L'autre forme (float = flottant) concerne tout type de nombre ; elle permet
un traitement presque aussi rapide et nécessite également 4 octets (merci ô dieu Commodore...). De quoi s'agite-t-il ?
Dans un premier temps, des bibliothèques mathffp.library et mathtrans.library. Dans ce qui suit,
nous considérerons qu'elles sont déjà ouvertes (voir plus loin l'ouverture).
Passons en revue ses différentes routines précisées par leurs décalages (hexa puis décimal) et les paramètres
entre parenthèses :
Transformations et tests divers
- $1E -30 SPFix(D0) : permet de convertir le nombre flt (flottant) contenu dans D0
en nombre entier contenu dans D0. Si ce nombre est décimal, seule sa valeur absolue sera gardée.
Le registre D1 est aussi modifié.
- $24 -36 SPFlt(D0) : permet de convertir l'entier contenu dans D0 en nombre flt contenu
dans D0. Le registre D1 est aussi modifié.
- $2A -42 SPCmp(D1,D0) : permet de comparer deux nombres flt. Les drapeaux sont fixés d'après
le résultat de l'opération D0-D1 soit : Z si D0=D1 ; NC si D0>D1 ; C si D0<D1. Le registre D0
est modifié dans tous les cas.
- $30 -48 SPTst(D1) : permet de tester le signe de D1. Le drapeau Nest mis si D1<0.
Les registres D0 et D1 sont modifiés.
- $36 -54 SPAbs(D0) : remplace le contenu de D0 par sa valeur absolue.
- $3C -60 SPNeg(D0) : remplace le contenu de D0 par son opposé.
Les opérations courantes
Le résultat est toujours mis dans D0. Les autres registres ne sont pas modifiés.
- $42 -66 SPAdd(D1,D0) : calcule D0+D1.
- $48 -72 SPSub(D1,D0) : calcule D0-D1.
- $4E -78 SPMu1(D1,D0) : calcule D0xD1.
- $54 -84 SPDiv(D1,D0) : divise D0 par D1 (attention au Guru si D1=0 !).
Dans toutes les routines, les registres D0 et D1 contenant des nombres flt doivent être manipulés
comme des mots longs (4 octets). Exemple : calcul de 30,1x15,28
Le résultat peut être ensuite exploité sous sa forme flt ou converti en entier par jsr spfix(a6),
qui donnera D0=459 car seule la partie entière est conservée. Notez que si vous tracez cette routine,
votre traceur visualisant très probablement le contenu des registres en hexadécimal, vous verrez que D0
contient 1CB (=459 en décimal).
Ouf ! Vous suivez toujours ? Passons alors à des calculs plus complexes :
Mathtrans.library
Elle contient les routines de calculs trigonométriques (circulaires et hyperboliques). Le principe reste le même :
le résultat est mis dans le registre D0 qui est donc toujours modifié ; le registre D1 est aussi modifié.
Tous les angles sont en radians : pi radians => 180°.
- $1E -30 SPAtan(D0) : arc-tangente.
- $24 -36 SPSin(D0) : sinus.
- $2A -42 SPCos(D0) : cosinus.
- $30 -48 SPTan(D0) : tangente.
- $36 -54 SPSincos(d1,d0) : sin(D0) et cos (D0).
- $3C -60 SPSinh(D0) : sinus hyperbolique.
- $42 -66 SPCosh(D0) : cosinus hyperbolique.
- $48 -72 SPTanh(D0) : tangente hyperbolique.
- $4E -78 SPExp(D0) : e exposant D0 avec e=2,718...
- $54 -84 SPLog(D0) : logarithme népèrien de D0 (log à base e).
- $5A -90 SPPow(D1,D0) : D0 exposant D1.
- $60 -96 SPSqrt(D0) : racine carrée de D0.
- $66 -102 SPTieee(D0) : met un nombre flt au format double précision.
- $6C -108 SPFieee(D0) : met un nombre double précision au format flt.
- $72 -114 SPAsin(D0) : arc-sinus.
- $78 -120 SPAcos(D0) : arc-cosinus.
- $7E -126 SPLogl0(D0) : logarithme à base 10 de D0.
Remarque : pour la routine SPSinCos, D0 doit être chargé avec l'angle en radians et D1
doit pointer sur un tampon de 4 octets dans lequel la routine rangera la valeur du cosinus ainsi
calculée. D0 contiendra la valeur du sinus.
Après cette liste fastidieuse à taper pour moi et à lire pour vous, je vous laisse le temps de digérer ces
informations. Le mois prochain : applications aux tracés de courbes polaires sous Intuition et animations de
sprites sous IRQ (c'est choooli !). Un dernier mot : les petits fûtés que vous êtes auront bien sûr compris
que le répertoire Libs: de la disquette ou du disque dur à partir duquel vous avez lancé le système doit
contenir les dites bibliothèques mathématiques.
|