.MODEL SMALL
.486P
DISPLAY1 MACRO MSG
MOV AH,09H
.486P
DISPLAY1 MACRO MSG
MOV AH,09H
LEA DX,MSG
INT 21H
ENDM
DIS MACRO CHAR
MOV AH,02H
MOV DL,CHAR
INT 21H
ENDM
.DATA
DPMI DW ?,?
HEXTAB DB '0123456789ABCDEF'
MSG_LDTR DB 10,13,"LDTR CONTAINS : $"
MSG_IDTR DB 10,13,"IDTR CONTAINS : $"
MSG_GDTR DB 10,13,"GDTR CONTAINS : $"
MSG_TR DB 10,13,"TR CONTAINS : $"
MSG_MSW DB 10,13,"MSW CONTAINS : $"
GDTR DQ ?
LDTR DW ?
MSW DW ?
TR DW ?
IDTR DQ ?
COLON DB ':'
.CODE
.STARTup
MOV AX,1687H
INT 2FH ;get DPMI entry point
MOV DPMI[0],DI ;dpmi entry point - offset
MOV DPMI[2],ES ;dpmi entry point - segment
MOV ES,AX ;invoke far call
CALL DWORD PTR DPMI ;switch to protected mode
JNC PMODE
JMP EXIT
PMODE:
SIDT IDTR
SGDT GDTR
SLDT LDTR
SMSW MSW
STR TR
DISPLAY1 MSG_IDTR
MOV BX,WORD PTR[IDTR+4]
CALL CONV
MOV BX,WORD PTR[IDTR+2]
CALL CONV
DIS COLON
MOV BX,WORD PTR[IDTR]
CALL CONV
DISPLAY1 MSG_GDTR
MOV BX,WORD PTR[GDTR+4]
CALL CONV
MOV BX,WORD PTR[GDTR+2]
CALL CONV
DIS COLON
MOV BX,WORD PTR[GDTR]
CALL CONV
DISPLAY1 MSG_LDTR
MOV BX,WORD PTR[LDTR]
CALL CONV
DISPLAY1 MSG_MSW
MOV BX,WORD PTR[MSW]
CALL CONV
DISPLAY1 MSG_TR
MOV BX,WORD PTR[TR]
CALL CONV
EXIT:MOV AH,4CH
INT 21H
CONV PROC NEAR
MOV CX,4
DIGIT:
ROL BX,4
PUSH BX
MOV DI,BX
AND DI,000FH
MOV DL,HEXTAB[DI]
MOV AH,02H
INT 21H
POP BX
LOOP DIGIT
RET
CONV ENDP
end
No comments:
Post a Comment