Subversion Repositories Kolibri OS

Rev

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

Rev 205 Rev 220
Line 1826... Line 1826...
1826
get_word_value:
1826
get_word_value:
1827
	mov	[value_size],2
1827
	mov	[value_size],2
1828
	mov	[size_override],-1
1828
	mov	[size_override],-1
1829
	call	calculate_expression
1829
	call	calculate_expression
1830
	mov	eax,[edi+16]
1830
	cmp	word [edi+8],0
1831
	mov	[symbol_identifier],eax
-
 
1832
	cmp	word [edi+8],0
-
 
1833
	jne	invalid_value
1831
	jne	invalid_value
1834
	mov	al,[edi+12]
1832
	mov	eax,[edi+16]
-
 
1833
	mov	[symbol_identifier],eax
-
 
1834
	mov	al,[edi+12]
1835
	mov	[value_type],al
1835
	mov	[value_type],al
1836
	cmp	al,2
1836
	cmp	al,2
1837
	jb	check_word_value
1837
	jb	check_word_value
1838
	cmp	[error_line],0
1838
	cmp	[error_line],0
1839
	jne	check_word_value
1839
	jne	check_word_value
Line 1857... Line 1857...
1857
get_dword_value:
1857
get_dword_value:
1858
	mov	[value_size],4
1858
	mov	[value_size],4
1859
	mov	[size_override],-1
1859
	mov	[size_override],-1
1860
	call	calculate_expression
1860
	call	calculate_expression
1861
	mov	eax,[edi+16]
1861
	cmp	word [edi+8],0
1862
	mov	[symbol_identifier],eax
-
 
1863
	cmp	word [edi+8],0
-
 
1864
	jne	invalid_value
1862
	jne	invalid_value
1865
	mov	al,[edi+12]
1863
	mov	eax,[edi+16]
-
 
1864
	mov	[symbol_identifier],eax
-
 
1865
	mov	al,[edi+12]
1866
	mov	[value_type],al
1866
	mov	[value_type],al
1867
	cmp	al,4
1867
	cmp	al,4
1868
	jne	check_dword_value
1868
	jne	check_dword_value
1869
	mov	[value_type],2
1869
	mov	[value_type],2
1870
	mov	eax,[edi]
1870
	mov	eax,[edi]
Line 1911... Line 1911...
1911
get_qword_value:
1911
get_qword_value:
1912
	mov	[value_size],8
1912
	mov	[value_size],8
1913
	mov	[size_override],-1
1913
	mov	[size_override],-1
1914
	call	calculate_expression
1914
	call	calculate_expression
1915
	mov	eax,[edi+16]
1915
	cmp	word [edi+8],0
1916
	mov	[symbol_identifier],eax
-
 
1917
	cmp	word [edi+8],0
-
 
1918
	jne	invalid_value
1916
	jne	invalid_value
1919
	mov	al,[edi+12]
1917
	mov	eax,[edi+16]
-
 
1918
	mov	[symbol_identifier],eax
-
 
1919
	mov	al,[edi+12]
1920
	mov	[value_type],al
1920
	mov	[value_type],al
1921
      check_qword_value:
1921
      check_qword_value:
1922
	mov	eax,[edi]
1922
	mov	eax,[edi]
1923
	mov	edx,[edi+4]
1923
	mov	edx,[edi+4]
1924
	ret
1924
	ret
Line 1961... Line 1961...
1961
	call	get_byte_value
1961
	call	get_byte_value
1962
	xor	edx,edx
1962
	xor	edx,edx
1963
	movzx	eax,al
1963
	movzx	eax,al
1964
	ret
1964
	ret
1965
get_address_value:
1965
get_address_word_value:
-
 
1966
	mov	[address_size],2
-
 
1967
	mov	[value_size],2
-
 
1968
	jmp	calculate_address
-
 
1969
get_address_dword_value:
-
 
1970
	mov	[address_size],4
-
 
1971
	mov	[value_size],4
-
 
1972
	jmp	calculate_address
-
 
1973
get_address_qword_value:
-
 
1974
	mov	[address_size],8
-
 
1975
	mov	[value_size],8
-
 
1976
	jmp	calculate_address
-
 
1977
get_address_value:
1966
	mov	[address_size],0
1978
	mov	[address_size],0
1967
	mov	[value_size],8
1979
	mov	[value_size],8
1968
      calculate_address:
1980
      calculate_address:
1969
	cmp	byte [esi],'.'
1981
	cmp	byte [esi],'.'
1970
	je	invalid_address
1982
	je	invalid_address
Line 2091... Line 2103...
2091
	cmp	cl,9
2103
	cmp	cl,9
2092
	je	special_index_scale
2104
	je	special_index_scale
2093
      check_index_scale:
2105
      check_index_scale:
2094
	or	cl,cl
2106
	or	cl,cl
2095
	jz	address_registers_ok
2107
	jz	check_immediate_address
2096
	cmp	cl,1
2108
	cmp	cl,1
2097
	je	address_registers_ok
2109
	je	check_immediate_address
2098
	cmp	cl,2
2110
	cmp	cl,2
2099
	je	address_registers_ok
2111
	je	check_immediate_address
2100
	cmp	cl,4
2112
	cmp	cl,4
2101
	je	address_registers_ok
2113
	je	check_immediate_address
2102
	cmp	cl,8
2114
	cmp	cl,8
2103
	je	address_registers_ok
2115
	je	check_immediate_address
2104
	jmp	invalid_address
2116
	jmp	invalid_address
2105
      special_index_scale:
2117
      special_index_scale:
2106
	mov	bh,bl
2118
	mov	bh,bl
2107
	dec	cl
2119
	dec	cl
2108
      address_registers_ok:
2120
      check_immediate_address:
2109
	jmp	check_dword_value
-
 
2110
      check_immediate_address:
-
 
2111
	cmp	[code_type],64
2121
	mov	al,[address_size]
-
 
2122
	and	al,0Fh
-
 
2123
	cmp	al,2
-
 
2124
	je	check_word_value
-
 
2125
	cmp	al,4
-
 
2126
	je	check_dword_value
-
 
2127
	cmp	al,8
-
 
2128
	je	check_qword_value
-
 
2129
	or	al,al
-
 
2130
	jnz	invalid_value
-
 
2131
	cmp	[code_type],64
2112
	jne	check_dword_value
2132
	jne	check_dword_value
2113
	cmp	[address_size],4
2133
	jmp	check_qword_value
2114
	je	check_dword_value
-
 
2115
	jmp	check_qword_value
-
 
2116
calculate_relative_offset:
2134
calculate_relative_offset:
2117
	cmp	[value_undefined],0
2135
	cmp	[value_undefined],0
2118
	jne	relative_offset_ok
2136
	jne	relative_offset_ok
2119
	add	eax,dword [org_origin]
2137
	add	eax,dword [org_origin]
2120
	adc	edx,dword [org_origin+4]
2138
	adc	edx,dword [org_origin+4]
Line 2129... Line 2147...
2129
	je	plt_relative_offset
2147
	je	plt_relative_offset
2130
	cmp	bl,[labels_type]
2148
	cmp	bl,[labels_type]
2131
	jne	invalid_use_of_symbol
2149
	jne	invalid_use_of_symbol
2132
	mov	[value_type],0
2150
	mov	[value_type],0
2133
	mov	ecx,[symbol_identifier]
2151
	mov	ecx,[address_symbol]
-
 
2152
	mov	[symbol_identifier],ecx
2134
	cmp	ecx,[org_symbol]
2153
	cmp	ecx,[org_symbol]
2135
	je	relative_offset_ok
2154
	je	relative_offset_ok
2136
	mov	[value_type],3
2155
	mov	[value_type],3
2137
      relative_offset_ok:
2156
      relative_offset_ok:
2138
	ret
2157
	ret
2139
      plt_relative_offset:
2158
      plt_relative_offset: