现在的位置: 首页 > 综合 > 正文

对保护模式及模式及其之间的转换的进一步理解

2013年03月21日 ⁄ 综合 ⁄ 共 581字 ⁄ 字号 评论关闭

现在正在看于渊的《自己动手写操作系统》,里面的保护模式讲的算是比较详细的了,但是我还是有一些疑问。对实模式到保护模式之间的转换没有深入的理解。

今天看了梁大师的《编程高手箴言》,在第二章的最后,总结的几句话,让我如梦惊醒,对保护模式有了更深的理解

1.地址的形成与CPU的工作模式无关,实模式与0特权级保护模式不分页时是一样的

2.CS、DS等段寄存器的值只有在被装入时,才对CPU有用,其他时候CPU不会理会CS的值,所以,从实模式-》保护模式—》实模式,CS的值虽然不变,程序仍能正常执行。因为在实模式下当前指令的地址为:cs×16+offset,而在保护模式下,当前指令的地址为:cs所指向的描述符所指未的基址+offset 

当在程序中执行:

mov eax,cr0
or eax,01h
mov cr0,eax

进入保护模式,这中间并没有对CS进行改变。这里面的原因就是因为在程序执行的过程中,如果没有对CS进行重新装载,CPU并不管此时CS的值是多少,而执行下一条指令时,仅对 IP = IP + 1,指向下一条指令的地址

所以,根据以上的说明,你可能就会想到,如果在保护模式下,对FS进行了重新装载,然后回到实模式下,此时并不改变FS的值的话,此时仍可访问系统4G的地址空间(前提是A20地址线必须打开)

3. 如果把IDTR的界限设为0,则CPU自动关闭所有中断,包括NMI

抱歉!评论已关闭.