Rev 4865 | Rev 4882 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4865 | Rev 4875 | ||
---|---|---|---|
Line 10... | Line 10... | ||
10 | { |
10 | { |
11 | mov [error_n], err |
11 | mov [error_n], err |
12 | ret |
12 | ret |
13 | } |
13 | } |
Line 14... | Line -... | ||
14 | - | ||
15 | proc convert_to_str uses ebx ecx edx esi edi, _num, _str |
- | |
16 | mov eax, [_num] |
- | |
17 | mov esi, [_str] |
- | |
18 | mov edi, 0 |
- | |
19 | mov ecx, eax |
- | |
20 | and ecx, 1 shl 31 |
- | |
21 | cmp ecx, 0 |
- | |
22 | je @f |
- | |
23 | mov [esi], byte "-" |
- | |
24 | inc esi |
- | |
25 | inc edi |
- | |
26 | not eax |
- | |
27 | inc eax |
- | |
28 | @@: |
- | |
29 | mov ebx, 10 |
- | |
30 | xor ecx, ecx |
- | |
31 | @@: |
- | |
32 | xor edx, edx |
- | |
33 | div ebx |
- | |
34 | push edx |
- | |
35 | inc ecx |
- | |
36 | inc edi |
- | |
37 | cmp eax, 0 |
- | |
38 | jne @b |
- | |
39 | @@: |
- | |
40 | pop eax |
- | |
41 | add al, "0" |
- | |
42 | mov [esi], al |
- | |
43 | inc esi |
- | |
44 | loop @b |
- | |
45 | mov [esi], byte 0 |
- | |
46 | mov eax, edi |
- | |
47 | ret |
- | |
48 | endp |
- | |
49 | 14 | ||
Line 50... | Line 15... | ||
50 | ; --------------------------- |
15 | ; --------------------------- |
51 | 16 | ||
- | 17 | proc parse |
|
- | 18 | mov [exp_pos], 0 |
|
- | 19 | stdcall skip_spaces |
|
- | 20 | ||
- | 21 | mov ebx, exp |
|
- | 22 | add ebx, [exp_pos] |
|
- | 23 | cmp [ebx], byte 0 |
|
- | 24 | je .null_exp |
|
52 | proc parse |
25 | |
53 | mov [exp_pos], 0 |
26 | mov [exp_lvl], 0 |
54 | mov [error_n], 0 |
27 | mov [error_n], 0 |
- | 28 | stdcall parse_lvl0 |
|
- | 29 | ret |
|
- | 30 | ||
- | 31 | .null_exp: |
|
55 | stdcall parse_lvl0 |
32 | mov eax, 0 |
Line 56... | Line 33... | ||
56 | ret |
33 | ret |
Line 57... | Line 34... | ||
57 | endp |
34 | endp |
Line 66... | Line 43... | ||
66 | mov ebx, exp |
43 | mov ebx, exp |
67 | add ebx, [exp_pos] |
44 | add ebx, [exp_pos] |
68 | cmp [ebx], byte 0 |
45 | cmp [ebx], byte 0 |
69 | je .end |
46 | je .end |
70 | cmp [ebx], byte ")" |
47 | cmp [ebx], byte ")" |
71 | je .end |
48 | je .brk_end |
72 | inc [exp_pos] |
49 | inc [exp_pos] |
73 | cmp [ebx], byte "+" |
50 | cmp [ebx], byte "+" |
74 | jne .not_add |
51 | jne .not_add |
75 | mov ecx, eax |
52 | mov ecx, eax |
76 | stdcall parse_lvl1 |
53 | stdcall parse_lvl1 |
77 | test_err |
54 | test_err |
78 | add eax, ecx |
55 | add eax, ecx |
79 | jmp @b |
56 | jmp @b |
80 | .not_add: |
57 | .not_add: |
81 | cmp [ebx], byte "-" |
58 | cmp [ebx], byte "-" |
82 | jne @b |
59 | jne .unexp_char |
83 | mov ecx, eax |
60 | mov ecx, eax |
84 | stdcall parse_lvl1 |
61 | stdcall parse_lvl1 |
85 | test_err |
62 | test_err |
86 | sub ecx, eax |
63 | sub ecx, eax |
87 | mov eax, ecx |
64 | mov eax, ecx |
88 | jmp @b |
65 | jmp @b |
- | 66 | .brk_end: |
|
- | 67 | cmp [exp_lvl], 0 |
|
- | 68 | jne @f |
|
- | 69 | set_err 3 |
|
- | 70 | @@: |
|
- | 71 | dec [exp_lvl] |
|
89 | .end: |
72 | .end: |
90 | ret |
73 | ret |
- | 74 | .unexp_char: |
|
- | 75 | set_err 4 |
|
91 | endp |
76 | endp |
Line 92... | Line 77... | ||
92 | 77 | ||
Line 93... | Line 78... | ||
93 | ; --------------------------- |
78 | ; --------------------------- |
Line 99... | Line 84... | ||
99 | @@: |
84 | @@: |
100 | mov ebx, exp |
85 | mov ebx, exp |
101 | add ebx, [exp_pos] |
86 | add ebx, [exp_pos] |
102 | cmp [ebx], byte 0 |
87 | cmp [ebx], byte 0 |
103 | je .end |
88 | je .end |
104 | inc [exp_pos] |
- | |
105 | cmp [ebx], byte "*" |
89 | cmp [ebx], byte "*" |
106 | jne .not_mul |
90 | jne .not_mul |
- | 91 | inc [exp_pos] |
|
107 | mov ecx, eax |
92 | mov ecx, eax |
108 | stdcall parse_lvl2 |
93 | stdcall parse_lvl2 |
109 | test_err |
94 | test_err |
110 | imul ecx, eax |
95 | imul ecx, eax |
111 | mov eax, ecx |
96 | mov eax, ecx |
Line 115... | Line 100... | ||
115 | je .div_or_mod |
100 | je .div_or_mod |
116 | cmp [ebx], byte "%" |
101 | cmp [ebx], byte "%" |
117 | je .div_or_mod |
102 | je .div_or_mod |
118 | jmp .end |
103 | jmp .end |
119 | .div_or_mod: |
104 | .div_or_mod: |
- | 105 | inc [exp_pos] |
|
120 | mov ecx, eax |
106 | mov ecx, eax |
121 | stdcall parse_lvl2 |
107 | stdcall parse_lvl2 |
122 | test_err |
108 | test_err |
123 | cmp eax, 0 |
109 | cmp eax, 0 |
124 | jne .not_null |
110 | jne .not_null |
Line 132... | Line 118... | ||
132 | jmp @b |
118 | jmp @b |
133 | .mod: |
119 | .mod: |
134 | mov eax, edx |
120 | mov eax, edx |
135 | jmp @b |
121 | jmp @b |
136 | .end: |
122 | .end: |
137 | dec [exp_pos] |
- | |
138 | ret |
123 | ret |
139 | endp |
124 | endp |
Line 140... | Line 125... | ||
140 | 125 | ||
Line -... | Line 126... | ||
- | 126 | ; --------------------------- |
|
- | 127 | ||
- | 128 | proc parse_lvl2 uses ebx ecx edx |
|
- | 129 | test_err |
|
- | 130 | stdcall parse_lvl3 |
|
- | 131 | test_err |
|
- | 132 | @@: |
|
- | 133 | mov ebx, exp |
|
- | 134 | add ebx, [exp_pos] |
|
- | 135 | cmp [ebx], byte 0 |
|
- | 136 | je .end |
|
- | 137 | cmp [ebx], byte "^" |
|
- | 138 | jne .end |
|
- | 139 | inc [exp_pos] |
|
- | 140 | mov ecx, eax |
|
- | 141 | stdcall parse_lvl2 |
|
- | 142 | test_err |
|
- | 143 | stdcall c_power |
|
- | 144 | jmp @b |
|
- | 145 | .end: |
|
- | 146 | ret |
|
- | 147 | endp |
|
- | 148 | ||
141 | ; --------------------------- |
149 | ; --------------------------- |
142 | 150 | ||
143 | proc parse_lvl2 uses ebx |
151 | proc parse_lvl3 uses ebx |
144 | test_err |
152 | test_err |
145 | stdcall skip_spaces |
153 | stdcall skip_spaces |
146 | mov ebx, exp |
154 | mov ebx, exp |
147 | add ebx, [exp_pos] |
155 | add ebx, [exp_pos] |
148 | cmp [ebx], byte 48 |
156 | cmp [ebx], byte 48 |
149 | jl @f |
157 | jl @f |
150 | cmp [ebx], byte 57 |
158 | cmp [ebx], byte 57 |
151 | jg @f |
159 | jg @f |
152 | stdcall parse_lvl3 |
160 | stdcall parse_lvl4 |
153 | jmp .end |
161 | jmp .end |
154 | @@: |
162 | @@: |
155 | inc [exp_pos] |
163 | inc [exp_pos] |
- | 164 | cmp [ebx], byte "(" |
|
156 | cmp [ebx], byte "(" |
165 | jne @f |
157 | jne @f |
166 | inc [exp_lvl] |
- | 167 | stdcall parse_lvl0 |
|
- | 168 | test_err |
|
- | 169 | mov ebx, exp |
|
- | 170 | add ebx, [exp_pos] |
|
- | 171 | cmp [ebx], byte ")" |
|
- | 172 | je .brk_ok |
|
158 | stdcall parse_lvl0 |
173 | set_err 2 |
159 | test_err |
174 | .brk_ok: |
160 | inc [exp_pos] |
175 | inc [exp_pos] |
161 | jmp .end |
176 | jmp .end |
162 | @@: |
177 | @@: |
163 | cmp [ebx], byte "+" |
178 | cmp [ebx], byte "+" |
164 | jne @f |
179 | jne @f |
165 | stdcall parse_lvl2 |
180 | stdcall parse_lvl3 |
166 | test_err |
181 | test_err |
167 | jmp .end |
182 | jmp .end |
168 | @@: |
183 | @@: |
169 | cmp [ebx], byte "-" |
184 | cmp [ebx], byte "-" |
170 | jne .end |
185 | jne .unexp_char |
171 | stdcall parse_lvl2 |
186 | stdcall parse_lvl3 |
172 | test_err |
187 | test_err |
173 | neg eax |
188 | neg eax |
174 | .end: |
189 | .end: |
- | 190 | stdcall skip_spaces |
|
- | 191 | ret |
|
- | 192 | .unexp_char: |
|
- | 193 | set_err 4 |
|
- | 194 | endp |
|
- | 195 | ||
- | 196 | ; --------------------------- |
|
- | 197 | ||
- | 198 | proc parse_lvl4 uses ebx ecx |
|
- | 199 | stdcall parse_lvl5 |
|
- | 200 | @@: |
|
- | 201 | mov ebx, exp |
|
- | 202 | add ebx, [exp_pos] |
|
- | 203 | cmp [ebx], byte 0 |
|
- | 204 | je .end |
|
- | 205 | cmp [ebx], byte "^" |
|
- | 206 | jne .end |
|
- | 207 | inc [exp_pos] |
|
- | 208 | mov ecx, eax |
|
- | 209 | mov ebx, exp |
|
- | 210 | add ebx, [exp_pos] |
|
- | 211 | cmp [ebx], byte 48 |
|
- | 212 | jl .unexp_char |
|
- | 213 | cmp [ebx], byte 57 |
|
- | 214 | jg .unexp_char |
|
- | 215 | stdcall parse_lvl4 |
|
- | 216 | stdcall c_power |
|
- | 217 | jmp @b |
|
- | 218 | .end: |
|
- | 219 | ret |
|
175 | stdcall skip_spaces |
220 | .unexp_char: |
Line 176... | Line 221... | ||
176 | ret |
221 | set_err 4 |
Line 177... | Line 222... | ||
177 | endp |
222 | endp |
178 | 223 | ||
179 | ; --------------------------- |
224 | ; --------------------------- |
180 | 225 | ||
181 | proc parse_lvl3 uses ebx ecx |
226 | proc parse_lvl5 uses ebx ecx |
182 | sub eax, eax |
227 | sub eax, eax |
Line 213... | Line 258... | ||
213 | inc [exp_pos] |
258 | inc [exp_pos] |
214 | jmp @b |
259 | jmp @b |
215 | @@: |
260 | @@: |
216 | ret |
261 | ret |
217 | endp |
262 | endp |
218 | 263 | ||
- | 264 | ; --------------------------- |
|
- | 265 | ||
- | 266 | proc c_power uses ebx |
|
- | 267 | mov ebx, eax |
|
- | 268 | mov eax, 1 |
|
- | 269 | @@: |
|
- | 270 | cmp ebx, 0 |
|
- | 271 | je @f |
|
- | 272 | imul eax, ecx |
|
- | 273 | dec ebx |
|
- | 274 | jmp @b |
|
- | 275 | @@: |
|
- | 276 | ret |
|
- | 277 | endp |
|
- | 278 | ||
- | 279 | ; --------------------------- |
|
- | 280 | ||
- | 281 | proc convert_to_str uses ebx ecx edx esi edi, _num, _str |
|
- | 282 | mov eax, [_num] |
|
- | 283 | mov esi, [_str] |
|
- | 284 | mov edi, 0 |
|
- | 285 | mov ecx, eax |
|
- | 286 | and ecx, 1 shl 31 |
|
- | 287 | cmp ecx, 0 |
|
- | 288 | je @f |
|
- | 289 | mov [esi], byte "-" |
|
- | 290 | inc esi |
|
- | 291 | inc edi |
|
- | 292 | not eax |
|
- | 293 | inc eax |
|
- | 294 | @@: |
|
- | 295 | mov ebx, 10 |
|
- | 296 | xor ecx, ecx |
|
- | 297 | @@: |
|
- | 298 | xor edx, edx |
|
- | 299 | div ebx |
|
- | 300 | push edx |
|
- | 301 | inc ecx |
|
- | 302 | inc edi |
|
- | 303 | cmp eax, 0 |
|
- | 304 | jne @b |
|
- | 305 | @@: |
|
- | 306 | pop eax |
|
- | 307 | add al, "0" |
|
- | 308 | mov [esi], al |
|
- | 309 | inc esi |
|
- | 310 | loop @b |
|
- | 311 | mov [esi], byte 0 |
|
- | 312 | mov eax, edi |
|
- | 313 | ret |
|
- | 314 | endp |
|
- | 315 | ||
219 | 316 |