注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

编程学习

我的网上家园

 
 
 

日志

 
 

32位实模式探索  

2013-02-19 17:11:56|  分类: 《x86汇编语言: |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在跟QQ网友 sasuke 的交流过程中,通过几次BOCHS的调试,在 sasuke 的帮助下,得出以下结论:

32位实模式是存在的. 从16位实模式切换到32位保护模式以后,再通过设置CR0寄存器的PE位为0,可以进入32位实模式.

在32位实模式下,处理器译码指令时按32位指令进行译码. 但在访问内存时,按照实模式的机制去访问内存,也就是说,遇到 mov ds,ax 这样的指令时,AX的值解释为段地址,而不是保护模式下 全局描述符表的段选择子.

CS段选择器的段描述符高速缓存器中 的D位(段描述符的D位=1)决定了当前是32位模式. 而CR0寄存器的PE位为0决定了当前是实模式.
另外,CS段描述符高速缓存器中的段界限仍然起作用. 超过段界限会引发处理器异常.

32位实模式的测试:
mov eax,cr0
and eax,0xfffffffe
mov cr0,eax
执行上面的指令以后,CR0的PE位为0.
[bits 16]编译的指令在执行时,被当作32位指令执行.见下图:

32位实模式探索 - sangguowei2002 - 编程学习
 
32位实模式探索 - sangguowei2002 - 编程学习
 
段界限测试:
;=================================================================================
设定段界限为0X7D38,在超过段界限时,引发处理器异常.
见下图.
32位实模式探索 - sangguowei2002 - 编程学习
 
32位实模式探索 - sangguowei2002 - 编程学习
 
  评论这张
 
阅读(125)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017