; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл

      .486
      .model flat, stdcall  ; 32 bit memory model
      option casemap :none  ; case sensitive

    .code

; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл

align 4

szMid proc src:DWORD,dst:DWORD,stp:DWORD,ln:DWORD

    push edi

    mov ecx, ln             ; length in ECX
    mov edx, src            ; source address
    add edx, ecx            ; add required length
    add edx, stp            ; add starting position
    mov edi, dst            ; destination address
    add edi, ecx            ; add length and set terminator position
    neg ecx                 ; invert sign

  @@:
    mov al, [edx+ecx]
    mov [edi+ecx], al
    add ecx, 1
    jnz @B

    mov BYTE PTR [edi], 0   ; write terminator

    pop edi

    ret

szMid endp

; ллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллллл

end