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

相关文章
相关标签/搜索