保护模式及其编程——8086系统寄存器和系统指令

摘要:为了协助处理器完成初始化和控制系统操作,80x86提供了一个标志寄存器和几个系统寄存器。Eflags用于控制任务切换、中断处理、指令跟踪和权限访问。系统寄存器用于内存管理和控制处理器操作。

1.标志寄存器

32b,含有系统标志和通用标志,以及保留位等等,具体可以参考相关资料,下面简介系统标志位 保护模式及其编程——8086系统寄存器和系统指令_第1张图片 1) TF:b8,跟踪标志 2IOPLb13-b12IO特权级 3NTb14,嵌套任务标志( nested task4RFb16,恢复标志( resume flag5VMb17,虚拟 8086模式

2.内存管理寄存器

GDTRLDTRIDTRTR,用于制定内存分段管理所用的系统表的基地址,其中 TR用于寻址一个特殊的任务状态段, TSS中包含中当前执行任务的重要信息。 图 1 内存管理寄存器 保护模式及其编程——8086系统寄存器和系统指令_第2张图片 GDTR:全局描述符表寄存器 IDTR:中断描述符表寄存器,使用 LIDT&&SIDT存取 LDTR:存放 32位线性地址、 16位限长和描述符属性。指令 LLDTSLDT用于保存 LDTR寄存器的段描述符部分。当使用 LDTR指令把含有 LDT标段的选择符加载进 LDTR时,对应段基地址、限长、属性自动加载到 LDTR中。 TR:任务寄存器,通用 LDRSTR存取,存取操作类似 LDTR

3.控制寄存器

用于控制和确定处理器的操作模式和当前执行任务的特性。 cr0:控制处理器操作模式和状态 cr1:保留 cr2:含有导致页错误的线性地址 cr3:页目录表物理内存基地址

3.1 cr0中的保护控制位

从某种程度长说,cr0是分段机制和分页机制中最重要的寄存器:
对于分段机制:cr0中最重要的是PEb0)改变的时候需要特别小心。修改了PE之后,必须立即使用一条跳转指令,以刷新处理器执行管道中已经获得的不同模式下的任何指令。在设置PE位之前,程序必须初始化基本系统段和控制寄存器。

 
  
对于分段机制PGb31)位,只有当执行程序至少有部分代码和数据在线性地址空间和物理地址空间中有相同地址的时候,才能改变PG。所以,这一部分代码在分页和没有分页的世界之间起到了桥梁作用。开启分页之前,必须先栓新TLB

开启的时候,必须先开启分段,然后开启分页。

关闭的时候,要使用相反的顺序,不然,就会出现如下的提示信息:check_CR0(0xe0000010): attempt to set CR0.PG with CR0.PE cleared 

3.2 cr2cr3

cr2cr3用于分页机制, cr3也被称为 PDBR。因为页目录表页面是页对齐的,所以该寄存器只有高 20b有效 (4k占用 12b),低 12b保留给更高级处理器使用。往 cr3加载一个值的时候,低 12b必须是 0.使用 mov指令加载 cr3,会让 TLB失效。

你可能感兴趣的:(自己动手写操作系统)