Obligement - L'Amiga au maximum

Dimanche 15 juillet 2018 - 21:11  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles en d'autres langues


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Logiciels
 · Jeux
 · Scène démo
 · Divers


Jeux Amiga

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


Trucs et astuces

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


Glossaire

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


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


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 offsets (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

Assembleur
Assembleur

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.


[Retour en haut] / [Retour aux articles]