Je n'arrive pas à comprendre comment récupérer le résultat d'un calcul effectué avec le coprocesseur x86 d'Intel.Question sur l'assemblage du coprocesseur Intel x86
Veuillez prendre en compte le segment de données suivant.
et les segments de code suivants, version 1:
.code
main:
fld x ; 5.0
fadd k1 ; 5.0 + 3.4
fistp res ; store as integer (it will round, in this case down)
mov eax, res ; eax = 00000008
end main
et version 2:
.code
main:
fld x ; 5.0
fadd k ; 5.0 + 3.4
fstp res ; store as real
mov eax, res ; eax = 41066666
end main
Je comprends version 1, sans problème. Il s'agit de version 2 Je ne comprends pas. Je peux voir dans le débogueur qu'il fait le calcul exact en tant que version 1, mais quand il est temps de stocker est fait comme "41066666" !?
Pour quelle raison?
Quel "encodage" a été utilisé pour faire 8.4 en "41066666"?
Existe-t-il un moyen de le convertir à 8.4, de sorte que je puisse l'imprimer dans la console (par exemple, en utilisant la fonction de bibliothèque StdOut masm32)?
Merci.
Merci. Ceci explique cela. S'il vous plaît prenez le temps de répondre à l'autre partie de la question: Y at-il un moyen de le convertir en 8.4 pour que je puisse l'imprimer dans la console? Merci. – nunos
Eh bien ... la façon dont je le ferais en C serait d'appeler printf (% f, x). Quelle bibliothèque utilisez-vous? Il y a peut-être une fonction là-dedans pour le convertir pour vous. – CookieOfFortune
Comme mentionné dans le post, j'utilise masm32. Je ne sais pas, mais il y a peut-être une fonction masm32, comme dwtoa, mais pour les flotteurs qui peuvent le faire. – nunos