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 最高權限