-
Notifications
You must be signed in to change notification settings - Fork 2
/
algebraicRoots.asm
144 lines (127 loc) · 1.7 KB
/
algebraicRoots.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
;Find the algebraic roots of the equation a*x^2+b*x+c, where a,b,c are given as the inputs.
section .text
global main
extern scanf
extern printf
print:
push ebp
mov ebp, esp
sub esp, 8
fst qword[ebp-8]
push format2
call printf
mov esp, ebp
pop ebp
ret
read:
push ebp
mov ebp, esp
sub esp, 8
lea eax, [esp]
push eax
push format1
call scanf
fld qword[ebp-8]
mov esp, ebp
pop ebp
ret
main:
mov eax, 4
mov ebx, 1
mov ecx, msg1
mov edx, len1
int 80h
call read
fstp qword[a]
call read
fstp qword[b]
call read
fstp qword[c]
fld qword[b]
fmul st0
fld qword[a]
fmul qword[c]
mov dword[cons], 4
fimul dword[cons]
fsubr st1
fstp qword[d]
ffree st0
fldz
fcomp qword[d]
fstsw ax
sahf
jna a1
mov eax, 4
mov ebx, 1
mov ecx, msg2
mov edx, len2
int 80h
jmp exit
a1:
fldz
fcomp qword[d]
fstsw ax
sahf
jne a2
mov eax, 4
mov ebx, 1
mov ecx, msg3
mov edx, len3
int 80h
fldz
fsub qword[b]
mov dword[cons], 2
fidiv dword[cons]
fdiv qword[a]
call print
jmp exit
a2:
mov eax, 4
mov ebx, 1
mov ecx, msg4
mov edx, len4
int 80h
fld qword[d]
fsqrt
fsub qword[b]
mov dword[cons], 2
fidiv dword[cons]
fdiv qword[a]
call print
ffree st0
fld qword[d]
fsqrt
fadd qword[b]
fldz
fsub st1
mov dword[cons], 2
fidiv dword[cons]
fdiv qword[a]
call print
exit:
mov eax, 4
mov ebx, 1
mov ecx, newline
mov edx, 1
int 80h
mov eax, 1
mov ebx, 0
int 80h
section .bss
a: resq 1
b: resq 1
c: resq 1
d: resq 1
cons: resd 1
section .data
msg1 db 'Enter 3 numbers : '
len1 equ $-msg1
msg2 db 'No roots',10
len2 equ $-msg2
msg3 db 'The root is ',10
len3 equ $-msg3
msg4 db 'The roots are ',10
len4 equ $-msg4
format1 db "%lf",0
format2 db "%lf "
newline db 10