Subversion Repositories Kolibri OS

Rev

Rev 6410 | Blame | Last modification | View Log | Download | RSS feed

  1. format ELF
  2.  
  3. section '.text' executable
  4. include 'proc32.inc'
  5.  
  6. public memcpy
  7. public memmove
  8.  
  9. proc memcpy c, to:dword,from:dword,count:dword
  10.     push esi
  11.     push edi
  12.     mov ecx,[count]
  13.         test ecx,ecx
  14.         jz no_copy_block
  15.         mov esi,[from]
  16.                 mov edi,[to]
  17.                 cld
  18.                 rep movsb
  19. no_copy_block:
  20.  
  21.     pop edi
  22.     pop esi
  23.     mov eax, [to]
  24.         ret
  25. endp
  26.  
  27. proc memmove c, to:dword,from:dword,count:dword
  28.  
  29.     push esi
  30.     push edi
  31.         mov ecx,[count]
  32.         test ecx,ecx
  33.         jz no_copy_block_
  34.                 mov esi,[from]
  35.                 mov edi,[to]
  36.                 cmp esi, edi
  37.                 je no_copy_block_
  38.                 jg copy_
  39.             add esi, ecx
  40.             add edi, ecx
  41.             dec esi
  42.             dec edi
  43.             std
  44. copy_:
  45.                 rep movsb
  46.         cld
  47. no_copy_block_:
  48.  
  49.     pop edi
  50.     pop esi
  51.     mov eax,[to]
  52.         ret
  53. endp
  54.