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 + -
显示快捷键?