PROWAREtech
x86 Assembly: strstr Procedure
Find ASCII substring in an ASCII string.
Use MASM for Visual C++ Express Edition 2005 to compile this procedure.
This procedure, strstr_asm
, returns NULL (0) pointer when substring is not found in string, otherwise, returns pointer in str
where substr
was found.
TITLE 'extern "C" char* strstr_asm(char *str, char *substr);'
.386P
.model FLAT
PUBLIC _strstr_asm
_TEXT SEGMENT
_strstr_asm PROC NEAR
push ebx
push ebp
mov ebp, DWORD PTR [esp+16] ; substr
mov al, BYTE PTR [ebp]
test al, al
push esi
push edi
jne SHORT label1
mov eax, DWORD PTR [esp+20] ; str
pop edi
pop esi
pop ebp
pop ebx
ret 0
label1:
mov edi, DWORD PTR [esp+20] ; str
mov dl, BYTE PTR [edi]
test dl, dl
mov ecx, ebp
je SHORT label5
label2:
cmp dl, al
jne SHORT label4
mov esi, edi
sub esi, ebp
label3:
mov dl, BYTE PTR [ecx]
test dl, dl
je SHORT label6
mov bl, BYTE PTR [esi+ecx]
inc ecx
cmp bl, dl
je SHORT label3
mov ecx, ebp
label4:
mov dl, BYTE PTR [edi+1]
inc edi
test dl, dl
jne SHORT label2
label5:
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
ret 0
label6:
mov eax, edi
pop edi
pop esi
pop ebp
pop ebx
ret 0
_strstr_asm ENDP
_TEXT ENDS
END
Comment