Subversion Repositories Kolibri OS

Rev

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

Rev 7577 Rev 7579
Line 88... Line 88...
88
		or al,0x30
88
		or al,0x30
89
		stosb
89
		stosb
90
		mov byte[edi],0 ;в конец строки ставим 0, что-бы не вылазил мусор
90
		mov byte[edi],0 ;в конец строки ставим 0, что-бы не вылазил мусор
91
	@@:
91
	@@:
92
	ret
92
	ret
93
93
 
-
 
94
;input:
-
 
95
; buf - указатель на строку, число должно быть в 10 или 16 ричном виде
-
 
96
;output:
-
 
97
; eax - число
-
 
98
align 4
-
 
99
proc conv_str_to_int, buf:dword
-
 
100
	xor eax,eax
-
 
101
	push ebx ecx esi
-
 
102
	xor ebx,ebx
-
 
103
	mov esi,[buf]
-
 
104
	;определение отрицательных чисел
-
 
105
	xor ecx,ecx
-
 
106
	inc ecx
-
 
107
	cmp byte[esi],'-'
-
 
108
	jne @f
-
 
109
		dec ecx
-
 
110
		inc esi
-
 
111
	@@:
-
 
112
 
-
 
113
	cmp word[esi],'0x'
-
 
114
	je .load_digit_16
-
 
115
 
-
 
116
	.load_digit_10: ;считывание 10-тичных цифр
-
 
117
		mov bl,byte[esi]
-
 
118
		cmp bl,'0'
-
 
119
		jl @f
-
 
120
		cmp bl,'9'
-
 
121
		jg @f
-
 
122
			sub bl,'0'
-
 
123
			imul eax,10
-
 
124
			add eax,ebx
-
 
125
			inc esi
-
 
126
			jmp .load_digit_10
-
 
127
	jmp @f
-
 
128
 
-
 
129
	.load_digit_16: ;считывание 16-ричных цифр
-
 
130
		add esi,2
-
 
131
	.cycle_16:
-
 
132
		mov bl,byte[esi]
-
 
133
		cmp bl,'0'
-
 
134
		jl @f
-
 
135
		cmp bl,'f'
-
 
136
		jg @f
-
 
137
		cmp bl,'9'
-
 
138
		jle .us1
-
 
139
			cmp bl,'A'
-
 
140
			jl @f ;отсеиваем символы >'9' и <'A'
-
 
141
		.us1: ;составное условие
-
 
142
		cmp bl,'F'
-
 
143
		jle .us2
-
 
144
			cmp bl,'a'
-
 
145
			jl @f ;отсеиваем символы >'F' и <'a'
-
 
146
			sub bl,32 ;переводим символы в верхний регистр, для упрощения их последущей обработки
-
 
147
		.us2: ;составное условие
-
 
148
			sub bl,'0'
-
 
149
			cmp bl,9
-
 
150
			jle .cor1
-
 
151
				sub bl,7 ;convert 'A' to '10'
-
 
152
			.cor1:
-
 
153
			shl eax,4
-
 
154
			add eax,ebx
-
 
155
			inc esi
-
 
156
			jmp .cycle_16
-
 
157
	@@:
-
 
158
	cmp ecx,0 ;если число отрицательное
-
 
159
	jne @f
-
 
160
		sub ecx,eax
-
 
161
		mov eax,ecx
-
 
162
	@@:
-
 
163
	pop esi ecx ebx
-
 
164
	ret
-
 
165
endp
-
 
166
>
94
167
>