对保护模式及模式及其之间的转换的进一步理解
2007-04-08 20:04
267 查看
现在正在看于渊的《自己动手写操作系统》,里面的保护模式讲的算是比较详细的了,但是我还是有一些疑问。对实模式到保护模式之间的转换没有深入的理解。
今天看了梁大师的《编程高手箴言》,在第二章的最后,总结的几句话,让我如梦惊醒,对保护模式有了更深的理解
1.地址的形成与CPU的工作模式无关,实模式与0特权级保护模式不分页时是一样的
2.CS、DS等段寄存器的值只有在被装入时,才对CPU有用,其他时候CPU不会理会CS的值,所以,从实模式-》保护模式—》实模式,CS的值虽然不变,程序仍能正常执行。因为在实模式下当前指令的地址为:cs×16+offset,而在保护模式下,当前指令的地址为:cs所指向的描述符所指未的基址+offset
当在程序中执行:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
mov eax,cr0
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
or eax,01h
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
mov cr0,eax
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
进入保护模式,这中间并没有对CS进行改变。这里面的原因就是因为在程序执行的过程中,如果没有对CS进行重新装载,CPU并不管此时CS的值是多少,而执行下一条指令时,仅对 IP = IP + 1,指向下一条指令的地址
所以,根据以上的说明,你可能就会想到,如果在保护模式下,对FS进行了重新装载,然后回到实模式下,此时并不改变FS的值的话,此时仍可访问系统4G的地址空间(前提是A20地址线必须打开)
3. 如果把IDTR的界限设为0,则CPU自动关闭所有中断,包括NMI
今天看了梁大师的《编程高手箴言》,在第二章的最后,总结的几句话,让我如梦惊醒,对保护模式有了更深的理解
1.地址的形成与CPU的工作模式无关,实模式与0特权级保护模式不分页时是一样的
2.CS、DS等段寄存器的值只有在被装入时,才对CPU有用,其他时候CPU不会理会CS的值,所以,从实模式-》保护模式—》实模式,CS的值虽然不变,程序仍能正常执行。因为在实模式下当前指令的地址为:cs×16+offset,而在保护模式下,当前指令的地址为:cs所指向的描述符所指未的基址+offset
当在程序中执行:
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
mov eax,cr0
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
or eax,01h
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
mov cr0,eax
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif)
进入保护模式,这中间并没有对CS进行改变。这里面的原因就是因为在程序执行的过程中,如果没有对CS进行重新装载,CPU并不管此时CS的值是多少,而执行下一条指令时,仅对 IP = IP + 1,指向下一条指令的地址
所以,根据以上的说明,你可能就会想到,如果在保护模式下,对FS进行了重新装载,然后回到实模式下,此时并不改变FS的值的话,此时仍可访问系统4G的地址空间(前提是A20地址线必须打开)
3. 如果把IDTR的界限设为0,则CPU自动关闭所有中断,包括NMI
相关文章推荐
- 对Linux内存地址转换、保护模式的理解
- SELinux 宽容模式(permissive) 强制模式(enforcing) 关闭(disabled) 几种模式之间的转换
- 对STM32 ADC单次转换模式 连续转换模式 扫描模式的理解
- K:树、二叉树与森林之间的转换及其相关代码实现
- 深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换
- Java中数据类型及其之间的转换(转)
- CSS中的显示模式及模式之间的互相转换
- <<Linux内核完全剖析 --基于0.12内核>>学习笔记 第4章 80x86保护模式及其编程 4.3 分段机制
- 跟踪了解80X86实模式和保护模式转换的技术细节
- <<Linux内核完全剖析 --基于0.12内核>>学习笔记 第4章 80x86保护模式及其编程 4.7 任务管理
- 保护模式及其编程——任务管理
- 归档模式与非归档模式之间的转换
- 《Orange’s 一个操作系统的实现》3.保护模式7-特权级转移(通过调用门转移目标段-有特权级转换-进入ring3-b)
- 深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换 [转]
- Java中数据类型及其之间的转换
- 处理对象的多种状态及其相互转换——状态模式
- 《Orange’s 一个操作系统的实现》3.保护模式7-特权级转移(通过调用门转移目标段-有特权级转换-理论)
- 《Orange’s 一个操作系统的实现》3.保护模式7-特权级转移(通过调用门转移目标段-有特权级转换-实践篇)
- 对iOS后台模式最多10分钟运行时间的进一步理解
- 对于OSG中坐标及其转换的理解