exceptn.asm
来自「开放源码的编译器open watcom 1.6.0版的源代码」· 汇编 代码 · 共 2,472 行 · 第 1/5 页
ASM
2,472 行
mov ecx,4
call Bin2Hex
jmp exc22_r20
;
exc22_r2: mov d[edi],'xxxx'
add edi,4
;
exc22_r20: 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[exc22_Handle]
int 21h
popad
;
exc22_r1: add esi,4
inc edi
dec ebp
jnz exc22_r0
pop edi
mov esi,es:[edi+8] ;link to next list.
or esi,esi
jnz exc22_LookLoop
;
mov edi,offset TotalSelsNum
mov eax,TotalSelectors
mov ecx,4
call Bin2Hex
mov ecx,TotalSelsTLen
mov edx,offset TotalSelsText
mov ah,40h
mov ebx,d[exc22_Handle]
int 21h
;
;Now do memory blocks.
;
mov edx,offset MemHeader
mov ah,40h
mov ecx,MemHeaderLen
mov ebx,d[exc22_Handle]
int 21h
;
mov esi,DWORD PTR fs:[EPSP_Struc.EPSP_Resource]
mov es,ExcepDSeg
assume es:_cwMain
mov es,es:RealSegment
assume es:nothing
exc22_mLookLoop: push esi
mov ebp,ResNum ;get number of entries.
mov edi,esi
add esi,ResHead+ResNum
add edi,ResHead
exc22_m0: cmp BYTE PTR es:[edi],Res_MEM
jnz exc22_m1
mov eax,DWORD PTR fs:[EPSP_Struc.EPSP_INTMem]
cmp es:[esi],eax
jz exc22_m1
cmp WORD PTR fs:[EPSP_Struc.EPSP_DPMIMem],0
jz exc22_nodpmimem
pushad
mov bx,WORD PTR fs:[EPSP_Struc.EPSP_DPMIMem]
sys GetSelDet32
cmp es:[esi],edx
popad
jz exc22_m1
;
exc22_nodpmimem: ;Check if this is an MCB block.
;
push edi
cmp DWORD PTR fs:[EPSP_Struc.EPSP_mcbHead],0
jz exc22_MEM
mov ebx,es:[esi]
mov edi,DWORD PTR fs:[EPSP_Struc.EPSP_mcbHead]
exc22_mcbmc0: cmp ebx,edi
jz exc22_mcbmc1
mov edi,es:[edi+mcbChunkNext]
or edi,edi
jz exc22_MEM
jmp exc22_mcbmc0
;
exc22_mcbmc1: ;Update Total memory value and skip this block.
;
mov eax,es:[esi+8]
add eax,4095
and eax,0fffff000h
add TotalLinearMem+4,eax
pop edi
jmp exc22_m1
exc22_MEM: pop edi
pushad
mov edi,offset DebugHeader
mov eax,es:[esi+4]
mov cx,8
call Bin2Hex
mov b[edi],' '
inc edi
mov eax,es:[esi]
mov cx,8
call Bin2Hex
mov b[edi],' '
inc edi
mov eax,es:[esi+8]
add TotalLinearMem,eax
push eax
add eax,4095
and eax,0fffff000h
add TotalLinearMem+4,eax
pop eax
inc TotalLinearMem+8
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
push es
sub ecx,offset DebugHeader
mov edx,offset DebugHeader
mov ah,40h
mov ebx,d[exc22_Handle]
int 21h
pop es
popad
;
exc22_m1: add esi,4
inc edi
dec ebp
jnz exc22_m0
pop edi
mov esi,es:[edi+8] ;link to next list.
or esi,esi
jnz exc22_mLookLoop
;
;Now print MCB controlled blocks.
;
cmp DWORD PTR fs:[EPSP_Struc.EPSP_mcbHead],0
jz exc22_nomcbdis
mov esi,DWORD PTR fs:[EPSP_Struc.EPSP_mcbHead]
exc22_mcb0: mov edi,esi
add esi,mcbChunkLen
exc22_mcb1: cmp BYTE PTR es:[esi+mcbFreeUsed],"J" ;Free block?
jz exc22_mcb2
mov eax,DWORD PTR fs:[EPSP_Struc.EPSP_INTMem]
sub eax,mcbLen
cmp esi,eax
jz exc22_mcb2
cmp WORD PTR fs:[EPSP_Struc.EPSP_DPMIMem],0
jz exc22_nodpmimemhere
pushad
mov bx,WORD PTR fs:[EPSP_Struc.EPSP_DPMIMem]
sys GetSelDet32
sub edx,mcbLen
cmp esi,edx
popad
jz exc22_mcb2
exc22_nodpmimemhere:
pushad
mov edi,offset DebugHeader
mov eax,esi
add eax,mcbLen
mov cx,8
call Bin2Hex
mov b[edi],' '
inc edi
mov eax,esi
add eax,mcbLen
mov cx,8
call Bin2Hex
mov b[edi],' '
inc edi
movzx eax,WORD PTR es:[esi+mcbNextSize]
inc TotalLinearMem+8
mov cx,8
push eax
call Bin2Hex
mov b[edi],' '
inc edi
pop eax
add TotalLinearMem,eax
;
mov b[edi],13
mov b[edi+1],10
mov b[edi+2],'$'
add edi,2
push edi
pop ecx
push es
sub ecx,offset DebugHeader
mov edx,offset DebugHeader
mov ah,40h
mov ebx,d[exc22_Handle]
int 21h
pop es
popad
exc22_mcb2: cmp BYTE PTR es:[esi+mcbNext],"M" ;end of the chain?
jz exc22_mcb3
mov esi,es:[edi+mcbChunkNext]
or esi,esi
jnz exc22_mcb0
jmp exc22_nomcbdis
;
exc22_mcb3: movzx eax,WORD PTR es:[esi+mcbNextSize]
add eax,mcbLen
add esi,eax
jmp exc22_mcb1
;
exc22_nomcbdis: ;Display totals.
;
mov edi,offset TotalMemNum1
mov eax,TotalLinearMem
mov ecx,8
call Bin2Hex
mov edi,offset TotalMemNum2
mov eax,TotalLinearMem+4
mov ecx,8
call Bin2Hex
mov edi,offset TotalMemNum3
mov eax,TotalLinearMem+8
mov ecx,8
call Bin2Hex
mov ecx,TotalMemTLen
mov edx,offset TotalMemText
mov ah,40h
mov ebx,d[exc22_Handle]
int 21h
;
;Now do lock details.
;
mov edx,offset LockHeader
mov ah,40h
mov ecx,LockHeaderLen
mov ebx,d[exc22_Handle]
int 21h
;
mov esi,DWORD PTR fs:[EPSP_Struc.EPSP_Resource]
exc22_lLookLoop: push esi
mov ebp,ResNum ;get number of entries.
mov edi,esi
add esi,ResHead+ResNum
add edi,ResHead
exc22_l0: cmp BYTE PTR es:[edi],Res_LOCK
jnz exc22_l1
;
exc22_LOCK: pushad
mov edi,offset DebugHeader
mov eax,es:[esi]
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[exc22_Handle]
int 21h
popad
;
exc22_l1: add esi,4
inc edi
dec ebp
jnz exc22_l0
pop edi
mov esi,es:[edi+8] ;link to next list.
or esi,esi
jnz exc22_lLookLoop
;
;Now do DOS memory details.
;
mov edx,offset DosMemHeader
mov ah,40h
mov ecx,DosMemHeaderLen
mov ebx,d[exc22_Handle]
int 21h
;
mov esi,DWORD PTR fs:[EPSP_Struc.EPSP_Resource]
exc22_dmLookLoop: push esi
mov ebp,ResNum ;get number of entries.
mov edi,esi
add esi,ResHead+ResNum
add edi,ResHead
exc22_dm0: cmp BYTE PTR es:[edi],Res_DOSMEM
jnz exc22_dm1
;
pushad
mov edi,offset DebugHeader
mov eax,es:[esi]
mov cx,4
call Bin2Hex
mov b[edi],' '
inc edi
push ebx
push ecx
push edx
mov bx,es:[esi]
sys GetSelDet32
mov eax,edx
pop edx
pop ecx
pop ebx
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[exc22_Handle]
int 21h
popad
;
exc22_dm1: add esi,4
inc edi
dec ebp
jnz exc22_dm0
pop edi
mov esi,es:[edi+8] ;link to next list.
or esi,esi
jnz exc22_dmLookLoop
cmp DWORD PTR fs:[EPSP_Struc.EPSP_INTMem],0
jz exc22_r8
;
;Now do protected mode int details.
;
mov edx,offset PIntHeader
mov ah,40h
mov ecx,PIntHeaderLen
mov ebx,d[exc22_Handle]
int 21h
;
mov ecx,256
mov esi,DWORD PTR fs:[EPSP_Struc.EPSP_INTMem]
mov ebx,0
exc22_pv0:
push ebx
push ecx
push esi
cmp WORD PTR es:[esi+4],-1
jz exc22_pv1
;
mov edi,offset DebugHeader
mov eax,ebx
mov cx,2
call Bin2Hex
mov b[edi],' '
inc edi
mov ax,WORD PTR es:[esi+4]
mov cx,4
call Bin2Hex
mov b[edi],' '
inc edi
mov eax,DWORD PTR es:[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[exc22_Handle]
int 21h
;
exc22_pv1:
pop esi
pop ecx
pop ebx
add esi,6
inc ebx
loop exc22_pv0
;
;Now do protected mode exception details.
;
mov edx,offset EIntHeader
mov ah,40h
mov ecx,EIntHeaderLen
mov ebx,d[exc22_Handle]
int 21h
;
mov ecx,32
mov esi,DWORD PTR fs:[EPSP_Struc.EPSP_INTMem]
add esi,256*6
mov ebx,0
exc22_pe0:
push ebx
push ecx
push esi
cmp WORD PTR es:[esi+4],-1
jz exc22_pe1
;
mov edi,offset DebugHeader
mov eax,ebx
mov cx,2
call Bin2Hex
mov b[edi],' '
inc edi
mov ax,WORD PTR es:[esi+4]
mov cx,4
call Bin2Hex
mov b[edi],' '
inc edi
mov eax,DWORD PTR es:[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 ec
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?