需要帮助在 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
的调用。
基本上,我想将用户输入的值乘以设定值。该代码在与用户输入相乘时有效,但是,如果我将 '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
的调用。