.386P
CSEG16 SEGMENT USE16
ASSUME DS: CSEG16
Start:
cld
push cs
pop ds
mov ax, 0B800H
mov es, ax
mov si, OFFSET MsgR1
mov di, (20)*2
call ShowMessage
mov eax, SEG CSEG32
shl eax, 4
add DWORD PTR CSD32[2], eax
mov eax, SEG CSEG16
shl eax, 4
add DWORD PTR CSD16[2], eax
add eax, OFFSET Gdt0
mov GdtA, eax
push es
cli
lgdt FWORD PTR GdtL
mov eax, cr0
or al, 1
mov cr0, eax
DB 0EAH ; jmp CSD32:0
DW 0
DW OFFSET CSD32 - OFFSET Gdt0
Return16:
mov si, OFFSET Msg16
mov di, (80*2+20)*2
call ShowMessage
mov eax, cr0
and al, 0FEH
mov cr0, eax
jmp @F
@@:
pop es
sti
mov si, OFFSET MsgR2
mov di, (80*3+20)*2
call ShowMessage
mov ah, 4CH
int 21H
ShowMessage PROC NEAR
mov ah, 0F4H
.repeat
lodsb cs:[si]
stosw es:[di]
.until (al == 0)
ret
ShowMessage ENDP
Gdt0 DW 00000H, 0000H, 0000H, 0000H
CSD32 DW 0FFFFH, 0000H, 9A00H, 00CFH
CSD16 DW 0FFFFH, 0000H, 9A00H, 0080H
DSD16 DW 0FFFFH, 8000H, 920BH, 0080H
GdtL DW $-Gdt0-1
GdtA DD 0
MsgR1 DB "HELLO WORLD_DOS_16", 0
Msg16 DB "HELLO WORLD_P16", 0
MsgR2 DB "RETURN DOS---QQ GROUP:83372198;QQ:750347821;EMAIL:750347821@QQ.COM NAME:CXDZXC AddressANZHOU DATE:2009-3-15,HTTP://BIOSOS.5D6D.COM", 0
CSEG16 ENDS
CSEG32 SEGMENT USE32
mov ax, DSD16 - Gdt0
mov es, ax
mov esi, OFFSET Msg32
mov di, (80*1+20)*2
mov ah, 0F4h
.repeat
lodsb cs:[esi]
stosw es:[di]
.until (al == 0)
DB 0EAH ; jmp CSD16:0
DD Return16
DW CSD16 - Gdt0
Msg32 DB "HELLO WORLD_P32", 0
CSEG32 ENDS
SSEG SEGMENT STACK
DW 400H DUP(?)
SSEG ENDS
END Start
[ 本帖最后由 cxdzxc 于 2009-10-30 14:02 编辑 ] |