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