Précédent   Forum du club des développeurs et IT Pro > Autres langages > Assembleur
Assembleur Forum d'entraide Assembleur. Avant de poster -> F.A.Q Assembleur Tutoriels Assembleur
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 01/01/2013, 17h27   #1
asma-elec
 
Femme asma
Étudiant
Inscription : janvier 2013
Messages : 2
Détails du profil
Informations personnelles :
Nom : Femme asma
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : janvier 2013
Messages : 2
Points : -1
Points : -1
Par défaut Fonction sinus d'une calculatrice

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.
asma-elec est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 01/01/2013, 21h27   #2
bifur
Membre habitué
 
passe le balais et l'aspirateur
Inscription : mars 2008
Messages : 111
Détails du profil
Informations personnelles :
Âge : 28

Informations professionnelles :
Activité : passe le balais et l'aspirateur

Informations forums :
Inscription : mars 2008
Messages : 111
Points : 126
Points : 126
Citation:
les données introduites ne doivent pas dépasser 4 digits hexadécimaux.
un mot de 16 bits je suppose

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)
bifur est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/01/2013, 15h01   #3
EtherOS
Membre habitué
 
Avatar de EtherOS
 
Homme Lionel Tidjon
Etudiant Polytechnicien
Inscription : juillet 2012
Messages : 51
Détails du profil
Informations personnelles :
Nom : Homme Lionel Tidjon
Localisation : Cameroun

Informations professionnelles :
Activité : Etudiant Polytechnicien
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2012
Messages : 51
Points : 110
Points : 110
Par défaut Ma Proposition

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.
EtherOS est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/01/2013, 18h32   #4
asma-elec
 
Femme asma
Étudiant
Inscription : janvier 2013
Messages : 2
Détails du profil
Informations personnelles :
Nom : Femme asma
Localisation : Tunisie

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : janvier 2013
Messages : 2
Points : -1
Points : -1
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
asma-elec est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 05/01/2013, 21h39   #5
bifur
Membre habitué
 
passe le balais et l'aspirateur
Inscription : mars 2008
Messages : 111
Détails du profil
Informations personnelles :
Âge : 28

Informations professionnelles :
Activité : passe le balais et l'aspirateur

Informations forums :
Inscription : mars 2008
Messages : 111
Points : 126
Points : 126
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:
Code :
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]
et la table de données:
Code :
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...
bifur est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h14.


 
 
 
 
Partenaires

Hébergement Web