- 论坛徽章:
- 0
|
本人是个Linux内核学习的初学者,现在阅读0.11内核代码,学习保护模式的编程,有个问题想请教下高手。
在切换到保护模式前CPU工作在实模式下,此时的寻址方式是:
段寄存器:偏移量
这个很好理解。主要是在实模式切换到保护模式时有点问题。如下面的代码:
1、mov ax #0x0001
2、lmsw ax
3、jmpi 0, 8
1、2语句将CPU从实模式切换到保护模式。我的问题是:
在执行2语句时,由于80386 CPU流水线的机制,我想此时3语句以及在译码了,在2语句执行完后执行3语句时CPU处于保护模式, 此时代码段CS寄存器的值保存的是0x9020,也即linux0.11内核中的system模块,根据保护模式的寻址方式
LDT首地址 + CS(选为选择子) = 描述符项的地址, 描述符项保存了代码段的基地址。 此时 cs 选择子的格式是:第0-1位是定义使用权限,第2位是指示符,第3-15位是段描述符索引。
请问:CS寄存器在这期间是怎么变化的?? 一开始是0x9020, 执行语句3时是怎么变化的?
[ 本帖最后由 zly_0703 于 2009-8-20 10:18 编辑 ] |
|