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