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
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é. –
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. –