home *** CD-ROM | disk | FTP | other *** search
/ Groovy Bytes: Behind the Moon / groovybytes.iso / GROOVY / SND_TOOL / FUNK108A.ZIP / DOS32V30.ZIP / PAL / VARIOUS / MEMCPY.ASM < prev    next >
Encoding:
Assembly Source File  |  1995-05-20  |  1.8 KB  |  78 lines

  1. ;****************************************************************************
  2. ; Filename: MEMCPY.ASM
  3. ;   Author: Peter Andersson
  4. ;  Version: 0.0
  5. ;  Created: 1995.02.12
  6. ;  Updated: -
  7. ;****************************************************************************
  8. ; Copyright Peter Andersson, 1994-1995.
  9. ; All rights reserved.
  10. ;****************************************************************************
  11. ; Function: PVOID @memcpy(PVOID dest,PVOID source,ULONG length);
  12. ;    Input: Eax, dest - pointer to destination memory
  13. ;           Edx, source - pointer to source string memory
  14. ;           Ecx, length - number of bytes to copy
  15. ;   Output: pointer to the destination memory
  16. ;  Comment: Copies memory from <source> to <dest> and returns a pointer to dest.
  17. ;           Use memmove when the memory you are about to copy might overlap.
  18. ;****************************************************************************
  19.  
  20.     Include    STDDEF.INC
  21.  
  22.     Codeseg
  23.  
  24. Proc    memcpy  ,3
  25.         Push    Ebx,Eax
  26.         Jecxz    @@Exit02
  27.         Jmp    @@Next01
  28.     Align    4
  29. @@Loop01:    Mov    Ebx,[Edx]            ; Copy the first
  30.         Mov    [Eax],Ebx            ; large part
  31.         Mov    Ebx,[Edx+4]
  32.         Mov    [Eax+4],Ebx
  33.         Mov    Ebx,[Edx+8]
  34.         Mov    [Eax+8],Ebx
  35.         Mov    Ebx,[Edx+12]
  36.         Mov    [Eax+12],Ebx
  37.         Add    Edx,16
  38.         Add    Eax,16
  39. @@Next01:    Sub    Ecx,16
  40.         Jae    @@Loop01
  41.         Add    Cl,16
  42.         Jz    @@Exit02
  43.         Sub    Cl,4
  44.         Jb    @@Next02
  45.         Mov    Ebx,[Edx]
  46.         Mov    [Eax],Ebx
  47.         Add    Edx,4
  48.         Add    Eax,4
  49.         Sub    Cl,4
  50.         Jb    @@Next02
  51.         Mov    Ebx,[Edx]
  52.         Mov    [Eax],Ebx
  53.         Add    Edx,4
  54.         Add    Eax,4
  55.         Sub    Cl,4
  56.         Jb    @@Next02
  57.         Mov    Ebx,[Edx]
  58.         Mov    [Eax],Ebx
  59.         Add    Edx,4
  60.         Add    Eax,4
  61. @@Next02:    Cmp    Cl,-4
  62.         Je    @@Exit02
  63.         Mov    Bl,[Edx]
  64.         Cmp    Cl,-3
  65.         Mov    [Eax],Bl
  66.         Je    @@Exit02
  67.         Mov    Bl,[Edx+1]
  68.         Cmp    Cl,-2
  69.         Mov    [Eax+1],Bl
  70.         Je    @@Exit02
  71.         Mov    Bl,[Edx+2]
  72.         Mov    [Eax+2],Bl
  73. @@Exit02:    Pop    Eax,Ebx
  74.         Ret
  75. Endp
  76.  
  77.     End
  78.