1,9 → 1,9 |
|
; flat assembler core |
; Copyright (c) 1999-2012, Tomasz Grysztar. |
; All rights reserved. |
|
convert_expression: |
|
; flat assembler core |
; Copyright (c) 1999-2012, Tomasz Grysztar. |
; All rights reserved. |
|
convert_expression: |
push ebp |
call get_fp_value |
jnc fp_expression |
12,14 → 12,14 |
push edi |
mov edi,single_operand_operators |
call get_operator |
pop edi |
or al,al |
jz expression_element |
cmp al,82h |
je expression_loop |
push eax |
jmp expression_loop |
expression_element: |
pop edi |
or al,al |
jz expression_element |
cmp al,82h |
je expression_loop |
push eax |
jmp expression_loop |
expression_element: |
mov al,[esi] |
cmp al,1Ah |
je expression_number |
131,18 → 131,46 |
cmp al,')' |
jne invalid_expression |
ret |
symbol_value: |
cmp [source_start],0 |
je preprocessor_value |
push edi |
mov edi,address_registers |
call get_operator |
symbol_value: |
cmp [source_start],0 |
je preprocessor_value |
push edi esi |
lods word [esi] |
cmp al,1Ah |
jne no_address_register |
movzx ecx,ah |
call get_symbol |
jc no_address_register |
cmp al,10h |
jne no_address_register |
mov al,ah |
shr ah,4 |
cmp ah,4 |
je register_value |
cmp ah,8 |
je register_value |
cmp ah,0Ch |
je register_value |
cmp ah,0Dh |
je register_value |
cmp ah,0Fh |
je register_value |
cmp ah,2 |
jne no_address_register |
cmp al,23h |
je register_value |
cmp al,25h |
je register_value |
cmp al,26h |
je register_value |
cmp al,27h |
je register_value |
no_address_register: |
pop esi |
mov edi,directive_operators |
call get_operator |
pop edi |
or al,al |
jnz register_value |
mov edi,directive_operators |
call get_operator |
pop edi |
or al,al |
jnz broken_value |
lods byte [esi] |
cmp al,1Ah |
155,13 → 183,13 |
stos dword [edi] |
ret |
broken_value: |
mov eax,0Fh |
jmp store_label_value |
register_value: |
pop edi |
mov byte [edi-1],10h |
stos byte [edi] |
ret |
mov eax,0Fh |
jmp store_label_value |
register_value: |
pop edx edi |
mov byte [edi-1],10h |
stos byte [edi] |
ret |
preprocessor_value: |
dec edi |
cmp [hash_tree],0 |
390,18 → 418,18 |
cmp al,7 |
ja bad_number |
oct_digit_ok: |
xor edx,edx |
mov cl,bl |
dec esi |
cmp bl,63 |
ja oct_out_of_range |
jne oct_range_ok |
cmp al,1 |
ja oct_out_of_range |
oct_range_ok: |
add bl,3 |
cmp cl,30 |
je oct_digit_wrap |
xor edx,edx |
mov cl,bl |
dec esi |
cmp bl,63 |
ja oct_out_of_range |
jne oct_range_ok |
cmp al,1 |
ja oct_out_of_range |
oct_range_ok: |
add bl,3 |
cmp cl,30 |
je oct_digit_wrap |
ja oct_digit_high |
shl eax,cl |
or dword [edi],eax |