????????2??????1M???????棬???????????????汣????
????????????????3??????
????1.????gdt???????????
????2.????a20???????1M?????????????
????3.????cr0??pe?1????????????????????????С?
;
;protect.ASM
;
;
;
SECTION ALIGN=16 VSTART=0x7E00
MOV AX ?? [cs:SS_BASE]
MOV SS ?? AX
XOR SP ?? SP
MOV AX ?? [cs:DS_BASE]
MOV DS ?? AX
MOV BX ??  0x7C00
;????#1???????????????μ???????????
mov dword [bx]??0x0
mov dword [bx+0x04]??0x0
;????#1???????????????μ???????????
mov dword [bx+0x08]??0x7e0001ff
mov dword [bx+0x0c]??0x00409800
;????#2???????????????μ????????????????????μ????????????
mov dword [bx+0x10]??0x8000ffff
mov dword [bx+0x14]??0x0040920b
;????#3???????????????μ???????????
mov dword [bx+0x18]??0x00007a00
mov dword [bx+0x1c]??0x00409600
;????#4???????????????μ???????????
mov dword [bx+0x20]??0x7e0001ff
mov dword [bx+0x24]??0x00F09800
;????#5???????????????μ????????????????????μ????????????
mov dword [bx+0x28]??0x8000ffff
mov dword [bx+0x2C]??0x00F0920b
;????#6???????????????μ???????????
mov dword [bx+0x30]??0x00007a00
mov dword [bx+0x34]??0x00F09600
mov bx ?? GDT_SIZE
mov word [bx] ?? 47
mov dword [bx+2]?? 0x7C00
lgdt [bx]
in al ?? 0x92
or al ?? 0000_0010B
out 0x92??al
cli
mov eax ?? cr0
or eax ?? 0x01
mov cr0 ??eax
jmp dword 0x0008:(PROTECT_BEGIN-0x7E00)
DS_BASE DW 0x0000
SS_BASE DW 0x2000
[bits 32]
ZERO_SECTOR    DD 0x0??0x0
CS_SECTOR      DD 0x0??0x0
DS_SECTOR      DD 0x0??0x0
SS_SECTOR      DD 0x0??0x0
CS_DPL3_SECTOR DD 0x0??0x0
DS_DPL3_SECTOR DD 0x0??0x0
GDT_SIZE       DW 0x00
DGT_BASE       DD 0x00000000
PROTECT_BEGIN:
mov ax ?? 16
mov ds ?? ax
mov byte [0] ?? 'P'
mov byte [1] ?? 0x07
mov byte [2] ?? 'r'
mov byte [3] ?? 0x07
mov byte [4] ?? 'o'
mov byte [5] ?? 0x07
mov byte [6] ?? 't'
mov byte [7] ?? 0x07
mov byte [8] ?? 'e'
mov byte [9] ?? 0x07
mov byte [10] ?? 'c'
mov byte [11] ?? 0x07
mov byte [12] ?? 't'
mov byte [13] ?? 0x07
jmp $
times 512 - ($-$$) db 0
????12????
???????????????????????漰???????????????????SPASVOС??(021-61079698-8054)?????????????????????????