Grundsätzlich möchte ich einen Benutzer eingegebenen Wert mit einem festgelegten Wert zu multiplizieren. Der Code funktioniert, wenn sie zusammen auf Benutzereingaben multipliziert wird, jedoch, wenn ich ‚Zahl‘ auf einen Wert (zB: 6) vorgegeben, es wird nicht die Multiplikation tun und gibt 0.Hilfe Hilfe Multiplikation mit FPU in x86 Assembly
_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
Sie sind sicher, dass 64-Bit-MASM-Code ist? Sieht aus wie 32-Bit. Ich frage nach dem Tag, den du hinzugefügt hast. –
Sie werden den FP-Stack nicht löschen, wenn Sie fertig sind. Sie sollten vielleicht 'fmulp' und' fstp' verwenden. Ich verstehe auch nicht, warum du den ersten Wert mit "fld st" duplizierst. Das Argument arg to 'ftoaproc' könnte auch mit' push offset sum_out' erstellt werden, es sei denn, Sie müssen LEA verwenden, um positionsunabhängigen Code unter Verwendung von RIP-relativer Adressierung zu erstellen. Statt in "prod_real" zu speichern und dann zu schieben, könnten Sie auch Platz auf dem Stapel schaffen und darin speichern. –