真實模式下,段位址會被放在四個段暫存器中,即:程式碼段CS,資料段DS,堆堆疊段SS和附加段ES暫存器。這樣在加載數據或者控制程序運行的時候,只需要一個偏移量參數,CPU 會自動用對應段的起始位址加上偏移量參數來得到需要的位址段位址(16-bit)左移4位得到段基址(20-bit), 再加上該單元(Label)的段偏移量(16-bit)來得到其物理位址(20-bit),如圖左所示
在保護模式下,邏輯位址不再由(段位址:偏移位址)組成了, 而是由(段選擇子:偏移位址)表示,這裡的偏移位址也變成了 32 位的,所以段空間也比真實模式下大得多,偏移位址的意思和真實模式下並沒有本質不同, 但段位址的計算就要復雜一些了,段基址(Segment Base Address)被存放在段描述符(Segment Descriptor)中GDT(Global Descriptor Table, 全局段選擇子表)是保存著所有段選擇子的信息, 段選擇子(Segment Selector)是一個指向某個段選擇子的索引。
沒有留言:
張貼留言