Subversion Repositories Kolibri OS

Rev

Rev 4478 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4478 Rev 6467
Line 1... Line 1...
1
; flat assembler core
1
; flat assembler core
2
; Copyright (c) 1999-2013, Tomasz Grysztar.
2
; Copyright (c) 1999-2016, Tomasz Grysztar.
3
; All rights reserved.
3
; All rights reserved.
Line 4... Line 4...
4
 
4
 
5
convert_expression:
5
convert_expression:
6
	push	ebp
6
	push	ebp
Line 75... Line 75...
75
	pop	ebp
75
	pop	ebp
76
	ret
76
	ret
77
 
77
 
Line 78... Line 78...
78
convert_number:
78
convert_number:
79
	lea	eax,[edi-10h]
79
	lea	eax,[edi+20h]
80
	mov	edx,[memory_end]
80
	mov	edx,[memory_end]
81
	cmp	[source_start],0
81
	cmp	[source_start],0
82
	je	check_memory_for_number
82
	je	check_memory_for_number
83
	mov	edx,[labels_list]
83
	mov	edx,[labels_list]
84
      check_memory_for_number:
84
      check_memory_for_number:
Line 127... Line 127...
127
	call	convert_expression
127
	call	convert_expression
128
	pop	[current_offset]
128
	pop	[current_offset]
129
	lods	byte [esi]
129
	lods	byte [esi]
130
	cmp	al,')'
130
	cmp	al,')'
131
	jne	invalid_expression
131
	je	subexpression_closed
132
	ret
132
	dec	esi
-
 
133
	mov	al,'!'
-
 
134
	stosb
-
 
135
      subexpression_closed:
-
 
136
	ret
133
      symbol_value:
137
      symbol_value:
134
	cmp	[source_start],0
138
	cmp	[source_start],0
135
	je	preprocessor_value
139
	je	preprocessor_value
136
	push	edi esi
140
	push	edi esi
137
	lods	word [esi]
141
	lods	word [esi]
Line 145... Line 149...
145
	mov	al,ah
149
	mov	al,ah
146
	shr	ah,4
150
	shr	ah,4
147
	cmp	ah,4
151
	cmp	ah,4
148
	je	register_value
152
	je	register_value
149
	cmp	ah,8
153
	and	ah,not 1
-
 
154
	cmp	ah,8
150
	je	register_value
155
	je	register_value
151
	cmp	ah,0Ch
156
	cmp	ah,0Ch
152
	je	register_value
157
	jae	register_value
-
 
158
	cmp	ah,6
-
 
159
	je	register_value
153
	cmp	ah,0Dh
160
	cmp	al,23h
154
	je	register_value
-
 
155
	cmp	ah,0Fh
-
 
156
	je	register_value
-
 
157
	cmp	ah,2
-
 
158
	jne	no_address_register
-
 
159
	cmp	al,23h
-
 
160
	je	register_value
161
	je	register_value
161
	cmp	al,25h
162
	cmp	al,25h
162
	je	register_value
163
	je	register_value
163
	cmp	al,26h
164
	cmp	al,26h
164
	je	register_value
165
	je	register_value
Line 910... Line 911...
910
	cmp	dl,'|'
911
	cmp	dl,'|'
911
	je	preevaluate_or
912
	je	preevaluate_or
912
	cmp	dl,'&'
913
	cmp	dl,'&'
913
	je	preevaluate_and
914
	je	preevaluate_and
914
	cmp	dl,'}'
915
	cmp	dl,92h
915
	je	preevaluation_done
916
	je	preevaluation_done
916
	or	dl,dl
917
	or	dl,dl
917
	jnz	invalid_logical_expression
918
	jnz	invalid_logical_expression
918
      preevaluation_done:
919
      preevaluation_done:
919
	pop	edx
920
	pop	edx
920
	dec	esi
921
	dec	esi
Line 985... Line 986...
985
	inc	esi
986
	inc	esi
986
	jmp	skip_logical_value
987
	jmp	skip_logical_value
987
      negation_skipped:
988
      negation_skipped:
988
	mov	al,[esi]
989
	mov	al,[esi]
989
	cmp	al,'{'
990
	cmp	al,91h
990
	jne	skip_simple_logical_value
991
	jne	skip_simple_logical_value
991
	inc	esi
992
	inc	esi
992
	xchg	al,[logical_value_wrapping]
993
	xchg	al,[logical_value_wrapping]
993
	push	eax
994
	push	eax
994
      skip_logical_expression:
995
      skip_logical_expression:
995
	call	skip_logical_value
996
	call	skip_logical_value
Line 1001... Line 1002...
1001
	cmp	al,'|'
1002
	cmp	al,'|'
1002
	je	skip_logical_expression
1003
	je	skip_logical_expression
1003
	cmp	al,'&'
1004
	cmp	al,'&'
1004
	je	skip_logical_expression
1005
	je	skip_logical_expression
1005
	cmp	al,'}'
1006
	cmp	al,92h
1006
	jne	wrongly_structured_logical_expression
1007
	jne	wrongly_structured_logical_expression
1007
	pop	eax
1008
	pop	eax
1008
	mov	[logical_value_wrapping],al
1009
	mov	[logical_value_wrapping],al
1009
      logical_value_skipped:
1010
      logical_value_skipped:
1010
	clc
1011
	clc
1011
	ret
1012
	ret
Line 1024... Line 1025...
1024
	cmp	al,'|'
1025
	cmp	al,'|'
1025
	je	logical_value_skipped
1026
	je	logical_value_skipped
1026
	cmp	al,'&'
1027
	cmp	al,'&'
1027
	je	logical_value_skipped
1028
	je	logical_value_skipped
1028
	cmp	al,'{'
1029
	cmp	al,91h
1029
	je	skip_logical_value_internal_parenthesis
1030
	je	skip_logical_value_internal_parenthesis
1030
	cmp	al,'}'
1031
	cmp	al,92h
1031
	jne	skip_logical_value_symbol
1032
	jne	skip_logical_value_symbol
1032
	sub	[logical_value_parentheses],1
1033
	sub	[logical_value_parentheses],1
1033
	jnc	skip_logical_value_symbol
1034
	jnc	skip_logical_value_symbol
1034
	cmp	[logical_value_wrapping],'{'
1035
	cmp	[logical_value_wrapping],91h
1035
	jne	skip_logical_value_symbol
1036
	jne	skip_logical_value_symbol
1036
	jmp	logical_value_skipped
1037
	jmp	logical_value_skipped
1037
      skip_logical_value_internal_parenthesis:
1038
      skip_logical_value_internal_parenthesis:
1038
	inc	[logical_value_parentheses]
1039
	inc	[logical_value_parentheses]
1039
      skip_logical_value_symbol:
1040
      skip_logical_value_symbol:
1040
	call	skip_symbol
1041
	call	skip_symbol
Line 1047... Line 1048...
1047
	movs	byte [edi],[esi]
1048
	movs	byte [edi],[esi]
1048
	jmp	preevaluate_negation
1049
	jmp	preevaluate_negation
1049
      preevaluate_negation_ok:
1050
      preevaluate_negation_ok:
1050
	mov	ebx,esi
1051
	mov	ebx,esi
1051
	cmp	byte [esi],'{'
1052
	cmp	byte [esi],91h
1052
	jne	preevaluate_simple_logical_value
1053
	jne	preevaluate_simple_logical_value
1053
	lods	byte [esi]
1054
	lods	byte [esi]
1054
	stos	byte [edi]
1055
	stos	byte [edi]
1055
	push	ebp
1056
	push	ebp
1056
	mov	dl,[logical_value_wrapping]
1057
	mov	dl,[logical_value_wrapping]
1057
	push	edx
1058
	push	edx
Line 1060... Line 1061...
1060
	mov	[logical_value_wrapping],dl
1061
	mov	[logical_value_wrapping],dl
1061
	pop	ebp
1062
	pop	ebp
1062
	cmp	al,0FFh
1063
	cmp	al,0FFh
1063
	je	invalid_logical_value
1064
	je	invalid_logical_value
1064
	cmp	byte [esi],'}'
1065
	cmp	byte [esi],92h
1065
	jne	invalid_logical_value
1066
	jne	invalid_logical_value
1066
	or	al,al
1067
	or	al,al
1067
	jnz	preevaluated_expression_value
1068
	jnz	preevaluated_expression_value
1068
	movs	byte [edi],[esi]
1069
	movs	byte [edi],[esi]
1069
	ret
1070
	ret
1070
      preevaluated_expression_value:
1071
      preevaluated_expression_value:
Line 1087... Line 1088...
1087
      find_logical_value_boundaries:
1088
      find_logical_value_boundaries:
1088
	mov	al,[esi]
1089
	mov	al,[esi]
1089
	or	al,al
1090
	or	al,al
1090
	jz	logical_value_boundaries_found
1091
	jz	logical_value_boundaries_found
1091
	cmp	al,'{'
1092
	cmp	al,91h
1092
	je	logical_value_internal_parentheses
1093
	je	logical_value_internal_parentheses
1093
	cmp	al,'}'
1094
	cmp	al,92h
1094
	je	logical_value_boundaries_parenthesis_close
1095
	je	logical_value_boundaries_parenthesis_close
1095
	cmp	al,'|'
1096
	cmp	al,'|'
1096
	je	logical_value_boundaries_found
1097
	je	logical_value_boundaries_found
1097
	cmp	al,'&'
1098
	cmp	al,'&'
1098
	je	logical_value_boundaries_found
1099
	je	logical_value_boundaries_found
1099
	or	edx,edx
1100
	or	edx,edx
Line 1114... Line 1115...
1114
	jmp	next_symbol_in_logical_value
1115
	jmp	next_symbol_in_logical_value
1115
      logical_value_boundaries_parenthesis_close:
1116
      logical_value_boundaries_parenthesis_close:
1116
	sub	[logical_value_parentheses],1
1117
	sub	[logical_value_parentheses],1
1117
	jnc	next_symbol_in_logical_value
1118
	jnc	next_symbol_in_logical_value
1118
	cmp	[logical_value_wrapping],'{'
1119
	cmp	[logical_value_wrapping],91h
1119
	jne	next_symbol_in_logical_value
1120
	jne	next_symbol_in_logical_value
1120
      logical_value_boundaries_found:
1121
      logical_value_boundaries_found:
1121
	or	edx,edx
1122
	or	edx,edx
1122
	jz	non_preevaluable_logical_value
1123
	jz	non_preevaluable_logical_value
1123
	mov	al,[edx]
1124
	mov	al,[edx]
1124
	cmp	al,0F0h
1125
	cmp	al,0F0h