Top.Mail.Ru
Ответы

Задачка на ассемблере

Доброго времени суток, нужна помощь в написании программы на ассемблере, вычисляющей дискриминант функции y=2x^2+3x-20

По дате
По рейтингу
Аватар пользователя
Новичок
13лет

.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

Аватар пользователя
Просветленный
13лет

Сначала определится с архитектурой, т. к. просто ассемблер понятие абстрактное.

Аватар пользователя
Ученик
13лет

так а в чём проблема? используй ФПУ с плавающей точкой и работай через стек сопроцессора :)