; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл

    .486                      ; force 32 bit code
    .model flat, stdcall      ; memory model & calling convention
    option casemap :none      ; case sensitive

    szRemove PROTO :DWORD,:DWORD,:DWORD

    .code

; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл

align 4

szRemove proc src:DWORD,dst:DWORD,remv:DWORD

    push esi
    push edi

    mov edx, remv
    mov ah, [edx]           ; 1st remv char in AH

    mov esi, src
    mov edi, dst
    sub esi, 1

  ; --------------------------------------------------------

  prescan:
    add esi, 1
  scanloop:
    cmp [esi], ah           ; test for "remv" start char
    je presub
  backin:
    mov al, [esi]
    mov [edi], al
    cmp BYTE PTR [edi], 0   ; exit when zero terminator
    je szrOut               ; has been written
    add edi, 1
    jmp prescan

  align 4
  presub:
    xor ecx, ecx
  subloop:
    mov al, [esi+ecx]
    cmp al, [edx+ecx]
    jne backin              ; jump back on mismatch
    add ecx, 1
    cmp BYTE PTR [edx+ecx], 0   ; test if next byte is zero
    jne subloop

    add esi, ecx            ; add len of remv string to ESI
    jmp scanloop

  ; --------------------------------------------------------

  szrOut:

    pop edi
    pop esi

    mov eax, dst            ; return the destination address

    ret

szRemove endp

; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл

    end