home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 24 DOS / 24-DOS.zip / winlsapi.zip / WINMEM.ASM < prev    next >
Assembly Source File  |  1992-01-03  |  4KB  |  153 lines

  1. page    78, 124
  2. title   WinMem - Windows memory copy/compare/set functions
  3. ;----------------------------------------------------------------------------
  4. ; Public domain
  5. ; Written by Michael Geary
  6. ;----------------------------------------------------------------------------
  7.  
  8. .xlist
  9. include cmacros.inc
  10. .list
  11.  
  12. ;----------------------------------------------------------------------------
  13.  
  14. createSeg   MEMORY_TEXT,MEMORY,BYTE,PUBLIC,CODE
  15.  
  16. ;----------------------------------------------------------------------------
  17.  
  18. sBegin  MEMORY
  19. assumes CS, MEMORY
  20.  
  21. ;----------------------------------------------------------------------------
  22. ; SHORT FAR PASCAL lmemcmp( LPVOID lpOne, LPVOID lpTwo, WORD cbMem );
  23. ; Far pointer version of memcmp().
  24. ; Compare blocks of memory at *lpOne and *lpTwo of length cbMem.
  25. ; Return  0 if blocks match (or if cbMem is 0).
  26. ; Return  1 if first mismatching byte in *lpOne > *lpTwo
  27. ; Return -1 if first mismatching byte in *lpOne < *lpTwo.
  28. ;----------------------------------------------------------------------------
  29.  
  30. cProc   lmemcmp,<PUBLIC,FAR>,<di,si>
  31.         parmD   lpOne
  32.         parmD   lpTwo
  33.         parmW   cbMem
  34. cBegin
  35.         push    ds
  36.  
  37.         les     di, lpOne
  38.         lds     si, lpTwo
  39.  
  40.         xor     ax, ax
  41.         mov     cx, cbMem
  42.         jcxz    lmemcmpDone
  43.  
  44.         repe    cmpsb
  45.         jz      lmemcmpDone
  46.  
  47.         dec     ax
  48.         dec     di
  49.         dec     si
  50.         mov     bl, byte ptr es:[di]
  51.         cmp     bl, byte ptr ds:[si]
  52.         jb      lmemcmpDone
  53.         inc     ax
  54.         inc     ax
  55.  
  56.     lmemcmpDone:
  57.  
  58.         pop     ds
  59. cEnd
  60.  
  61. ;----------------------------------------------------------------------------
  62. ; VOID FAR PASCAL lmemcpy( LPVOID lpDest, LPVOID lpSrc, WORD cbMem );
  63. ; Far pointer version of memcpy().
  64. ; Copy cbMem bytes of memory from *lpSrc to *lpDest.
  65. ; Do nothing if cbMem is 0.
  66. ;----------------------------------------------------------------------------
  67.  
  68. cProc   lmemcpy,<PUBLIC,FAR>,<di,si>
  69.         parmD   lpDest
  70.         parmD   lpSrc
  71.         parmW   cbMem
  72. cBegin
  73.         push    ds
  74.  
  75.         les     di, lpDest
  76.         push    es
  77.         push    di
  78.  
  79.         lds     si, lpSrc
  80.         mov     cx, cbMem
  81.         jcxz    lmemcpyDone
  82.  
  83.         mov     ax, ds
  84.         mov     bx, es
  85.         cmp     ax, bx
  86.         jne     lmemcpyDown
  87.  
  88.         cmp     si, di
  89.         jb      lmemcpyUp
  90.  
  91.     lmemcpyDown:
  92.         repne   movsb
  93.         jmp short lmemcpyDone
  94.  
  95.     lmemcpyUp:
  96.         STD
  97.         add     si,cx
  98.         add     di,cx
  99.         dec     si
  100.         dec     di
  101.         repne   movsb
  102.         CLD
  103.  
  104.     lmemcpyDone:
  105.         pop     ax                      ; dx:ax return value
  106.         pop     dx
  107.  
  108.         pop     ds
  109. cEnd
  110.  
  111. ;----------------------------------------------------------------------------
  112. ; VOID FAR PASCAL lmemset( LPVOID lpMem, SHORT chr, WORD cbMem );
  113. ; Far pointer version of memset().
  114. ; Fill cbMem bytes of memory at *lpMem with chr.
  115. ; Do nothing if cbMem is 0.
  116. ;----------------------------------------------------------------------------
  117.  
  118. cProc   lmemset,<PUBLIC,FAR>,<di,si>
  119.         parmD   lpMem
  120.         parmW   chr
  121.         parmW   cbMem
  122. cBegin
  123.         push    ds
  124.  
  125.         les     di, lpMem
  126.         push    es
  127.         push    di
  128.  
  129.         mov     cx, cbMem
  130.         jcxz    lmemsetDone
  131.  
  132.         mov     ax, chr
  133.  
  134.         rep     stosb
  135.  
  136.     lmemsetDone:
  137.         pop     ax                      ; dx:ax return value
  138.         pop     dx
  139.  
  140.         pop     ds
  141. cEnd
  142.  
  143. ;----------------------------------------------------------------------------
  144.  
  145. sEnd    MEMORY
  146.  
  147. ;----------------------------------------------------------------------------
  148.  
  149.         end
  150.  
  151. ;----------------------------------------------------------------------------
  152.  
  153.