long mode 下的段寄存器

DS ES SS 在長模式裏直接裝載空選擇子便可!LDS LES POP ES POP DS這些類型的指令在長模式裏測試

被廢除,裝填DS ES SS 只能用mov ds,ax 、ret、iret等指令。select

xor    eax,eax方法

mov  ds,axim

mov    es,ax數據

 SS比較特別 切換到ring3時,SS的段描述符的DPL域是有用的!SS的基地址和界限域忽略!img

在RING3中若是裝填DS ES ,DPL域必須設置正確,可是若是裝填的是0(空選擇子),DPL域

不須要設置!

Intel CPU 的 EFER

AMD CPU的EFER

AMD EFER 有一LMSLE 這個是能夠控制數據段界限。

長模式下FS和GS若是用傳統指令裝載如 mov fs,ax、pop fs 等。他們只能提供32位base address,由於

段描述符base address 域只有4個字節因此只能提供32位base adress。

要想得到64位地址,要使用FS_BASE和GS_BASE這兩個MSR,最保險的方法是先用NULL Selector裝填到FS GS 而後在初始化FS_BASE和GS_BASE這兩個MSR。

AMD的CPU在64位模式用null selector 裝載到GS FS是不會刷新這2個段寄存器基地址。intel的沒測試。

待續1111

相關文章
相關標籤/搜索