Subversion Repositories Kolibri OS

Rev

Rev 3244 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1338 IgorA 1
;
7577 IgorA 2
; Строковые функции
1338 IgorA 3
;
4
 
7577 IgorA 5
;output:
6
; eax = strlen
7
align 4
8
proc str_len, str1:dword
9
	mov eax,[str1]
10
	@@:
11
		cmp byte[eax],0
12
		je @f
13
		inc eax
14
		jmp @b
15
	@@:
16
	sub eax,[str1]
1338 IgorA 17
	ret
7577 IgorA 18
endp
1338 IgorA 19
 
7577 IgorA 20
align 4
21
proc str_cat uses eax ecx edi esi, str1:dword, str2:dword
22
	mov esi,[str2]
23
	stdcall str_len,esi
24
	mov ecx,eax
25
	inc ecx
26
	mov edi,[str1]
27
	stdcall str_len,edi
28
	add edi,eax
3244 IgorA 29
	cld
7577 IgorA 30
	repne movsb
1338 IgorA 31
	ret
7577 IgorA 32
endp
1338 IgorA 33
 
3244 IgorA 34
;description:
35
; проверяет содержится ли строка str1 в строке str0
36
; проверка делается только начиная с первых символов, указанных в str0 и str1
37
; пример 1: если str0='aaabbbccc', str1='bbb' совпадения не будет
38
; пример 2: если str0='aaabbbccc', str1='aaa' совпадение будет
39
;output:
40
; al = 0 если строка str1 содержится в str0
41
; al != 0 если строка str1 не содержится в str0
42
align 4
43
proc str_instr uses edi esi, str0:dword, str1:dword
44
	;xor eax,eax
45
	mov edi,[str0]
46
	mov esi,[str1]
47
	cld
48
	@@:
7577 IgorA 49
		lodsb
50
		or al,al
51
		jz .e1
3244 IgorA 52
		scasb ;сравниваем символы
53
	jz @b ;если совпали, то переходим к сравнению следующих
54
	;сюда попадаем если строки не совпали
55
	sub al,[edi-1]
56
	.e1: ;сюда попадаем если строка str1 (esi) закончилась
57
	ret
58
endp
59
 
7577 IgorA 60
;input:
61
; eax - число
62
; edi - буфер для строки
63
; len - длинна буфера
64
;output:
65
align 4
66
proc convert_int_to_str uses eax ecx edx edi esi, len:dword
67
	mov esi,[len]
68
	add esi,edi
69
	dec esi
70
	call .str
71
	ret
72
endp
73
 
74
align 4
75
.str:
76
	mov ecx,10
77
	cmp eax,ecx
78
	jb @f
79
		xor edx,edx
80
		div ecx
81
		push edx
82
		;dec edi  ;смещение необходимое для записи с конца строки
83
		call .str
84
		pop eax
85
	@@:
86
	cmp edi,esi
87
	jge @f
88
		or al,0x30
89
		stosb
90
		mov byte[edi],0 ;в конец строки ставим 0, что-бы не вылазил мусор
91
	@@:
92
	ret