home *** CD-ROM | disk | FTP | other *** search
- ;****************************************************************************
- ; Filename: MEMCPY.ASM
- ; Author: Peter Andersson
- ; Version: 0.0
- ; Created: 1995.02.12
- ; Updated: -
- ;****************************************************************************
- ; Copyright Peter Andersson, 1994-1995.
- ; All rights reserved.
- ;****************************************************************************
- ; Function: PVOID @memcpy(PVOID dest,PVOID source,ULONG length);
- ; Input: Eax, dest - pointer to destination memory
- ; Edx, source - pointer to source string memory
- ; Ecx, length - number of bytes to copy
- ; Output: pointer to the destination memory
- ; Comment: Copies memory from <source> to <dest> and returns a pointer to dest.
- ; Use memmove when the memory you are about to copy might overlap.
- ;****************************************************************************
-
- Include STDDEF.INC
-
- Codeseg
-
- Proc memcpy ,3
- Push Ebx,Eax
- Jecxz @@Exit02
- Jmp @@Next01
- Align 4
- @@Loop01: Mov Ebx,[Edx] ; Copy the first
- Mov [Eax],Ebx ; large part
- Mov Ebx,[Edx+4]
- Mov [Eax+4],Ebx
- Mov Ebx,[Edx+8]
- Mov [Eax+8],Ebx
- Mov Ebx,[Edx+12]
- Mov [Eax+12],Ebx
- Add Edx,16
- Add Eax,16
- @@Next01: Sub Ecx,16
- Jae @@Loop01
- Add Cl,16
- Jz @@Exit02
- Sub Cl,4
- Jb @@Next02
- Mov Ebx,[Edx]
- Mov [Eax],Ebx
- Add Edx,4
- Add Eax,4
- Sub Cl,4
- Jb @@Next02
- Mov Ebx,[Edx]
- Mov [Eax],Ebx
- Add Edx,4
- Add Eax,4
- Sub Cl,4
- Jb @@Next02
- Mov Ebx,[Edx]
- Mov [Eax],Ebx
- Add Edx,4
- Add Eax,4
- @@Next02: Cmp Cl,-4
- Je @@Exit02
- Mov Bl,[Edx]
- Cmp Cl,-3
- Mov [Eax],Bl
- Je @@Exit02
- Mov Bl,[Edx+1]
- Cmp Cl,-2
- Mov [Eax+1],Bl
- Je @@Exit02
- Mov Bl,[Edx+2]
- Mov [Eax+2],Bl
- @@Exit02: Pop Eax,Ebx
- Ret
- Endp
-
- End