+ -
当前位置:首页 → 问答吧 → 请问数据段的特权级别是指什么

请问数据段的特权级别是指什么

时间:2011-05-23

来源:互联网

我看杨季文的书,上面说从保护模式回到实模式前,要让数据段的特权级别为0,
我写了个程序,里面的数据段的DPL=3,RPL=2,然后就回到实模式,程序运行得
很正常,请问数据段的特权级别是数据段描述符中的DPL还是数据段的选择子RPL?
可是这两个都不是0,怎么与书上说得不同?请问是怎么回事?
请看(我这里只是写个大概):
jump macro selector,offsetv
  db 0eah ;操作码
  dw offsetv ;16位偏移
  dw selector ;段值或选择子
  endm
;==============================
dseg segment use16  
gdt label byte  
dummy descriptor <>  
;
code descriptor <0ffffh,,,atce,>
code_sel =code-gdt ;代码段描述符的选择子
;
datas descriptor <0ffffh,8000h,0bh,0F2h,0> ;DPL=3 ***********
datas_sel =datas-gdt+2 ;数据段描述符的选择子 RPL=2 ***********
;
gdtlen =$-gdt
;
vgdtr pdesc <gdtlen-1,>  
;
dseg ends

;代码段=============================
cseg segment use16  
  assume cs:cseg, ds:dseg
start:
.............
  ;进入保护模式
  jump <code_sel>,<offset virtual>
  ;
virtual: ;现在开始在保护方式下
  mov ax,datas_sel
  mov ds,ax ;加载数据段描述符,此时的数据段的DPL=3,RPL=2,然后马上就回到实模式 ******  
  ;进入实模式
  jump <seg real>,<offset real>
  ;
real: ;现在又回到实模式
  sti  
  mov ax,4c00h  
  int 21h  
cseg ends
  end start

作者: leetow2003   发布时间: 2011-05-23

DPL

作者: hsh188d88452d2   发布时间: 2011-05-23

其实没有这么多讲究
在虚拟机里更有可能有不同

作者: Areslee   发布时间: 2011-05-23

引用 2 楼 areslee 的回复:
其实没有这么多讲究
在虚拟机里更有可能有不同

为什么能正常运行?不是说数据段的特权级必须为0吗?

作者: leetow2003   发布时间: 2011-05-23