CR0控制寄存器

深入解析CR0-CR4控制寄存器:分页与虚拟内存管理关键

在这里插入图片描述

CR0

是系统内的控制寄存器之一。控制寄存器是一些特殊的寄存器,它们可以控制CPU的一些重要特性。
0位是保护允许位PE(Protedted Enable),用于启动保护模式,如果PE位置1,则保护模式启动,如果PE=0,则在实模式下运行。
1 位是监控协处理位MP(Moniter coprocessor),它与第3位一起决定:当TS=1时操作码WAIT是否产生一个“协处理器不能使用”的出错信号。第3位是任务转换位(Task Switch),当一个任务转换完成之后,自动将它置1。随着TS=1,就不能使用协处理器。
CR0的第2位是模拟协处理器位 EM (Emulate coprocessor),如果EM=1,则不能使用协处理器,如果EM=0,则允许使用协处理器。
第4位是微处理器的扩展类型位 ET(Processor Extension Type),其内保存着处理器扩展类型的信息,如果ET=0,则标识系统使用的是287协处理器,如果 ET=1,则表示系统使用的是387浮点协处理器。
CR0的第31位是分页允许位(Paging Enable),它表示芯片上的分页部件是否允许工作。
CR0的第16位是写保护未即WP位(486系列之后),只要将这一位置0就可以禁用写保护,置1则可将其恢复。

CR1

是未定义的控制寄存器,供将来的处理器使用。

CR2

是页故障线性地址寄存器,保存最后一次出现页故障的全32位线性地址。

CR3

是页目录基址寄存器,保存页目录表的物理地址,页目录表总是放在以4K字节为单位的存储器边界上,因此,它的地址的低12位总为0,不起作用,即使写上内容,也不会被理会。

CR4

在Pentium系列(包括486的后期版本)处理器中才实现,它处理的事务包括诸如何时启用虚拟8086模式等

这几个寄存器是与分页机制密切相关的,因此,在进程管理及虚拟内存管理中会涉及到这几个寄存器,读者要记住CR0、CR2、CR3及CR4这三个寄存器的内容

CR0控制寄存器中的算术存在位、模拟位、任务切换位和扩展类型位的含义如下: - **算术存在位(MP - Math Present)**:位1为算术存在位,它主要用于控制浮点协处理器的操作,与模拟位(EM)、任务切换位(TS)等协同工作,共同管理浮点协处理器在系统中的运行情况,决定是否允许使用浮点协处理器进行算术运算[^1]。 - **模拟位(EM - Emulation)**:位2是模拟位,若该位置1,则表示系统使用软件模拟浮点运算,而不使用硬件浮点协处理器;若置0,则允许使用硬件浮点协处理器进行浮点运算。模拟位与算术存在位等配合,对浮点运算的执行方式进行控制[^1]。 - **任务切换位(TS - Task Switch)**:位3即任务切换位,当发生任务切换时,该位置1。它与算术存在位、模拟位等一起,在任务切换时对浮点协处理器的状态进行管理,确保不同任务间浮点运算状态的正确切换和保存[^1]。 - **扩展类型位(ET - Extertion Type)**:位4为扩展类型位,它用于指示系统中使用的浮点协处理器的类型。在早期的处理器中,该位用于区分不同版本的浮点协处理器,比如区分是旧的80287还是新的80387协处理器[^1]。 以下是一段简单的伪代码示例,用于示意如何设置和检查这些位(实际操作需要特定的硬件权限和指令): ```python # 假设这是一个模拟的CR0寄存器CR0 = 0x00000000 # 设置算术存在位(MP) MP_MASK = 0x00000002 CR0 |= MP_MASK # 设置模拟位(EM) EM_MASK = 0x00000004 CR0 |= EM_MASK # 设置任务切换位(TS) TS_MASK = 0x00000008 CR0 |= TS_MASK # 设置扩展类型位(ET) ET_MASK = 0x00000010 CR0 |= ET_MASK # 检查算术存在位(MP)是否设置 if CR0 & MP_MASK: print("算术存在位已设置") # 检查模拟位(EM)是否设置 if CR0 & EM_MASK: print("模拟位已设置") # 检查任务切换位(TS)是否设置 if CR0 & TS_MASK: print("任务切换位已设置") # 检查扩展类型位(ET)是否设置 if CR0 & ET_MASK: print("扩展类型位已设置") ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值