X86記憶體區段

x86架構中 ， 記憶體區段 （ Memory Segmentation ） 是在不改變16位元段選擇子時 ， 使用單個索引暫存器 （ 保存了段內地址偏移值 ） 所能夠定址的的記憶體範圍部份 。 也指在英特爾x86指令集體系結構下記憶體區段的實現方式 。 從8086開始到隨後的各款x86架構CPU ， 無論是實模式還是保護模式 ， 內存尋址時都使用16位段寄存器 （ segment register ） 。 段寄存器默認使用情況爲 ： 代碼段寄存器CS與寄存器IP相配合獲得當前線程代碼執行到的內存位置 ； 數據段寄存器DS與各通用寄存器配合訪問內存中的數據 ； 棧段寄存器SS與寄存器 ( E ) SP 、 ( E ) BP配合訪問線程的調用棧 （ call stack ） ； 擴展段寄存器ES用於特定字符串指令 （ 如MOVS或CMPS ） 。 80386引入了2個額外的段寄存器FS與GS ， 並無特定的硬件用途 。 這些段寄存器除了有16位的可見部分 ， 還有不可見的隱藏部分 ， 稱爲描述符緩存 “ descriptor cache ” 或隱藏寄存器 “ shadow register ” 。 當一個段選擇符 （ segment selector ） 裝入段寄存器的可見部分 ， 處理器同時也把該段描述符的其它數據裝入到段寄存器的隱藏部分 ， 這包括段開始的基地址 、 段長度 、 訪問控制信息等 。 這些信息緩存到段寄存器中 ， 避免了處理器在轉址 （ translate address ） 時花費額外的總線週期從段選擇符表中讀入數據 。 處理器指令中可以明示使用哪些段寄存器 ， 這將替換掉默認使用的段寄存器 。