Rev 226 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 226 | Rev 242 | ||
---|---|---|---|
Line 178... | Line 178... | ||
178 | mov dword [edi+4],0 |
178 | mov dword [edi+4],0 |
179 | cmp byte [ebx],'$' |
179 | cmp byte [ebx],'$' |
180 | je pascal_hex_number |
180 | je pascal_hex_number |
181 | cmp word [ebx],'0x' |
181 | cmp word [ebx],'0x' |
182 | je c_hex_number |
182 | je get_hex_number |
183 | mov al,[esi] |
183 | mov al,[esi] |
184 | dec esi |
184 | dec esi |
185 | cmp al,'h' |
185 | cmp al,'h' |
186 | je get_hex_number |
186 | je get_hex_number |
187 | cmp al,'b' |
187 | cmp al,'b' |
188 | je get_bin_number |
188 | je get_bin_number |
Line 277... | Line 277... | ||
277 | or al,al |
277 | or al,al |
278 | jz get_bin_digit |
278 | jz get_bin_digit |
279 | or ebp,-1 |
279 | or ebp,-1 |
280 | jmp get_bin_digit |
280 | jmp get_bin_digit |
281 | c_hex_number: |
281 | pascal_hex_number: |
282 | cmp cl,2 |
- | |
283 | je bad_number |
- | |
284 | pascal_hex_number: |
- | |
285 | cmp cl,1 |
282 | cmp cl,1 |
286 | je bad_number |
283 | je bad_number |
287 | get_hex_number: |
284 | get_hex_number: |
288 | xor bl,bl |
285 | xor bl,bl |
289 | get_hex_digit: |
286 | get_hex_digit: |
Line 1268... | Line 1265... | ||
1268 | cbw |
1265 | cbw |
1269 | cmp ah,dl |
1266 | cmp ah,dl |
1270 | jne value_out_of_range |
1267 | jne value_out_of_range |
1271 | mov [esi+10],al |
1268 | mov [esi+10],al |
1272 | mul_first_register_ok: |
1269 | or al,al |
- | 1270 | jnz mul_first_register_ok |
|
- | 1271 | mov [esi+8],al |
|
- | 1272 | mul_first_register_ok: |
|
1273 | cmp byte [esi+9],0 |
1273 | cmp byte [esi+9],0 |
1274 | je mul_calculated |
1274 | je mul_calculated |
1275 | mov al,[edi] |
1275 | mov al,[edi] |
1276 | cbw |
1276 | cbw |
1277 | cwde |
1277 | cwde |
Line 1285... | Line 1285... | ||
1285 | cbw |
1285 | cbw |
1286 | cmp ah,dl |
1286 | cmp ah,dl |
1287 | jne value_out_of_range |
1287 | jne value_out_of_range |
1288 | mov [esi+11],al |
1288 | mov [esi+11],al |
1289 | mul_calculated: |
1289 | or al,al |
- | 1290 | jnz mul_calculated |
|
- | 1291 | mov [esi+9],al |
|
- | 1292 | mul_calculated: |
|
1290 | pop esi |
1293 | pop esi |
1291 | jmp calculation_loop |
1294 | jmp calculation_loop |
1292 | calculate_div: |
1295 | calculate_div: |
1293 | push esi edx |
1296 | push esi edx |
1294 | mov esi,ebx |
1297 | mov esi,ebx |
Line 2173... | Line 2176... | ||
2173 | mov [value_type],7 |
2176 | mov [value_type],7 |
2174 | ret |
2177 | ret |
2175 | 2178 | ||
Line 2176... | Line 2179... | ||
2176 | preevaluate_logical_expression: |
2179 | preevaluate_logical_expression: |
- | 2180 | xor al,al |
|
- | 2181 | preevaluate_embedded_logical_expression: |
|
- | 2182 | mov [logical_value_wrapping],al |
|
2177 | push edi |
2183 | push edi |
2178 | call preevaluate_logical_value |
2184 | call preevaluate_logical_value |
2179 | preevaluation_loop: |
2185 | preevaluation_loop: |
2180 | cmp al,0FFh |
2186 | cmp al,0FFh |
2181 | je invalid_logical_expression |
2187 | je invalid_logical_expression |
Line 2261... | Line 2267... | ||
2261 | negation_skipped: |
2267 | negation_skipped: |
2262 | cmp byte [esi],'{' |
2268 | cmp byte [esi],'{' |
2263 | jne skip_simple_logical_value |
2269 | jne skip_simple_logical_value |
2264 | inc esi |
2270 | inc esi |
2265 | skip_logical_expression: |
2271 | xchg al,[logical_value_wrapping] |
- | 2272 | push eax |
|
- | 2273 | skip_logical_expression: |
|
2266 | call skip_logical_value |
2274 | call skip_logical_value |
2267 | lods byte [esi] |
2275 | lods byte [esi] |
2268 | or al,al |
2276 | or al,al |
2269 | jz wrongly_structured_logical_expression |
2277 | jz wrongly_structured_logical_expression |
2270 | cmp al,0Fh |
2278 | cmp al,0Fh |
Line 2273... | Line 2281... | ||
2273 | je skip_logical_expression |
2281 | je skip_logical_expression |
2274 | cmp al,'&' |
2282 | cmp al,'&' |
2275 | je skip_logical_expression |
2283 | je skip_logical_expression |
2276 | cmp al,'}' |
2284 | cmp al,'}' |
2277 | je logical_value_skipped |
2285 | jne wrongly_structured_logical_expression |
- | 2286 | pop eax |
|
- | 2287 | mov [logical_value_wrapping],al |
|
- | 2288 | logical_value_skipped: |
|
2278 | wrongly_structured_logical_expression: |
2289 | clc |
- | 2290 | ret |
|
- | 2291 | wrongly_structured_logical_expression: |
|
2279 | stc |
2292 | stc |
2280 | ret |
2293 | ret |
2281 | skip_simple_logical_value: |
2294 | skip_simple_logical_value: |
2282 | mov al,[esi] |
2295 | mov [logical_value_parentheses],0 |
- | 2296 | find_simple_logical_value_end: |
|
- | 2297 | mov al,[esi] |
|
2283 | or al,al |
2298 | or al,al |
2284 | jz logical_value_skipped |
2299 | jz logical_value_skipped |
2285 | cmp al,0Fh |
2300 | cmp al,0Fh |
2286 | je logical_value_skipped |
2301 | je logical_value_skipped |
2287 | cmp al,'}' |
2302 | cmp al,'|' |
2288 | je logical_value_skipped |
- | |
2289 | cmp al,'|' |
- | |
2290 | je logical_value_skipped |
2303 | je logical_value_skipped |
2291 | cmp al,'&' |
2304 | cmp al,'&' |
2292 | je logical_value_skipped |
2305 | je logical_value_skipped |
2293 | call skip_symbol |
2306 | cmp al,'{' |
- | 2307 | je skip_logical_value_internal_parenthesis |
|
- | 2308 | cmp al,'}' |
|
- | 2309 | jne skip_logical_value_symbol |
|
- | 2310 | sub [logical_value_parentheses],1 |
|
- | 2311 | jnc skip_logical_value_symbol |
|
- | 2312 | cmp [logical_value_wrapping],al |
|
- | 2313 | jne skip_logical_value_symbol |
|
- | 2314 | jmp logical_value_skipped |
|
- | 2315 | skip_logical_value_internal_parenthesis: |
|
- | 2316 | inc [logical_value_parentheses] |
|
- | 2317 | skip_logical_value_symbol: |
|
- | 2318 | call skip_symbol |
|
2294 | jmp skip_simple_logical_value |
2319 | jmp find_simple_logical_value_end |
2295 | logical_value_skipped: |
2320 | preevaluate_logical_value: |
2296 | clc |
- | |
2297 | ret |
- | |
2298 | - | ||
2299 | preevaluate_logical_value: |
- | |
2300 | mov ebp,edi |
2321 | mov ebp,edi |
2301 | preevaluate_negation: |
2322 | preevaluate_negation: |
2302 | cmp byte [esi],'~' |
2323 | cmp byte [esi],'~' |
2303 | jne preevaluate_negation_ok |
2324 | jne preevaluate_negation_ok |
2304 | movs byte [edi],[esi] |
2325 | movs byte [edi],[esi] |
2305 | jmp preevaluate_negation |
2326 | jmp preevaluate_negation |
2306 | preevaluate_negation_ok: |
2327 | preevaluate_negation_ok: |
2307 | mov ebx,esi |
2328 | mov ebx,esi |
2308 | xor edx,edx |
2329 | cmp byte [esi],'{' |
2309 | cmp byte [esi],'{' |
- | |
2310 | jne find_logical_value_boundaries |
2330 | jne preevaluate_simple_logical_value |
2311 | movs byte [edi],[esi] |
2331 | lods byte [esi] |
2312 | push ebp |
2332 | stos byte [edi] |
- | 2333 | push ebp |
|
2313 | call preevaluate_logical_expression |
2334 | mov dl,[logical_value_wrapping] |
- | 2335 | push edx |
|
- | 2336 | call preevaluate_embedded_logical_expression |
|
2314 | pop ebp |
2337 | pop edx |
- | 2338 | mov [logical_value_wrapping],dl |
|
- | 2339 | pop ebp |
|
2315 | cmp al,0FFh |
2340 | cmp al,0FFh |
2316 | je invalid_logical_value |
2341 | je invalid_logical_value |
2317 | cmp byte [esi],'}' |
2342 | cmp byte [esi],'}' |
2318 | jne invalid_logical_value |
2343 | jne invalid_logical_value |
2319 | or al,al |
2344 | or al,al |
Line 2333... | Line 2358... | ||
2333 | invalid_logical_value: |
2358 | invalid_logical_value: |
2334 | mov edi,ebp |
2359 | mov edi,ebp |
2335 | mov al,0FFh |
2360 | mov al,0FFh |
2336 | ret |
2361 | ret |
2337 | find_logical_value_boundaries: |
2362 | preevaluate_simple_logical_value: |
- | 2363 | xor edx,edx |
|
- | 2364 | mov [logical_value_parentheses],edx |
|
- | 2365 | find_logical_value_boundaries: |
|
2338 | mov al,[esi] |
2366 | mov al,[esi] |
2339 | or al,al |
2367 | or al,al |
2340 | jz logical_value_boundaries_found |
2368 | jz logical_value_boundaries_found |
2341 | cmp al,'}' |
2369 | cmp al,'{' |
- | 2370 | je logical_value_internal_parentheses |
|
- | 2371 | cmp al,'}' |
|
2342 | je logical_value_boundaries_found |
2372 | je logical_value_boundaries_parenthesis_close |
2343 | cmp al,'|' |
2373 | cmp al,'|' |
2344 | je logical_value_boundaries_found |
2374 | je logical_value_boundaries_found |
2345 | cmp al,'&' |
2375 | cmp al,'&' |
2346 | je logical_value_boundaries_found |
2376 | je logical_value_boundaries_found |
2347 | or edx,edx |
2377 | or edx,edx |
2348 | jnz next_symbol_in_logical_value |
2378 | jnz next_symbol_in_logical_value |
Line 2356... | Line 2386... | ||
2356 | mov edx,esi |
2386 | mov edx,esi |
2357 | next_symbol_in_logical_value: |
2387 | next_symbol_in_logical_value: |
2358 | call skip_symbol |
2388 | call skip_symbol |
2359 | jmp find_logical_value_boundaries |
2389 | jmp find_logical_value_boundaries |
2360 | logical_value_boundaries_found: |
2390 | logical_value_internal_parentheses: |
- | 2391 | inc [logical_value_parentheses] |
|
- | 2392 | jmp next_symbol_in_logical_value |
|
- | 2393 | logical_value_boundaries_parenthesis_close: |
|
- | 2394 | sub [logical_value_parentheses],1 |
|
- | 2395 | jnc next_symbol_in_logical_value |
|
- | 2396 | cmp [logical_value_wrapping],'{' |
|
- | 2397 | jne next_symbol_in_logical_value |
|
- | 2398 | logical_value_boundaries_found: |
|
2361 | or edx,edx |
2399 | or edx,edx |
2362 | jz non_preevaluable_logical_value |
2400 | jz non_preevaluable_logical_value |
2363 | mov al,[edx] |
2401 | mov al,[edx] |
2364 | cmp al,0F0h |
2402 | cmp al,0F0h |
2365 | je compare_symbols |
2403 | je compare_symbols |
Line 2504... | Line 2542... | ||
2504 | pop esi edi |
2542 | pop esi edi |
2505 | jmp invalid_logical_value |
2543 | jmp invalid_logical_value |
2506 | 2544 | ||
Line 2507... | Line 2545... | ||
2507 | calculate_logical_expression: |
2545 | calculate_logical_expression: |
- | 2546 | xor al,al |
|
- | 2547 | calculate_embedded_logical_expression: |
|
- | 2548 | mov [logical_value_wrapping],al |
|
2508 | call get_logical_value |
2549 | call get_logical_value |
2509 | logical_loop: |
2550 | logical_loop: |
2510 | cmp byte [esi],'|' |
2551 | cmp byte [esi],'|' |
2511 | je logical_or |
2552 | je logical_or |
2512 | cmp byte [esi],'&' |
2553 | cmp byte [esi],'&' |
Line 2746... | Line 2787... | ||
2746 | return_true: |
2787 | return_true: |
2747 | or al,-1 |
2788 | or al,-1 |
2748 | jmp logical_value_ok |
2789 | jmp logical_value_ok |
2749 | logical_expression: |
2790 | logical_expression: |
2750 | inc esi |
2791 | lods byte [esi] |
- | 2792 | mov dl,[logical_value_wrapping] |
|
- | 2793 | push edx |
|
2751 | call calculate_logical_expression |
2794 | call calculate_embedded_logical_expression |
2752 | push eax |
2795 | pop edx |
- | 2796 | mov [logical_value_wrapping],dl |
|
- | 2797 | push eax |
|
2753 | lods byte [esi] |
2798 | lods byte [esi] |
2754 | cmp al,'}' |
2799 | cmp al,'}' |
2755 | jne invalid_expression |
2800 | jne invalid_expression |
2756 | pop eax |
2801 | pop eax |
2757 | logical_value_ok: |
2802 | logical_value_ok: |