0
基本的に、ユーザーが入力した値に設定値を乗算したい。一緒にユーザーの入力に掛ける際のコードは、しかし、作品私は値に「番号」(例:6)プリセットあれば、それは乗算を行うことはありませんし、0を返します。x86アセンブリでFPUを使用して乗算する際に助けが必要
_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
確かに64ビットMASMコードですか? 32ビットのように見えます。あなたが追加したタグのために私は尋ねます。 –
完了したらFPスタックをポップしません。おそらく 'fmulp'と' fstp'を使用しているはずです。なぜ私は 'fld st'で最初の値を複製しているのか理解できません。また、 'ftoaproc'への引数は、RIP相対アドレッシングを使って位置に依存しないコードを作るためにLEAを使う必要がない限り、' push offset sum_out'で設定することができます。また、 'prod_real'に格納してプッシュするのではなく、スタックにスペースを入れてそこに格納することもできます。 –