exceptn.asm

来自「开放源码的编译器open watcom 1.6.0版的源代码」· 汇编 代码 · 共 2,536 行 · 第 1/5 页

ASM
2,536
字号
        mov     edi,esi
        add     esi,ResHead+ResNum
        add     edi,ResHead
@@dm0:  cmp     es:b[edi],Res_DOSMEM
        jnz     @@dm1
        ;
        pushad
        mov     edi,offset DebugHeader
        mov     eax,es:[esi]
        mov     cx,4
        call    Bin2Hex
        mov     b[edi],' '
        inc     edi
        pushm   ebx,ecx,edx
        mov     bx,es:[esi]
        sys     GetSelDet32
        mov     eax,edx
        popm    ebx,ecx,edx
        mov     cx,8
        call    Bin2Hex
        mov     b[edi],' '
        inc     edi
        mov     eax,es:[esi+4]
        mov     cx,8
        call    Bin2Hex
        mov     b[edi],' '
        inc     edi
        ;
        mov     b[edi],13
        mov     b[edi+1],10
        mov     b[edi+2],'$'
        add     edi,2
        push    edi
        pop     ecx
        sub     ecx,offset DebugHeader
        mov     edx,offset DebugHeader
        mov     ah,40h
        mov     ebx,d[@@Handle]
        int     21h
        popad
        ;
@@dm1:  add     esi,4
        inc     edi
        dec     ebp
        jnz     @@dm0
        pop     edi
        mov     esi,es:[edi+8]  ;link to next list.
        or      esi,esi
        jnz     @@dmLookLoop




        cmp     fs:d[EPSP_INTMem],0
        jz      @@r8

        ;
        ;Now do protected mode int details.
        ;
        mov     edx,offset PIntHeader
        mov     ah,40h
        mov     ecx,PIntHeaderLen
        mov     ebx,d[@@Handle]
        int     21h
        ;
        mov     ecx,256
        mov     esi,fs:d[EPSP_INTMem]
        mov     ebx,0
@@pv0:  pushm   ebx,ecx,esi
        cmp     es:w[esi+4],-1
        jz      @@pv1
        ;
        mov     edi,offset DebugHeader
        mov     eax,ebx
        mov     cx,2
        call    Bin2Hex
        mov     b[edi],' '
        inc     edi
        mov     ax,es:w[esi+4]
        mov     cx,4
        call    Bin2Hex
        mov     b[edi],' '
        inc     edi
        mov     eax,es:d[esi]
        mov     cx,8
        call    Bin2Hex
        mov     b[edi],' '
        inc     edi
        ;
        mov     b[edi],13
        mov     b[edi+1],10
        mov     b[edi+2],'$'
        add     edi,2
        push    edi
        pop     ecx
        sub     ecx,offset DebugHeader
        mov     edx,offset DebugHeader
        mov     ah,40h
        mov     ebx,d[@@Handle]
        int     21h
        ;
@@pv1:  popm    ebx,ecx,esi
        add     esi,6
        inc     ebx
        loop    @@pv0



        ;
        ;Now do protected mode exception details.
        ;
        mov     edx,offset EIntHeader
        mov     ah,40h
        mov     ecx,EIntHeaderLen
        mov     ebx,d[@@Handle]
        int     21h
        ;
        mov     ecx,32
        mov     esi,fs:d[EPSP_INTMem]
        add     esi,256*6
        mov     ebx,0
@@pe0:  pushm   ebx,ecx,esi
        cmp     es:w[esi+4],-1
        jz      @@pe1
        ;
        mov     edi,offset DebugHeader
        mov     eax,ebx
        mov     cx,2
        call    Bin2Hex
        mov     b[edi],' '
        inc     edi
        mov     ax,es:w[esi+4]
        mov     cx,4
        call    Bin2Hex
        mov     b[edi],' '
        inc     edi
        mov     eax,es:d[esi]
        mov     cx,8
        call    Bin2Hex
        mov     b[edi],' '
        inc     edi
        ;
        mov     b[edi],13
        mov     b[edi+1],10
        mov     b[edi+2],'$'
        add     edi,2
        push    edi
        pop     ecx
        sub     ecx,offset DebugHeader
        mov     edx,offset DebugHeader
        mov     ah,40h
        mov     ebx,d[@@Handle]
        int     21h
        ;
@@pe1:  popm    ebx,ecx,esi
        add     esi,6
        inc     ebx
        loop    @@pe0



        ;
        ;Now do real mode int details.
        ;
        mov     edx,offset RIntHeader
        mov     ah,40h
        mov     ecx,RIntHeaderLen
        mov     ebx,d[@@Handle]
        int     21h
        ;
        mov     ecx,256
        mov     esi,fs:d[EPSP_INTMem]
        add     esi,(256*6)+(32*6)
        mov     ebx,0
@@ri0:  pushm   ebx,ecx,esi
        cmp     es:w[esi+2],-1
        jz      @@ri1
        ;
        mov     edi,offset DebugHeader
        mov     eax,ebx
        mov     cx,2
        call    Bin2Hex
        mov     b[edi],' '
        inc     edi
        mov     ax,es:w[esi+2]
        mov     cx,4
        call    Bin2Hex
        mov     b[edi],' '
        inc     edi
        mov     ax,es:w[esi]
        mov     cx,4
        call    Bin2Hex
        mov     b[edi],' '
        inc     edi
        ;
        mov     b[edi],13
        mov     b[edi+1],10
        mov     b[edi+2],'$'
        add     edi,2
        push    edi
        pop     ecx
        sub     ecx,offset DebugHeader
        mov     edx,offset DebugHeader
        mov     ah,40h
        mov     ebx,d[@@Handle]
        int     21h
        ;
@@ri1:  popm    ebx,ecx,esi
        add     esi,4
        inc     ebx
        loop    @@ri0



        ;
        ;Now do call-back details.
        ;
        mov     edx,offset CallBackHeader
        mov     ah,40h
        mov     ecx,CallBackHeaderLen
        mov     ebx,d[@@Handle]
        int     21h
        ;
        mov     esi,fs:d[EPSP_Resource]
@@cbLookLoop:   push    esi
        mov     ebp,ResNum              ;get number of entries.
        mov     edi,esi
        add     esi,ResHead+ResNum
        add     edi,ResHead
@@cb0:  cmp     es:b[edi],Res_CALLBACK
        jnz     @@cb1
        ;
        pushad
        mov     edi,offset DebugHeader
        mov     eax,es:[esi]
        shr     eax,16
        mov     cx,4
        call    Bin2Hex
        mov     b[edi],':'
        inc     edi
        mov     eax,es:[esi]
        mov     cx,4
        call    Bin2Hex
        mov     b[edi],' '
        inc     edi
        mov     eax,es:[esi+8]
        mov     cx,4
        call    Bin2Hex
        mov     b[edi],':'
        inc     edi
        mov     eax,es:[esi+4]
        mov     cx,8
        call    Bin2Hex
        ;
        mov     b[edi],13
        mov     b[edi+1],10
        mov     b[edi+2],'$'
        add     edi,2
        push    edi
        pop     ecx
        sub     ecx,offset DebugHeader
        mov     edx,offset DebugHeader
        mov     ah,40h
        mov     ebx,d[@@Handle]
        int     21h
        popad
        ;
@@cb1:  add     esi,4
        inc     edi
        dec     ebp
        jnz     @@cb0
        pop     edi
        mov     esi,es:[edi+8]  ;link to next list.
        or      esi,esi
        jnz     @@cbLookLoop

        ;
        ;Print mouse event target details.
        ;
        push    ds
        mov     ds,ExcepDSeg
        assume ds:_cwMain
        mov     eax,MouseETarget
        mov     ebx,MouseETarget+4
        assume ds:_Excep
        pop     ds
        mov     ecx,eax
        or      ecx,ebx
        jz      @@r8

        pushm   eax,ebx
        mov     edx,offset MouseEHeader
        mov     ah,40h
        mov     ecx,MouseEHeaderLen
        mov     ebx,d[@@Handle]
        int     21h
        popm    ebx,eax
        mov     edi,offset DebugHeader
        mov     cx,4
        call    Bin2Hex
        mov     b[edi],':'
        inc     edi
        mov     eax,ebx
        mov     ecx,8
        call    Bin2Hex
        mov     b[edi],13
        inc     edi
        mov     b[edi],10
        inc     edi
        mov     b[edi],13
        mov     b[edi+1],10
        mov     b[edi+2],'$'
        add     edi,2
        push    edi
        pop     ecx
        sub     ecx,offset DebugHeader
        mov     edx,offset DebugHeader
        mov     ah,40h
        mov     ebx,d[@@Handle]
        int     21h

@@r8:   popad
        pop     es
        pop     fs

        ;
        mov     ebx,d[@@Handle]
        mov     ah,3eh
        int     21h
        ;

@@9:    pop     ds
        retf
@@Handle:       ;
        dd ?
DebugDisplay    endp


;-------------------------------------------------------------------------
;
;Convert number into ASCII Hex version.
;
;On Entry:-
;
;EAX    - Number to convert.
;CX     - Digits to do.
;DS:EDI - Buffer to put string in.
;
Bin2Hex proc    near
        pushm   eax,ebx,ecx,edx,edi
        movzx   ecx,cx
        mov     ebx,offset HexTable
        add     edi,ecx
        dec     edi
        mov     edx,eax
@@0:    mov     al,dl
        shr     edx,4
        and     al,15
        xlat    cs:[ebx]
        mov     [edi],al
        dec     edi
        dec     ecx
        jnz     @@0
        popm    eax,ebx,ecx,edx,edi
        push    ecx
        movzx   ecx,cx
        add     edi,ecx
        pop     ecx
        ret
Bin2Hex endp


;-------------------------------------------------------------------------
BordExcep       proc    near
        pushm   ax,dx
        mov     ah,al
        mov     dx,3dah
        in      al,dx
        mov     dl,0c0h
        mov     al,11h
        out     dx,al
        mov     al,ah
        out     dx,al
        mov     al,20h
        out     dx,al
        popm    ax,dx
        ret
BordExcep       endp

;-------------------------------------------------------------------------
; copy debug text into output buffer
; upon entry ds:edi -> out buffer, ds:edx -> in buffer
;
DebugTextCopy   PROC    NEAR

dbdloop:
        mov     al,ds:[edx]
        test    al,al
        je      dbdret          ; null terminator flags end of text, don't transfer
        mov     ds:[edi],al
        inc     edx
        inc     edi
        jmp     dbdloop

dbdret:
        ret
DebugTextCopy   ENDP

;-------------------------------------------------------------------------
ExcepDSeg       dw ?
ExcepDDSeg      dw ?
ExcepSystemFlags dd ?
;
DebugBuffer     label byte
DebugEBP        dd ?
DebugEDI        dd ?
DebugESI        dd ?
DebugEDX        dd ?
DebugECX        dd ?
DebugEBX        dd ?
DebugEAX        dd ?
DebugGS dw ?
DebugFS dw ?
DebugES dw ?
DebugDS dw ?
DebugEIP        dd ?
DebugCS dw ?,?
DebugEFL        dd ?
DebugESP        dd ?
DebugSS dw ?,?
DebugTR dw ?
DebugCR0        dd ?
DebugCR1        dd ?
DebugCR2        dd ?
DebugCR3        dd ?
;
DebugCSApp      dd ?
DebugDSApp      dd ?
DebugESApp      dd ?
DebugFSApp      dd ?
DebugGSApp      dd ?
DebugSSApp      dd ?
;
DebugExceptionIndex dw 0
DebugExceptionCode dd 0
;
DebugName       db 'cw.err',0
;
ResHeader       db 13,10
        db '   Application resource tracking details   ',13,10
        db '===========================================',13,10,'$'
ResHeaderLen    equ     ($-1)-ResHeader
;
SelHeader       db 13,10,13,10
        db 'Selectors',13,10
        db '=========',13,10,13,10
        db ' sel   base     limit  type D mem count',13,10
        db '----------------------------------------',13,10,'$'
SelHeaderLen    equ ($-1)-SelHeader
;
TotalSelsText   db 13,10,"Total selectors: "
TotalSelsNum    db "0000",13,10
TotalSelsTLen   equ     $-TotalSelsText
;
MemHeader       db 13,10,13,10
        db 'Linear memory blocks',13,10
        db '====================',13,10,13,10
        db ' handle    base    length ',13,10
        db '--------------------------',13,10,'$'
MemHeaderLen    equ ($-1)-MemHeader
;
TotalMemText    db 13,10,"Total Linear memory: "
TotalMemNum1    db "00000000 ("
TotalMemNum2    db "00000000) in "
TotalMemNum3    db "00000000 blocks",13,10
TotalMemTLen    equ     $-TotalMemText
;
MouseEHeader    db 13,10,13,10
        db "Mouse event target: ","$"
MouseEHeaderLen equ ($-1)-MouseEHeader
DosMemHeader    db 13,10,13,10
        db "DOS memory blocks",13,10
        db "=================",13,10,13,10
        db " sel   base    length ",13,10
        db "----------------------",13,10,"$"
DosMemHeaderLen equ ($-1)-DosMemHeader
CallBackHeader  db 13,10,13,10
        db "Call-Backs",13,10
        db "==========",13,10,13,10
        db "  real        target",13,10
        db "-----------------------",13,10,"$"
CallBackHeaderLen equ ($-1)-CallBackHeader
LockHeader      db 13,10,13,10
        db 'Linear memory locked',13,10
        db '====================',13,10,13,10
        db '  base    length ',13,10
        db '-----------------',13,10,'$'
LockHeaderLen   equ ($-1)-LockHeader
;
PIntHeader      db 13,10,13,10
        db 'Protected mode interrupt vectors',13,10
        db '================================',13,10,13,10
        db 'No sel   offset ',13,10
        db '-------------

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?