home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / packer / arc / arctool / tpstack.asm < prev    next >
Encoding:
Assembly Source File  |  1988-09-29  |  3.3 KB  |  112 lines

  1. ;
  2. ;                        F i l e    I n f o r m a t i o n
  3. ;
  4. ;* DESCRIPTION
  5. ;File used with TPSTACK.PAS.
  6. ;
  7. ;* ASSOCIATED FILES
  8. ;TPSTACK.PAS
  9. ;TPSTACK.ASM
  10. ;TPSTACK.DOC
  11. ;TPSTACK.OBJ
  12. ;
  13. ;
  14. ;******************************************************
  15. ;                  TPSTACK.ASM 1.00
  16. ;               by TurboPower Software
  17. ;******************************************************
  18.  
  19. ;****************************************************** Equates
  20.  
  21. Ofst            EQU     (WORD PTR 0)
  22. Segm            EQU     (WORD PTR 2)
  23.  
  24. ;****************************************************** Data
  25.  
  26. DATA    SEGMENT WORD PUBLIC
  27.  
  28.         EXTRN   OurSS : WORD            ;value of SS when program began
  29.         EXTRN   LowestSP : WORD         ;lowest value for SP
  30.         EXTRN   HeapHigh : DWORD        ;highest address pointed to by HeapPtr
  31.         EXTRN   HeapPtr : DWORD
  32.         EXTRN   CountsPerTick : WORD
  33.         EXTRN   Counts : WORD
  34.  
  35. DATA    ENDS
  36.  
  37. ;****************************************************** Code
  38.  
  39. CODE    SEGMENT BYTE PUBLIC
  40.  
  41.         ASSUME  CS:CODE,DS:DATA
  42.  
  43.         PUBLIC  ActualSaveInt8, Int8
  44.  
  45. ActualSaveInt8  DD      0               ;stores previous INT 8 handler
  46.  
  47. ;****************************************************** Int8
  48.  
  49. ;procedure Int8;
  50. ;Interrupt service routine used to monitor stack and heap usage
  51.  
  52. Flags   EQU     WORD PTR [BP+6]         ;position of pushed flags
  53.  
  54. Int8    PROC NEAR
  55.  
  56.         PUSH    BP                      ;set up stack frame
  57.         MOV     BP,SP
  58.         PUSH    AX                      ;save registers used
  59.         PUSH    DI
  60.         PUSH    DS
  61.         MOV     AX,SEG DATA             ;set up DS
  62.         MOV     DS,AX
  63.  
  64.         MOV     AX,SS                   ;make sure we're in the right SS
  65.         CMP     AX,OurSS
  66.         JNE     WrongSS
  67.  
  68.         LEA     DI,Flags                ;flags are where SS:SP was when the
  69.         CMP     DI,LowestSP             ;interrupt occurred
  70.         JNB     WrongSS
  71.         MOV     LowestSP,DI
  72.  
  73. WrongSS:
  74.         ;compare HeapPtr and HeapHigh; both are normalized
  75.         MOV     AX,HeapPtr.Segm         ;HeapPtr into AX:DI
  76.         MOV     DI,HeapPtr.Ofst
  77.         CMP     AX,HeapHigh.Segm        ;if the segment is higher,
  78.         JA      IsHigher                ;HeapPtr points higher
  79.         JNE     Done                    ;check offsets only if segments equal
  80.         CMP     DI,HeapHigh.Ofst        ;done if offset isn't higher
  81.         JNA     Done
  82.  
  83. IsHigher:
  84.         MOV     HeapHigh.Ofst,DI        ;HeapHigh = HeapPtr
  85.         MOV     HeapHigh.Segm,AX
  86.  
  87. Done:   INC     Counts                  ;increment counter
  88.         MOV     AX,CountsPerTick        ;see if we need to chain to old ISR
  89.         CMP     Counts,AX
  90.         JAE     Chain
  91.         MOV     AL,20h                  ;send EOI to interrupt controller
  92.         OUT     20h,AL
  93.         POP     DS                      ;restore registers used
  94.         POP     DI
  95.         POP     AX
  96.         POP     BP
  97.         IRET
  98.  
  99. Chain:  MOV     Counts,0                ;reset counter
  100.         POP     DS                      ;restore registers used
  101.         POP     DI
  102.         POP     AX
  103.         POP     BP
  104.         JMP     DWORD PTR ActualSaveInt8 ;chain to old INT $8 handler
  105.  
  106. Int8    ENDP
  107.  
  108. CODE    ENDS
  109.  
  110.         END
  111. 
  112.