[不处理] cr0

sunmoonxzit 2010-06-11 04:47:37
cr0是系统内的控制寄存器之一。控制寄存器是一些特殊的寄存器,它们可以控制CPU的一些重要特性。

控制寄存器最初出现于低级的286处理器中,以前称之为机器状态字(machine status word),在386以后它们被重命名为控制寄存器(control register)。cr0寄存器直到486的处理器版本才被加入了“写保护”(Write Protect,WP)位,WP位控制是否允许处理器向标记为只读属性的内存页写入数据,如果我们将WP位设置为0,就可以禁用写保护的功能。

禁用和启用写保护的内联汇编代码如下所示:
// 关闭写保护
__asm
{
cli ;
mov eax, cr0
and eax, ~0x10000
mov cr0, eax
}

// 恢复写保护
__asm
{
mov eax, cr0
or eax, 0x10000
mov cr0, eax
sti ;
}

需要注意的是,这里的cli和sti都是特权指令,必须在ring0才能使用的。

除了cr0之外,还有4个控制寄存器。cr1未被使用(或者被偷偷使用了,但没有在文档中说明),cr2在处理器处于保护模式时存储上一个导致页故障的地址,cr3存储页目录的地址,cr4在Pentium系列(包括486的后期版本)处理器中才实现,它处理的事务包括诸如何时启用虚拟8086模式等。

...全文
142 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧