home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / p / pps110.zip / PPSSRC.ZIP / MEM.ASM < prev    next >
Assembly Source File  |  1992-04-25  |  1KB  |  97 lines

  1.  
  2. ;   FILENAME: MEM.ASM
  3. ;
  4. ;   DESCRIPTION:
  5.  
  6. %tabsize 4
  7.  
  8. ifndef  MDL
  9.     display "Error: This module requires that you provide a memory model"
  10.     display "       definition on the command line. I.E. /dMDL=SMALL."
  11.     err ; Force a fatal error
  12. else
  13.  
  14.     ideal                           ; Use TASM's Ideal mode
  15.     model   Small,Pascal          ; Define the memory model
  16.     P286
  17.  
  18. include "stdlib.inc"
  19.  
  20. dataseg
  21.  
  22. Heap        dw    0        ; Segment of 4k heap
  23. HeapPtr     dw    0
  24.  
  25. codeseg
  26.  
  27. proc    sl_InitHeap
  28.     push    ds
  29.     mov    ax,@data
  30.     mov    ds,ax
  31.     mov    bx,4096
  32.     shr    bx,1
  33.     shr    bx,1
  34.     shr    bx,1
  35.     shr    bx,1
  36.     mov    ah,48h
  37.     int    21h
  38.     mov    [Heap],ax
  39.     mov    [HeapPtr],0
  40.     pop    ds
  41.     ret
  42. endp    sl_InitHeap
  43.  
  44. proc    sl_Allocate    Size:word,Store:dword
  45.     uses    es,ds
  46.     mov    ax,@data
  47.     mov    ds,ax
  48.     mov    bx,[Size]
  49.     shr    bx,4
  50.     inc    bx
  51.     mov    ah,48h
  52.     int    21h
  53.     mov    es,[Heap]
  54.     mov    di,[HeapPtr]
  55.     stosw
  56.     mov    [HeapPtr],di
  57.     les    di,[Store]
  58.     mov    [Word es:di],0
  59.     mov    [es:di+2],ax
  60.     ret
  61. endp    sl_Allocate
  62.  
  63. proc    sl_FreeAllHeap
  64.     push    es ds
  65.     mov    ax,@data
  66.     mov    ds,ax
  67.     cmp    [HeapPtr],0
  68.     je    @@FreeHeap
  69.     mov    si,0
  70.     mov    bx,[HeapPtr]
  71.     mov    ds,[Heap]
  72.  
  73. @@HeapClearLoop:
  74.     push    si
  75.     mov    es,[si]
  76.     mov    ah,49h
  77.     int    21h
  78.     pop    si
  79.     add    si,2
  80.     cmp    si,bx
  81.     jne    @@HeapClearLoop
  82.  
  83. @@FreeHeap:
  84.     pop    ds
  85.     push    ds es
  86.     mov    es,[Heap]
  87.     mov    ah,49h
  88.     int    21h
  89.     pop    es ds es
  90.     ret
  91. endp    sl_FreeAllHeap
  92.  
  93. endif   ; ifndef MDL
  94.  
  95. end
  96.  
  97.