News:

MASM32 SDK Description, downloads and other helpful links
MASM32.com New Forum Link
masmforum WebSite

Priviledge level of data segment

Started by leetow2003, May 24, 2011, 12:49:32 AM

Previous topic - Next topic

leetow2003

I read a book,it said the priviledge level of data segment
should be equal to 0 before return to R-mode from P-mode,but
in my codes the DPL is equal to 3 and RPL is equal to 2,
and it run very well,I want to know:
(1)Is the priviledge level of data segment DPL or RPL? or other?
(2)why does it run well?is the opinoino of book error?
Look:


;Define a data segment in GDT
dseg        segment   use16     
gdt         label   byte       
dummy       descriptor <>
   
datas       descriptor <0ffffh,8000h,0bh,0F2h,0>   ;DPL=3
datas_sel   =datas-gdt+3
.....
dseg        ends 
 
;Code segment
cseg        segment   use16     
            assume  cs:cseg, ds:dseg
start:
.....
           ;jump into P-mode
     
virtual:    ;P-Mode
            mov ax,datas_sel
            mov ds,ax
....
            ;return to R-mode
....
real:      ;R-Mode
....
              sti                   
         mov  ax,4c00h         
           int 21h
cseg        ends   
            end start


dedndave

maybe i am wrong, but i do not see where you have actually jumped to protected mode

leetow2003

Sorry,my codes are brief,I write main part,look:

jump     macro  selector,offsetv
          db     0eah     
          dw     offsetv 
          dw     selector 
         endm
.386
;Define a data segment in GDT
dseg        segment   use16     
gdt         label   byte       
dummy       descriptor <>
   
datas       descriptor <0ffffh,8000h,0bh,0F2h,0>   ;DPL=3
datas_sel   =datas-gdt+2
.....
dseg        ends 
 
;Code segment
cseg        segment   use16     
            assume  cs:cseg, ds:dseg
start:
.....     
           ;To initialize code segment
           lgdt  fword ptr vgdtr
           ;
           cli                 
           mov eax,cr0
           or eax,1
           mov cr0,eax
           ;
           jump <code_sel>,<offset virtual>
     
virtual:    ;P-Mode
            mov ax,datas_sel
            mov ds,ax
            mov eax,cr0
            and eax,0fffffffeh
            mov cr0,eax
            jump <seg real>,<offset real>

real:      ;R-Mode
           sti                   
           mov  ax,4c00h         
           int 21h
cseg        ends   
            end start