哪位高手能解决一下特权的代码

谁能解决一下特权的代码
BOCHSDBG 报错 网址 hiphotos.baidu.com/zhidao/pic/item/8d5494ee3f29f5b82df534ac.jpg


%include "pm.inc"
org 07c00h

jmp begin
db 11h
  ;初始化GDT
label_gdt:Descriptor 0,0,0 ;空描述符
label_code32:Descriptor 0,0ffffh,DA_C+DA_32 ;0级代码段
label_code32d:Descriptor 0,0ffffh,DA_C+DA_32 ;3级
label_data:Descriptor 0b8000h,0ffffh,DA_DRW+DA_DPL3 ;3级
label_ldt:Descriptor 0,0ffffh,DA_LDT ;LDT
label_ss0:Descriptor 0,ss0len, DA_DRWA + DA_32 ;SS0堆栈
label_ss3:Descriptor 0,ss3len, DA_DRWA + DA_32 + DA_DPL3 ;SS3堆栈



label_gate:Gate selectorcode,0,0,DA_386CGate ;0级门
label_gate2:Gate selectorcode2,0,0,DA_386CGate+DA_DPL3 ;3级门
label_tss:Descriptor 0,TSSLen-1,DA_386TSS ;TSS描述符

gdtlen equ $-label_gdt ;GDT长度

;段选择子
selectorcode equ label_code32-label_gdt
selectordata equ label_data - label_gdt+SA_RPL3
selectorldt equ label_ldt-label_gdt
selectorss0 equ label_ss0-label_gdt
selectorss3 equ label_ss3-label_gdt+SA_RPL3  
selectorgate equ label_gate-label_gdt+SA_RPL3
selectorTSS equ label_tss-label_gdt
selectorgate2 equ label_gate2-label_gdt+SA_RPL3
selectorcode2 equ label_code32d - label_gdt
;GDT长度 界限 基址
vggdtr dw gdtlen-1
  dd 0

;LDT
ldt:
label_codec32:Descriptor 0,0ffffh,DA_C + DA_32 + DA_DPL3 ;3级代码段CODEC32
selectorcodec32 equ label_codec32-ldt+4+3 ;选择子


;TSS段
LABEL_TSS:
DD 0 ; Back
DD ss0len ; 0 级堆栈
DD selectorss0 ; 
DD 0 ; 1 级堆栈
DD 0 ; 
DD 0 ; 2 级堆栈
DD 0 ; 
DD 0 ; CR3
DD 0 ; EIP
DD 0 ; EFLAGS
DD 0 ; EAX
DD 0 ; ECX
DD 0 ; EDX
DD 0 ; EBX
DD 0 ; ESP
DD 0 ; EBP
DD 0 ; ESI
DD 0 ; EDI
DD 0 ; ES
DD 0 ; CS
DD 0 ; SS
DD 0 ; DS
DD 0 ; FS
DD 0 ; GS
DD 0 ; LDT
DW 0
  tss1:DW $+2 ; 调试陷阱标志
 
  DB 0ffh ; I/O位图基址
; I/O位图结束标志
TSSLen equ $ - LABEL_TSS

  ;0级堆栈段

ss0:dd 0
  dd 0
  dd 0
  dd 0
  dd 0
  db 0
   
ss0len equ $-ss0-1

  ;3级堆栈段

ss3:dd 0
  dd 0
  dd 0
  dd 0
  dd 0
  db 0

ss3len equ $-ss3-1

  ;程序入口点

begin:
  ;初始化0级代码段

mov ax,0
mov ds,ax
mov ax,[tss1]
mov ax,code32
mov [label_code32+2],ax
;初始化SS0堆栈段
mov ax,ss0
mov [label_ss0+2],ax
;初始化SS0堆栈段
mov ax,ss3
mov [label_ss3+2],ax
;初始化LDT
mov ax,ldt
mov [label_ldt+2],ax
;初始化代码段
mov ax,code32d
mov [label_code32d+2],ax
;初始化代码段
mov ax,codec32
mov [label_codec32+2],ax
;初始化TSS段
xor eax, eax
mov ax, ds
shl eax, 4
add eax, label_tss
mov word [label_tss + 2], ax
shr eax, 16
mov byte [label_tss + 4], al
mov byte [label_tss + 7], ah

;初始化GDT
mov eax,label_gdt
mov [vggdtr+0x02],eax

;加载GDT
lgdt [vggdtr]
;打开A20
cli

in al,92h
or al,2
out 92h,al
;准备进入保护模式
mov eax,cr0
or eax,1
mov cr0,eax
;JMP到标号CODE32 正常
jmp selectorcode:0

real:
[bits 32]
mov ax,0b800h
mov ds,ax
mov bx,80*10*2+4
mov ax,0c63h
mov [bx],ax

in al,92h
and al,0fdh
out 92h,al

jmp $

[bits 32]
code32d:
mov ax,0dh
mov ax,0dh
mov ax,0dh
jmp $

[bits 32]
code32:
mov ax,selectorss0
mov ss,ax