實模式和保護模式下的段寄存器


ES CS DS SS FS GS LDTR TR

32位下段寄存器的組成圖:(不考慮64位)

分為4個部分

  • Selector   16位/可見
  • Attribute  16位/不可見
  • Limit   32位/不可見
  • Base  32位/不可見

實模式尋址

8086實模式尋址時:

mov cx,0x2000
mov ds,cx
mov [0xc0],al
;以上,將段寄存器ds的值設置為0x2000,
;然后向該段內偏移地址為0x00c0的地址寫入al的值,
;寫入時,將ds的值左移4位,再加上0x00c0,即:0x200c0

32位實模式尋址不一樣:

mov ax,cs
mov ds,ax
;第一句 ax=cs.Selector
;第二句 先 ds.Selector=ax
;然后 ds.Base=ds.Selector<<4,Base只用到了低20位。

32位環境下,當用匯編讀取某一地址時:

mov dword ptr ds:[0x123456],eax
;真正讀寫的地址是ds.base+0x123456

 32位保護模式下尋址

6個段寄存器ES CS DS SS FS GS叫做段選擇器,和實模式不同,保護模式的內存訪問有自己的方式,

在保護模式下,盡管訪問內存時也需要指定一個段,但傳送到段選擇器的內容不是邏輯段地址,而是段選擇子。

段選擇子由三部分組成:

  • 描述符索引——用來在描述符表中選擇一個段描述符。
  • 描述符表指示器——TI=0時,在GDT表中;TI=1時,在LDT表中。
  • 請求特權級別——4個級別,0,1,2,3。

例:

mov cx,00000000000_10_000B         ;加載數據段選擇子(0x10)
mov ds,cx
;索引號  00000000000_10   2
;TI  0  GDT
;權限 00 最高權限

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM