Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Tronquer un nombre [ Archives / Newbii ] (leclair2000)

lundi 6 septembre 2004 à 08:45:38 | Tronquer un nombre

leclair2000

Bonjour!

J'aimerais savoir comment on doit s'y prendre pour tronquer un nombre en assembleur?

ex : 5.12345 -> 5.12

Merci d'avance

lundi 6 septembre 2004 à 09:16:39 | Re : Tronquer un nombre

ToutEnMasm

Salut,
une fois le nombre transformé en caracteres ascii , chercher le point ,compter le nombre de décimales voulues ,rajouter le zero de bout de chaine.
ToutEnMasm

lundi 6 septembre 2004 à 23:47:17 | Re : Tronquer un nombre

CoreBreaker

Si ton nombre est en virgule fixe dans un entier comme ceci:
num dd 123512345

pour représenter le nombre 1235.12345 avec 5 chiffres après la virgule, il suffit de faire:
num / 100000 * 100000
ou num - (num modulo 10000)
ainsi:
mov ebx, 100000
mov eax, [num]
div eax, ebx
mul ebx

ou
mov ebx, 100000
mov eax, [num]
mov edx, 0
div ebx ; le résultat du modulo est dans edx
mov eax, [num]
sub eax, edx


Si ton nombre est en bcd compacté ainsi:
num db 45h, 23h, 51h, 23h, 01h

il suffit de placer des zéros ainsi
mov word ptr [num], 0
and byte ptr [num+2], 0F0h


Si maintenant tu utilise le fpu, ainsi
num dd 1235.12345
res dd 0


Il suffit de faire ainsi:

; On modifie le mot de controle
; pour activer la troncature lors d'un FRNDINT
fldcw word ptr [res]
or byte ptr [res], 0Ch
fstcw word ptr [res]

fld [num]
frndint
fstp [res]


Core Breaker

mardi 7 septembre 2004 à 09:57:42 | Re : Tronquer un nombre

leclair2000

C'est cool,

Mais en fait, je me suis mal exprimé et je m'en excuse!

En fait, je dois trouver un algoritme faisable en assembleur pour convertir un nombre en un nombre à deux chiffres significatifs et j'ai vraiment aucune idée...

mardi 7 septembre 2004 à 11:43:42 | Re : Tronquer un nombre

BruNews

Administrateur CodeS-SourceS
multiplie par 100
frndint
divise 100

ciao...
BruNews, Admin CS, MVP VC++

mardi 7 septembre 2004 à 22:43:47 | Re : Tronquer un nombre

CoreBreaker

Réponse acceptée !
Je suppose donc que tu veux dire que tu veux 2 chiffres significatifs après la virgule.

Tu peux faire ta tronquature à 2 décimales en virgule fixe avec l'exemple que je t'ai donné, c'est à dire avec une précision de 5 décimales.
Il suffit de reprendre l'exemple que je t'ai donné mais de changer le diviseur. En effet, l'exemple que j'ai donné est une troncature à l'unité, pour obtenir une troncature à 2 décimales avec un diviseur de 1000 (= 100000 / 100)
mov ebx, 1000
mov eax, [num]
mov edx, 0
div ebx ; le résultat du modulo est dans edx
mov eax, [num]
sub eax, edx


Avec le fpu, la troncature à 2 décimales donne:
num dd 1235.12345
res dd 0

...

; On modifie le mot de controle
; pour activer la troncature lors d'un FRNDINT
fldcw word ptr [res]
or byte ptr [res], 0Ch
fstcw word ptr [res]

mov [res], 100.0
fld [res]
fld st
fld [num]
fmul
frndint
fdivr
fstp [res]


Core Breaker



Cette discussion est classé dans : nombre, tronquer


Répondre à ce message

Sujets en rapport avec ce message

petit problême FPU [ par prunkdump ] Bonjours, voilà je voudrais savoir comment afficher un nombre à vigule flottante lorsqu'il est en mémoire. Plus simplement comment convertir un nombre conversion de nombre [ par jolindji ] bonjour a tous... j'ai besoin d'un petit programme qui effectuerai la conversion d'un nombre entré au clavier en base 2,8,10,16ou quelque choes qui y Comment convertir une chaine de caractere en nombre [ par davidv ] Voila,comment une chaine de caractere "12" par exemplepeut elle etre convertie en nombre 12.merci a tousdavidV GENERATUER NOMBRE ALEATOIRE EN ASM [ par fser ] | -= Fr@nçois =- | (cliquez pour m'envoyer un mail)mon siteMERCI DE FAIRE PARVENIR UN PROGRAMME EN ASSEMBLEUR POUR 68 HC 11 POUR GENER Avez-vous des algorithmes pour la génération de nombre aléatoire? [ par Rigel Io ] Salut, ma question est donc assez simple je voudrai seuleument savoir comment générer des nombres aléatoires. Je voudrai savoir car à chaque fois que Aide nombre en asm 8086 16 bits [ par Maureka ] je suis debutant en asm intel 16 bits.j'ai un projet à réaliser et cela consiste à faire un programme qui affiche la liste des nombres premiers compri Probleme nombre signe et non signe [ par Crackshoot ] Voila je voudrais cree un tit programme qui permet d'additionner des nombre negatif et posif mais je sais pas de quel maniere procede, j'arrive qu'a l nombre aléatoire en asm 16f84 [ par sodhaine ] Bonjour,Je suis un newbie-moyen en assembleur/électronique; j'essaie de faire un dé électronique en assembleur 16f84 (avec affichage sur écran LCD) e [NEWBIE] Petit Probleme ! Aidez moi ! [ par xaminou ] Voila , jaimerai cree une fonction qui calcule la suite suivante :Xn+1=Xn + (Xn2 or 5) qui prend en paramètre (dans la pile) l'adresse d'un nombre Xn Afficher un nombre [ par MaxSoldier ] Bonjours, je voudrais afficher un nombre mais j'ai toujours des erreur : J'ai donc 2 questions : Comment déclarer une variable qui contiendra des nomb


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,172 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.