По сути, я хочу умножить введенное пользователем значение на заданное значение. Код работает при умножении на пользовательские входы вместе, однако, если я задаю «число» на значение (например: 6), он не будет выполнять умножение и возвращает 0.
_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
fmulp
иfstp
. Я также не понимаю, почему вы дублируете первое значение с помощьюfld st
. Кроме того, аргументftoaproc
может быть установлен сpush offset sum_out
, если только вам не нужно использовать LEA для создания кода, независимого от позиции, с использованием адресации относительно RIP. Кроме того, вместо того, чтобы сохранять вprod_real
, а затем помещать его в стек, вы можете освободить место в стеке и сохранить в него. - person Peter Cordes   schedule 24.04.2016