2016-04-23 3 views
0

Fondamentalement, je veux multiplier une valeur saisie par l'utilisateur par une valeur définie. Le code fonctionne lors de la multiplication des entrées utilisateur ensemble, cependant, si je prérégler « numéro » à une valeur (ex: 6), il ne fera pas la multiplication et retourne 0.Besoin d'aide pour multiplier à l'aide de FPU dans l'assemblage x86

_start: 
finit       ; init. the float stack 

output inprompt     ; get radius number 
input number, 12    ; get (ascii) value of this number 
pushd NEAR32 PTR number  ; push address of number 
call atofproc     ; convert ASCII to float in ST 

fld st      ; value1 in ST and ST(1) 

mov number, 6 

; If I substitute the line above by the two lines below, it works: 
; output inprompt, 0 
; input number, 12 

pushd NEAR32 PTR number  ; push address of number 
call atofproc     ; convert ASCII to float in ST 

fmul       ; value1*value2 in ST 
fst prod_real     ; store result 


push prod_real     ; convert the results for printing 

lea eax, sum_out    ; get the ASCII string address 
push eax 
call ftoaproc 

output outprompt 
+1

Vous êtes sûr que c'est un code MASM 64 bits? On dirait 32 bits. Je demande à cause de l'étiquette que vous avez ajouté. –

+0

Vous ne faites pas éclater la pile FP lorsque vous avez terminé. Vous devriez peut-être utiliser 'fmulp' et' fstp'. Je ne comprends pas non plus pourquoi vous dupliquez la première valeur avec 'fld st'. De plus, l'argument 'ftoaproc' peut être configuré avec' push push sum_out', sauf si vous devez utiliser LEA pour créer un code indépendant de la position en utilisant l'adressage RIP. De plus, au lieu de stocker 'prod_real' et de le pousser, vous pouvez faire de la place sur la pile et y stocker. –

Répondre

1

Vous essayez de convertir 6 de ASCII à float, et 6 est un caractère non-imprimable en ASCII donc il ne peut pas être converti en float. Vous devez changer 6 à 54, qui est la représentation ASCII du caractère '6'. Ou vous pouvez passer la constante à virgule flottante 6.0 et supprimer l'appel à atofproc si vous préférez.

+0

+1 lol Merci. Un tel petit oubli. – Rijn