Obligement - L'Amiga au maximum

Mardi 03 juin 2025 - 20:47  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

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

Articles in English


Réseaux sociaux

Suivez-nous sur X




Liste des 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,
ALL


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


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


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

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]