home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / tug__002 / tpstack.asm < prev    next >
Assembly Source File  |  1988-08-08  |  5KB  |  149 lines

  1. {TUG PDS CERT 1.01 (Pascal)
  2.  
  3. ==========================================================================
  4.  
  5.                   TUG PUBLIC DOMAIN SOFTWARE CERTIFICATION
  6.  
  7. The Turbo User Group (TUG) is recognized by Borland International as the
  8. official support organization for Turbo languages.  This file has been
  9. compiled and verified by the TUG library staff.  We are reasonably certain
  10. that the information contained in this file is public domain material, but
  11. it is also subject to any restrictions applied by its author.
  12.  
  13. This diskette contains PROGRAMS and/or DATA determined to be in the PUBLIC
  14. DOMAIN, provided as a service of TUG for the use of its members.  The
  15. Turbo User Group will not be liable for any damages, including any lost
  16. profits, lost savings or other incidental or consequential damages arising
  17. out of the use of or inability to use the contents, even if TUG has been
  18. advised of the possibility of such damages, or for any claim by any
  19. other party.
  20.  
  21. To the best of our knowledge, the routines in this file compile and function
  22. properly in accordance with the information described below.
  23.  
  24. If you discover an error in this file, we would appreciate it if you would
  25. report it to us.  To report bugs, or to request information on membership
  26. in TUG, please contact us at:
  27.  
  28.              Turbo User Group
  29.              PO Box 1510
  30.              Poulsbo, Washington USA  98370
  31.  
  32. --------------------------------------------------------------------------
  33.                        F i l e    I n f o r m a t i o n
  34.  
  35. * DESCRIPTION
  36. File used with TPSTACK.PAS.
  37.  
  38. * ASSOCIATED FILES
  39. TPSTACK.PAS
  40. TPSTACK.ASM
  41. TPSTACK.DOC
  42. TPSTACK.OBJ
  43.  
  44. * CHECKED BY
  45. DRM 08/08/88
  46.  
  47. * KEYWORDS
  48. TURBO PASCAL V4.0
  49.  
  50. ==========================================================================
  51. }
  52. ;******************************************************
  53. ;                  TPSTACK.ASM 1.00
  54. ;               by TurboPower Software
  55. ;******************************************************
  56.  
  57. ;****************************************************** Equates
  58.  
  59. Ofst            EQU     (WORD PTR 0)
  60. Segm            EQU     (WORD PTR 2)
  61.  
  62. ;****************************************************** Data
  63.  
  64. DATA    SEGMENT WORD PUBLIC
  65.  
  66.         EXTRN   OurSS : WORD            ;value of SS when program began
  67.         EXTRN   LowestSP : WORD         ;lowest value for SP
  68.         EXTRN   HeapHigh : DWORD        ;highest address pointed to by HeapPtr
  69.         EXTRN   HeapPtr : DWORD
  70.         EXTRN   CountsPerTick : WORD
  71.         EXTRN   Counts : WORD
  72.  
  73. DATA    ENDS
  74.  
  75. ;****************************************************** Code
  76.  
  77. CODE    SEGMENT BYTE PUBLIC
  78.  
  79.         ASSUME  CS:CODE,DS:DATA
  80.  
  81.         PUBLIC  ActualSaveInt8, Int8
  82.  
  83. ActualSaveInt8  DD      0               ;stores previous INT 8 handler
  84.  
  85. ;****************************************************** Int8
  86.  
  87. ;procedure Int8;
  88. ;Interrupt service routine used to monitor stack and heap usage
  89.  
  90. Flags   EQU     WORD PTR [BP+6]         ;position of pushed flags
  91.  
  92. Int8    PROC NEAR
  93.  
  94.         PUSH    BP                      ;set up stack frame
  95.         MOV     BP,SP
  96.         PUSH    AX                      ;save registers used
  97.         PUSH    DI
  98.         PUSH    DS
  99.         MOV     AX,SEG DATA             ;set up DS
  100.         MOV     DS,AX
  101.  
  102.         MOV     AX,SS                   ;make sure we're in the right SS
  103.         CMP     AX,OurSS
  104.         JNE     WrongSS
  105.  
  106.         LEA     DI,Flags                ;flags are where SS:SP was when the
  107.         CMP     DI,LowestSP             ;interrupt occurred
  108.         JNB     WrongSS
  109.         MOV     LowestSP,DI
  110.  
  111. WrongSS:
  112.         ;compare HeapPtr and HeapHigh; both are normalized
  113.         MOV     AX,HeapPtr.Segm         ;HeapPtr into AX:DI
  114.         MOV     DI,HeapPtr.Ofst
  115.         CMP     AX,HeapHigh.Segm        ;if the segment is higher,
  116.         JA      IsHigher                ;HeapPtr points higher
  117.         JNE     Done                    ;check offsets only if segments equal
  118.         CMP     DI,HeapHigh.Ofst        ;done if offset isn't higher
  119.         JNA     Done
  120.  
  121. IsHigher:
  122.         MOV     HeapHigh.Ofst,DI        ;HeapHigh = HeapPtr
  123.         MOV     HeapHigh.Segm,AX
  124.  
  125. Done:   INC     Counts                  ;increment counter
  126.         MOV     AX,CountsPerTick        ;see if we need to chain to old ISR
  127.         CMP     Counts,AX
  128.         JAE     Chain
  129.         MOV     AL,20h                  ;send EOI to interrupt controller
  130.         OUT     20h,AL
  131.         POP     DS                      ;restore registers used
  132.         POP     DI
  133.         POP     AX
  134.         POP     BP
  135.         IRET
  136.  
  137. Chain:  MOV     Counts,0                ;reset counter
  138.         POP     DS                      ;restore registers used
  139.         POP     DI
  140.         POP     AX
  141.         POP     BP
  142.         JMP     DWORD PTR ActualSaveInt8 ;chain to old INT $8 handler
  143.  
  144. Int8    ENDP
  145.  
  146. CODE    ENDS
  147.  
  148.         END
  149.