forked from KolibriOS/kolibrios
fasm: the program updated to 1.70.01
tested with the kernel and several applications sorry for previous ugly commit git-svn-id: svn://kolibrios.org@2665 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
@@ -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 @@ convert_expression:
|
||||
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,17 +131,45 @@ convert_number:
|
||||
cmp al,')'
|
||||
jne invalid_expression
|
||||
ret
|
||||
symbol_value:
|
||||
cmp [source_start],0
|
||||
je preprocessor_value
|
||||
push edi
|
||||
mov edi,address_registers
|
||||
call get_operator
|
||||
or al,al
|
||||
jnz register_value
|
||||
mov edi,directive_operators
|
||||
call get_operator
|
||||
pop edi
|
||||
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 broken_value
|
||||
lods byte [esi]
|
||||
@@ -155,13 +183,13 @@ convert_number:
|
||||
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 @@ get_number:
|
||||
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
|
||||
|
Reference in New Issue
Block a user