strstr in x86 Assembly

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

_STRSTR 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
_STRSTR ENDS
END

Cookies are simple text files stored on the user's computer. They are used for adding features and security to this site.
OK