www.pudn.com > kpe42s.zip > SYS.ASM


code    segment 
        assume  cs:code,ds:code 
start   proc    near 
        jmp     next 
.386p 
mark1   db      'System Info :',0dh,0ah,0dh,0ah 
        db      'GDTR = ' 
mark2   db      '0000-00000000',0dh,0ah 
        db      'IDTR = ' 
mark3   db      '0000-00000000',0dh,0ah 
        db      'CR0 = ' 
mark4   db      '00000000',0dh,0ah 
        db      'CR2 = ' 
mark41  db      '00000000',0dh,0ah 
        db      'CR3 = ' 
mark5   db      '00000000',0dh,0ah 
        db      'DR0 = ' 
mark6   db      '00000000',0dh,0ah 
        db      'DR1 = ' 
mark7   db      '00000000',0dh,0ah 
        db      'DR2 = ' 
mark8   db      '00000000',0dh,0ah 
        db      'DR3 = ' 
mark9   db      '00000000',0dh,0ah 
        db      'DR6 = ' 
mark10  db      '00000000',0dh,0ah 
        db      'DR7 = ' 
mark11  db      '00000000',0dh,0ah 
        db      '$' 
 
msg_1   db      'Memory not enough than 128K',0dh,0ah,'$' 
msg_2   db      '[G] Dump GDT   [I] Dump IDT',0dh,0ah,0dh,0ah,'$' 
msg_3   db      '0000 ?? ?? ?? ?? ?? ?? ?? ??-?? ?? ?? ?? ?? ?? ?? ??  ****************',0dh,0ah,'$' 
msg_4   db      'Over !',0dh,0ah,'$' 
 
number  db      '0123456789ABCDEF' 
idtadds dw      03ffh,0000h,0000h 
buffer1 dw      0010h dup (0) 
buffer2 dw      0000h           ;64K 
buffer3 db      0010h dup (0) 
        dw      0ffffh 
        db      00h,00h,00h 
        db      93h 
        dw      0000h 
        dw      0ffffh 
        db      00h,00h,00h 
        db      93h 
        db      0020h dup (0) 
 
dump_ax : 
        push    bp 
        and     bp,000fh 
        mov     ah,al 
        cmp     ah,20h 
        jnb     L4 
        mov     ah,2eh 
L4 : 
        cmp     ah,'$' 
        jnz     L5 
        mov     ah,2eh 
L5 : 
        mov     cs:[bp+offset msg_3+36h],ah 
        mov     di,bp 
        add     di,di 
        add     di,bp 
        mov     cx,0002h 
L6 : 
        push    cx 
        mov     cl,04h 
        rol     al,cl 
        mov     bx,ax 
        and     bx,000fh 
        mov     dl,cs:[bx+offset number] 
        mov     cs:[di+offset msg_3+05h],dl 
        inc     di 
        pop     cx 
        loop    L6 
        pop     bp 
        ret 
 
eax2di : 
        mov     cx,0008h 
L1 : 
        push    cx 
        mov     cl,04h 
        rol     eax,cl 
        mov     bx,ax 
        and     bx,000fh 
        mov     dl,cs:[bx+offset number] 
        mov     cs:[di],dl 
        inc     di 
        pop     cx 
        loop    L1 
        ret 
tax2di : 
        mov     cx,0004h 
L2 : 
        push    cx 
        mov     cl,04h 
        rol     ax,cl 
        mov     bx,ax 
        and     bx,000fh 
        mov     dl,cs:[bx+offset number] 
        mov     cs:[di],dl 
        inc     di 
        pop     cx 
        loop    L2 
        ret 
mem_error : 
        mov     ax,cs 
        mov     ds,ax 
        mov     ah,09h 
        mov     dx,offset msg_1 
        int     21h 
        mov     ax,4cffh 
        int     21h 
next : 
        mov     ah,4ah 
        mov     bx,1000h 
        int     21h 
        jb      mem_error 
        mov     sp,0fe00h 
        mov     ah,48h 
        mov     bx,1000h 
        int     21h 
        jb      mem_error 
        mov     cs:buffer2,ax 
        mov     ax,0600h 
        mov     bx,0700h 
        mov     cx,0000h 
        mov     dx,184fh 
        int     10h 
        mov     ah,02h 
        mov     bh,00h 
        mov     dx,0000h 
        int     10h 
        mov     ah,01h 
        mov     cx,0607h 
        int     10h 
        NOP 
        mov     ax,cs 
        mov     ds,ax 
        sgdt    fword ptr cs:buffer1 
        mov     ax,cs:buffer1 
        mov     di,offset mark2 
        call    tax2di 
        mov     bx,offset buffer1 
        mov     eax,cs:[bx+02h] 
        mov     di,offset mark2+05h 
        call    eax2di 
        NOP 
        sidt    fword ptr cs:buffer1 
        mov     ax,cs:buffer1 
        mov     di,offset mark3 
        call    tax2di 
        mov     bx,offset buffer1 
        mov     eax,cs:[bx+02h] 
        mov     di,offset mark3+05h 
        call    eax2di 
        NOP 
        mov     eax,cr0 
        mov     di,offset mark4 
        call    eax2di 
        mov     eax,cr2 
        mov     di,offset mark41 
        call    eax2di 
        mov     eax,cr3 
        mov     di,offset mark5 
        call    eax2di 
        mov     eax,dr0 
        mov     di,offset mark6 
        call    eax2di 
        mov     eax,dr1 
        mov     di,offset mark7 
        call    eax2di 
        mov     eax,dr2 
        mov     di,offset mark8 
        call    eax2di 
        mov     eax,dr3 
        mov     di,offset mark9 
        call    eax2di 
        mov     eax,dr6 
        mov     di,offset mark10 
        call    eax2di 
        mov     eax,dr7 
        mov     di,offset mark11 
        call    eax2di 
        NOP 
        mov     ax,cs 
        mov     ds,ax 
        mov     es,ax 
        mov     ah,09h 
        mov     dx,offset mark1 
        int     21h 
        NOP 
        mov     ah,09h 
        mov     dx,offset msg_2 
        int     21h 
        xor     ax,ax 
        int     16h 
        or      al,20h 
        cmp     al,'g' 
        jz      dump_gdt 
        cmp     al,'i' 
        jz      dump_idt 
        mov     ax,4cffh 
        int     21h 
dump_gdt : 
        sgdt    fword ptr cs:buffer1 
        jmp     L3 
dump_idt : 
        sidt    fword ptr cs:buffer1 
        inc     word ptr cs:buffer1 
        jmp     L3 
L3 : 
        mov     bx,offset buffer1 
        mov     eax,cs:[bx+02h] 
        mov     bx,offset buffer3 
        mov     cs:[bx+12h],eax 
        mov     byte ptr cs:[bx+15h],93h 
        xor     eax,eax 
        mov     ax,cs:buffer2 
        mov     cl,04h 
        shl     eax,cl 
        mov     cs:[bx+1ah],eax 
        mov     byte ptr cs:[bx+1dh],93h 
        mov     ah,87h 
        mov     cx,cs:buffer1 
        inc     cx 
        shr     cx,01h 
        mov     si,offset buffer3 
        int     15h 
       mov     ds,cs:buffer2 
       mov     ax,cs 
       mov     es,ax 
       mov     di,offset msg_3 
       mov     al,20h 
       mov     cx,0046h 
       cld 
       repz    stosb 
       mov     byte ptr cs:msg_3+1ch,'-' 
        mov     si,0000h 
        mov     bp,0000h 
        mov     ax,bp 
        mov     di,offset msg_3 
        call    tax2di 
        mov     cx,cs:buffer1 
        inc     cx 
L7 : 
        push    cx 
        mov     ds,cs:buffer2 
        mov     al,ds:[si] 
        inc     si 
        call    dump_ax 
        inc     bp 
        test    bp,000fh 
        jnz     L8 
        mov     ax,cs 
        mov     ds,ax 
        mov     ah,09h 
        mov     dx,offset msg_3 
        int     21h 
       mov     ds,cs:buffer2 
       mov     ax,cs 
       mov     es,ax 
       mov     di,offset msg_3 
       mov     al,20h 
       mov     cx,0046h 
       cld 
       repz    stosb 
       mov     byte ptr cs:msg_3+1ch,'-' 
        mov     ax,bp 
        mov     di,offset msg_3 
        call    tax2di 
L8 : 
        pop     cx 
        loop    L7 
        mov     ax,cs 
        mov     ds,ax 
        mov     cx,cs:buffer1 
        test    cx,000fh 
        jz      L9 
        mov     ah,09h 
        mov     dx,offset msg_3 
        int     21h 
L9 : 
        mov     ah,09h 
        mov     dx,offset msg_4 
        int     21h 
        mov     ax,4cffh 
        int     21h 
start   endp 
code    ends 
        end