Bonsoir,
Je préfère prévenir d'avance afin que personne ne perde son temps : les gens qui veulent bien m'aider vont devoir faire un gros effort de compréhension car je reconnais que j'ai du mal à expliquer clairement mon problème (en même temps, c'est toujours un peu le cas quand on est perdu).
Prenons un nombre, disons 10,5. Écrivons ce nombre en hexadécimal ... Pour la partie entière : ça va de soi. Pour la partie fractionnaire : multiplication successive par 16 jusqu'à obtenir la précision voulue ou une partie fractionnaire nulle. Bref, ça donne : A,8 . Jusque là ...
Soit un programme ASM 16 bits (émulation DOS) qui réalise une division dont le résultat est 10,5. Ce résultat doit être affiché en hexa. Suite à cette division, AX contient 10 et DX contient 5. Pour afficher la partie entière, il suffit d'avoir un tableau en mémoire qui, à chaque index du tableau, associe le caractère affichable correspondant (0 -> '0', 1 -> '1'). De cette manière on appelle la fonction d'affichage d'un caractère (ah = 02) de cette façon MOV DL, [TAB_Hexa + AX] et notre nombre apparait à l'écran. Jusque là ok.
C'est pour la partie fractionnaire que cela se complique. On a le nombre 5 dans notre registre DX ou plus précisément sa représentation binaire : 101.
Comment faire pour afficher ce nombre ?
- On ne peut pas utiliser la méthode du tableau énoncé ci dessous car on a alors un 5 qui s'affiche et ce n'est pas la bonne réponse,
- On ne peut pas multiplier chaque bit par son coefficient (ex. : 1*2^-1 + 0*2^-2 + 1*2^-3) car on obtient alors 0.625 en base 10 au lieu de 0.5,
- On ne peut pas non plus rajouter un 0 à la fin et grouper les chiffres par 4 afin de trouver l'équivalent hexa car dans ce cas, on trouve A (1010 en binaire).
Comment faire alors pour afficher la partie fractionnaire en hexa ou en décimal ? Ais-je loupé quelque chose ?
Je suppose que c'est pour répondre à ce genre de problématiques (en plus du fait que tous les nombres fractionnaires ne peuvent pas être représenté en virgule fixe) qu'ont été créées les FPU et l'émulation logicielle de la irgule flottante ...
Merci d'avance.
Partager