Bonsoir tout le monde
J'aurais besoin d'un code pour faire la fonction sinus d'une calculatrice en Assembleur, sachant que les données introduites ne doivent pas dépasser 4 digits hexadécimaux.
Merci d'avance.
Bonsoir tout le monde
J'aurais besoin d'un code pour faire la fonction sinus d'une calculatrice en Assembleur, sachant que les données introduites ne doivent pas dépasser 4 digits hexadécimaux.
Merci d'avance.
un mot de 16 bits je supposeles données introduites ne doivent pas dépasser 4 digits hexadécimaux.
comme sinus est une fonction périodique je te conseil de commencer par diviser ton nombre en entrée par la période T de ton sinus (T=360 si ton entrée est exprimé en degré) et de conserver le reste de ta division
tu te retrouveras avec un valeur intermédiaire variant de 0 a T-1
ensuite il faudrait aller chercher le résultat dans une table de correspandance angle/valeur de sinus précalculé (a la main)
ou alors de passer par le FPU (unité de calcul a virgule flottante, une partie du processeur qui sert aux calcul mathématique) a condition bien sur d'avoir un processeur qui ait cette option
l'inconvénient de cette méthode c'est que ça consomme plus de mémoire qu'en passant par le FPU, l'avantage c'est que l'on peut l'adapter a tout type de fonction périodique (sous réserve de quantité suffisante de ram)
Je suis du même avis je vais juste ajouter une petite touche :
==========IF FAUT GERER TOUS LES CAS==============
Je te conseille d'écrire de faire un scénario de test pour la fonction sin cela te permettra de gérer tous les contraintes de la fonction sinus.
1. Paramètres_entrants : Input est de dim 1 et supposons une variable x
Paramètres_sorties : Output est de dim 1 et suppposons sin(x) =y
2. Les contraintes :
=> -1 <= sin(x) <= 1
=> x dans R on peut se restreindre à [-2kpi, 2kpi] où k dans Z
=> si x <= 0 sin(x) <= 0 sinon sin(x) > 0
2.1 Cas nominal : On entre des angles triviaux 30 ,60, 28,13,etc...
2.2 Fonction de test:
TEST(Donnée_Entrée , Fonction_à_tester , Fonction_de_test, Resultat_attendu, Precision) où :
(a) Donnée_entrée : voir 1.
(b) Fonction_à_tester : sin
(c) Fonction_de_test: arcsin
(d) Resultat_attendu : x
(e) Précision : 10E-20 (flottant)
2.2 Cas Limite :
=> x est proche de 0 : 0.00123 x 10^77 ou -0.0000023456
=> x est trés grand ou infini :
Ex: -209938456,12345 ou 23,33333456 x 10^98
=> x irrationnel :
EX: exp(1) , PI , sqrt(2), -11,333456, -exp(PI)
La fonction de test doit renvoyer(x) dans tous ces cas.
Je vous remercie
Mais est il possible de m'envoyer le code au moins le début du code pour me faciliter la tache!
je serais très reconnaissante
faut tout faire ici....
je suppose que tu calcul un sinus sur un angle exprimé en degré dans le registre AX et que tu attend une réponse exprimé en millième dans AX
la fonction:
et la table de données:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 xor dx,dx ;diviser par un mot mov cx,360 div cx mov si,dx shl si,1 ;reviens a multiplier si par 2 (2puissance1) car la table est constitué d'élément de 2 octet mov ax,[si+tablesinus]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 tablesinus: dw 0 ;sin0=0 dw 17 ;sin1=0.017 dw 34 ;sin2=0.034 dw 52 ;sin3=0.052 .... dw 999 ;sin89=0.999 dw 1000 ;sin90=1 dw 999 ;sin91=0.999 etc...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager