ПОСЛЕДНИЕ ИЗОБРАЖЕНИЯ
Я пытаюсь запустить эту программу Quadratic Equation с плавающей запятой на x86 MASM. Этот код содержится в учебнике Kip Irvine x86, и я хочу посмотреть, как он работает визуально. Ниже приведен следующий код:
include irvine32.inc
.DATA
a REAL4 3.0
b REAL4 7.0
cc REAL4 2.0
posx REAL4 0.0
negx REAL4 0.0
.CODE
main proc
; Solve quadratic equation - no error checking
; The formula is: -b +/- squareroot(b2 - 4ac) / (2a)
fld1 ; Get constants 2 and 4
fadd st,st ; 2 at bottom
fld st ; Copy it
fmul a ; = 2a
fmul st(1),st ; = 4a
fxch ; Exchange
fmul cc ; = 4ac
fld b ; Load b
fmul st,st ; = b2
fsubr ; = b2 - 4ac
; Negative value here produces error
fsqrt ; = square root(b2 - 4ac)
fld b ; Load b
fchs ; Make it negative
fxch ; Exchange
fld st ; Copy square root
fadd st,st(2) ; Plus version = -b + root(b2 - 4ac)
fxch ; Exchange
fsubp st(2),st ; Minus version = -b - root(b2 - 4ac)
fdiv st,st(2) ; Divide plus version
fstp posx ; Store it
fdivr ; Divide minus version
fstp negx ; Store it
call writeint
exit
main endp
end main
Итак, я смог полностью скомпилировать, выполнить и полностью выполнить свою программу. Однако, всякий раз, когда я запускаю программу, я получаю это как результат:
+1694175115
Почему результат такой большой? Также я попробовал называть writefloat, но он говорит, что эта процедура не находится в библиотеке Irvine32.inc или Macros.inc. Может кто-нибудь показать мне, почему он не работает и что нужно исправить? Благодарю.