Задачка на ассемблере
Доброго времени суток, нужна помощь в написании программы на ассемблере, вычисляющей дискриминант функции y=2x^2+3x-20
.model small
.data
a dd 2.0
b dd 4.0
c dd 2.0
D dd ?
mes1 db 'No roots! $'
temp dd 4.0
temp2 dd 2.0
.stack 256h
.code
;Main PROC
main proc
push @data
pop ds
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
finit
; discriminante
; C++:
; D = sqr(b)-4*a*c
fld b
fmul b
fld a
fld temp
fmul
fld c
fmul
fsubp st(1),st(0)
fst D
; <=>
ftst
fstsw ax
sahf
jc j1
jz j2
; D > 0
; X1 = (-b-sqrt(D))/(2*a)
; X2 = (-b+sqrt(D))/(2*a)
finit
fld temp2
fmul a
fld D
fsqrt
fld b
fchs
fsave temp2[4]
frstor temp2[4]
fsubr
fdivr ; first root
frstor temp2[4]
fadd
fdivr ; second root
jmp ex
; D < 0
; !no roots!
j1: mov ah, 09h
mov dx, offset mes1
int 21h
jmp ex
; D = 0
; X = -b/(2*a)
j2: finit
fld temp2
fmul a
fld b
fdivr
fchs ; root
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ex: mov ax, 04C00h
int 21h
main endp
;end of main
end main
Сначала определится с архитектурой, т. к. просто ассемблер понятие абстрактное.
так а в чём проблема? используй ФПУ с плавающей точкой и работай через стек сопроцессора :)