如果你上过微机原理课,也可能把所有的寄存器都忘了,那我说一组寄存器CS:IP,你好像有那么一点
印象。在我们的印象中,CS(Code Segment)是代码段,IP(Instruction Pointer)指令指针,指向代码段
的偏移,两者组合指向了运行的地址。以前的裸机程序,这样是正确的。但是如果你正在接触Linux等操作
系统的话,CS就不是这个意义了,它可能变成可段选择符。
先说一下为什么运行裸机和运行操作系统时候CS意义为什么会不一样。CPU开机启动是运行在实模式,
此时CS就是代码段,IP就是偏移地址,这是我们熟悉的。但是当运行操作系统的时候,必须实现页保护机制,
此时就必须运行在保护模式下。CR0寄存器的第0位PE(Protect Mode Enable),置1是保护模式,清0是实
模式。
在保护模式下,CS就不再是代码段的地址了,而是代码段的选择符,,即Selector。它指向全局或者局部
描述符表中的代码段描述符。
15 3 2 1 0
索引 TI RPL
[1:0]位 RPL (Requestor Privilege Level) 请求者特权级,00内核级,11用户级
[2]位 TI (Table Index)TI=0,选择全局描述符表,TI=1,选择局部描述符表
[15:3] Index 索引值。如果TI=0,则到全局描述符表中索引某一项