需要帮助在 x86 汇编中使用 FPU 进行乘法运算

Need help multiplying using FPU in x86 Assembly

基本上,我想将用户输入的值乘以设定值。该代码在与用户输入相乘时有效,但是,如果我将 'number' 预设为一个值(例如:6),它不会执行乘法和 returns 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

您正在尝试将 6 从 ASCII 转换为浮点数,而 6 是 ASCII 中的不可打印字符,因此无法将其转换为浮点数。您需要将6 更改为54,这是字符'6' 的ASCII 表示。或者您可以传递浮点常量 6.0 并根据需要删除对 atofproc 的调用。