-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlisting2.txt
117 lines (117 loc) · 7.95 KB
/
listing2.txt
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
0000 5B 00 00 00 | in // input of coefficients
0001 5B 00 00 00 | in // ax^2 + bx + c = 0
0002 5B 00 00 00 | in //
0003 44 00 00 00 02 00 00 00 02 00 00 00 | pop cx //
0006 44 00 00 00 02 00 00 00 01 00 00 00 | pop bx //
0009 44 00 00 00 02 00 00 00 00 00 00 00 | pop ax //
0012 43 00 00 00 00 00 00 00 00 00 00 00 | push 0
0015 44 00 00 00 02 00 00 00 0C 00 00 00 | pop R12 // number of roots
0018 43 00 00 00 00 00 00 00 00 00 00 00 | push 0 //R10 = R11 = 0
0021 44 00 00 00 02 00 00 00 0A 00 00 00 | pop R10 //
0024 43 00 00 00 00 00 00 00 00 00 00 00 | push 0 //
0027 44 00 00 00 02 00 00 00 0B 00 00 00 | pop R11 //
0030 43 00 00 00 02 00 00 00 00 00 00 00 | push ax // if ax == 0
0033 43 00 00 00 00 00 00 00 00 00 00 00 | push 0 // then solve a linear
0036 4D 00 00 00 FF FF FF FF | je linear_eq:
0038 43 00 00 00 02 00 00 00 01 00 00 00 | push bx //
0041 43 00 00 00 02 00 00 00 01 00 00 00 | push bx // bx^2
0044 47 00 00 00 | mul //
0045 43 00 00 00 00 00 00 00 04 00 00 00 | push 4 // 4*ax*cx
0048 43 00 00 00 02 00 00 00 00 00 00 00 | push ax //
0051 43 00 00 00 02 00 00 00 02 00 00 00 | push cx //
0054 47 00 00 00 | mul //
0055 47 00 00 00 | mul //
0056 46 00 00 00 | sub // bx^2 - 4*ax*cx
0057 44 00 00 00 02 00 00 00 04 00 00 00 | pop R4
0060 43 00 00 00 00 00 00 00 00 00 00 00 | push 0 //
0063 43 00 00 00 02 00 00 00 04 00 00 00 | push R4 // if R4 < 0
0066 4C 00 00 00 FF FF FF FF | jb END: // end
0068 43 00 00 00 02 00 00 00 04 00 00 00 | push R4 //
0071 49 00 00 00 | sqrt //
0072 44 00 00 00 02 00 00 00 04 00 00 00 | pop R4 // R4^2 - discriminant
0075 43 00 00 00 00 00 00 00 FF FF FF FF | push -1 // -R4
0078 43 00 00 00 02 00 00 00 04 00 00 00 | push R4 //
0081 47 00 00 00 | mul //
0082 44 00 00 00 02 00 00 00 04 00 00 00 | pop R4 //
0085 4F 00 00 00 FF FF FF FF | call square_eq: //
0087 44 00 00 00 02 00 00 00 0A 00 00 00 | pop R10 // x0 = R10
0090 43 00 00 00 00 00 00 00 FF FF FF FF | push -1 //+R4
0093 43 00 00 00 02 00 00 00 04 00 00 00 | push R4 //
0096 47 00 00 00 | mul //
0097 44 00 00 00 02 00 00 00 04 00 00 00 | pop R4 //
0100 4F 00 00 00 FF FF FF FF | call square_eq: //
0102 44 00 00 00 02 00 00 00 0B 00 00 00 | pop R11 // x1 = R11
0105 43 00 00 00 02 00 00 00 0A 00 00 00 | push R10 //
0108 43 00 00 00 02 00 00 00 0B 00 00 00 | push R11 //
0111 43 00 00 00 00 00 00 00 01 00 00 00 | push 1 //
0114 44 00 00 00 02 00 00 00 0C 00 00 00 | pop R12 // nroots = 1
0117 4D 00 00 00 FF FF FF FF | je END: // if x0==x1 goto 4
0119 43 00 00 00 00 00 00 00 02 00 00 00 | push 2 // x0 != x1
0122 44 00 00 00 02 00 00 00 0C 00 00 00 | pop R12 // nroots = 2
0125 43 00 00 00 02 00 00 00 0C 00 00 00 | push R12 // if nroots != 0
0128 43 00 00 00 00 00 00 00 00 00 00 00 | push 0 //
0131 4E 00 00 00 FF FF FF FF | jne 8: //
0133 43 00 00 00 00 00 00 00 00 00 00 00 | push 0
0136 42 00 00 00 | out
0137 41 00 00 00 | end
0138 43 00 00 00 02 00 00 00 0C 00 00 00 | push R12 // if nroots != 1
0141 43 00 00 00 00 00 00 00 01 00 00 00 | push 1 //
0144 4E 00 00 00 FF FF FF FF | jne 9: //
0146 43 00 00 00 02 00 00 00 0A 00 00 00 | push R10
0149 43 00 00 00 02 00 00 00 0C 00 00 00 | push R12
0152 42 00 00 00 | out
0153 42 00 00 00 | out
0154 41 00 00 00 | end
0155 43 00 00 00 02 00 00 00 0C 00 00 00 | push R12
0158 43 00 00 00 00 00 00 00 02 00 00 00 | push 2
0161 4E 00 00 00 FF FF FF FF | jne 0:
0163 43 00 00 00 02 00 00 00 0B 00 00 00 | push R11
0166 43 00 00 00 02 00 00 00 0A 00 00 00 | push R10
0169 43 00 00 00 02 00 00 00 0C 00 00 00 | push R12
0172 42 00 00 00 | out
0173 42 00 00 00 | out
0174 42 00 00 00 | out
0175 41 00 00 00 | end
0176 43 00 00 00 00 00 00 00 08 00 00 00 | push 8
0179 43 00 00 00 00 00 00 00 08 00 00 00 | push 8
0182 43 00 00 00 00 00 00 00 08 00 00 00 | push 8
0185 42 00 00 00 | out
0186 42 00 00 00 | out
0187 42 00 00 00 | out
0188 41 00 00 00 | end
0189 43 00 00 00 02 00 00 00 01 00 00 00 | push bx // -bx
0192 43 00 00 00 00 00 00 00 FF FF FF FF | push -1 //
0195 47 00 00 00 | mul //
0196 43 00 00 00 02 00 00 00 04 00 00 00 | push R4 //
0199 45 00 00 00 | add // -bx +/- R4
0200 43 00 00 00 00 00 00 00 02 00 00 00 | push 2 //
0203 43 00 00 00 02 00 00 00 00 00 00 00 | push ax //
0206 47 00 00 00 | mul //
0207 48 00 00 00 | div // (-bx +/- R4) / (2 * ax)
0208 5A 00 00 00 | ret
0209 43 00 00 00 02 00 00 00 02 00 00 00 | push cx // jmp = 1
0212 43 00 00 00 00 00 00 00 00 00 00 00 | push 0
0215 4D 00 00 00 FF FF FF FF | je 5: // if cx == 0
0217 43 00 00 00 00 00 00 00 00 00 00 00 | push 0
0220 43 00 00 00 02 00 00 00 01 00 00 00 | push bx
0223 4D 00 00 00 FF FF FF FF | je 7:
0225 43 00 00 00 00 00 00 00 01 00 00 00 | push 1
0228 44 00 00 00 02 00 00 00 0C 00 00 00 | pop R12
0231 43 00 00 00 02 00 00 00 02 00 00 00 | push cx
0234 43 00 00 00 00 00 00 00 FF FF FF FF | push -1
0237 47 00 00 00 | mul
0238 43 00 00 00 02 00 00 00 01 00 00 00 | push bx
0241 48 00 00 00 | div
0242 44 00 00 00 02 00 00 00 0A 00 00 00 | pop R10
0245 4A 00 00 00 7D 00 00 00 | jmp END:
0247 43 00 00 00 02 00 00 00 01 00 00 00 | push bx
0250 43 00 00 00 00 00 00 00 00 00 00 00 | push 0
0253 4E 00 00 00 FF FF FF FF | jne 6: // if bx!=0
0255 43 00 00 00 00 00 00 00 03 00 00 00 | push 3 // nroots = inf
0258 44 00 00 00 02 00 00 00 0C 00 00 00 | pop R12 //
0261 4A 00 00 00 7D 00 00 00 | jmp END:
0263 43 00 00 00 00 00 00 00 01 00 00 00 | push 1
0266 44 00 00 00 02 00 00 00 0C 00 00 00 | pop R12 // one root = 0
0269 43 00 00 00 00 00 00 00 00 00 00 00 | push 0
0272 44 00 00 00 02 00 00 00 0A 00 00 00 | pop R10
0275 4A 00 00 00 7D 00 00 00 | jmp END: