辛勤的鸟儿总能找到虫子....
分类: LINUX
2008-10-12 16:18:31
32位处理器中的段寄存器分为两部分,一部分是可见的段选择符寄存器,即上表中的6个16为寄存器;另有6个64位的段描述符高速缓冲寄存器与之对应,用来存放段的描述符信息(如32位基址,20位界限,段说明符信息),编程不可见,在保护模式下起作用。
15-3 |
2 |
1-0 |
INDEX |
TI |
RPL |
段选择符格式如上表,高13位是索引值,低2位是特权标志,第2位指明段描述符所在的描述附表。
EIP/IP可由跳转指令修改
EFLAGS/FLAGS
(1)运算状态标志
CF
PF
AF
SF
OF
(2)控制状态标志
DF Direction (bit 10)。控制串操作指令中地址递增、递减的变化方式。0时递增。
TF Trap(bit 8)。设置的话打开单步调试模式;清除的话关闭单步调试模式。在单步调试模式中,处理器执行每一条指令后会产生一个debug异常,使得调试器可以在每条指令后检查程序状态。如果程序使用POPF、POPFD、IRET指令设置TF位的话,在POPF、POPFD、IRET指令指令后的下一条指令执行后,产生debug异常。
IF Interrupt enable(bit 9)。控制处理器是否响应可屏蔽硬件中断。设置的话,允许中断。清除的话,屏蔽可屏蔽硬件中断。IF标志对异常和不可屏蔽中断(NMI interrupts)没有影响。控制寄存器CR4中的CPL、IOPL和VME状态标志决定IF位是否能被CLI、STI、POPF、POPFD和IRET指令修改。
以下由80386及以上提供
IOPL I/O privilege level field(bits 12 and 13)。决定了当前运行着的程序的I/O特权等级。当前程序的CPL必须比IOPL小或相等(更多的特权),才能访问I/O地址空间。这两个位只有在CPL等于0时,才能被POPF和IRET指令修改。IPOL还是控制虚拟86模式下修改IF标志和处理中断的机制之一。
NT Nested task(bit 14)。控制着中断和任务调用链。处理器在用CALL指令、发生一个中断、或发生一个异常而执行一个任务时,设置该位。在用IRET指令返回时处理器检查并修改该位。该位可以用POPF/POPFD指令来显式的改变。然而在应用程序中改变该位将造成无法预测的异常。
RF Resume(bit 16)。控制处理器是否响应指令中断。如果设置该位,将暂时不产生debug exceptions,但是其他异常不受影响。清楚该位的话,就能够产生debug exceptions。该标志的主要用途是使触发断点的指令能够重新运行。这时,调试器必须在堆栈中的EFLAGS中设置该位,该EFLAGS在用IRETD返回时将被加载。这样的话,可以防止该断点再一次触发debug异常。处理器将在该指令被成功执行后自动清楚该位。使该断点再次有效。
VM Virtual-8086 mode(bit 17)。设置该位打开虚拟8086模式;清除的话返回保护模式。
以下标志由Pentium及以上提供
AC Alignment check(bit 18)。设置该位和在控制寄存器CR0中的AM标志将检查内存引用是否对齐。清除该位或是控制寄存器CR0中的AM标志将关闭对齐检查。如果打开了对齐检查,当访问一个没有对齐的操作数时,会引发alignment-check异常。比如在奇数地址的一个word或是一个doubleword的地址无法被4整除。alignment-check异常只有在用户模式(特权级3)下才会被触发。在特权级0时访问内存无论是否设置该位都不会触发alignment-check异常。该异常可以用来检查数据是否对齐。这在和其他要求所有数据都对齐的处理器交换数据是非常有用。该异常还能用在解释器标识未对齐的指针。这可以消除检查每一个指针的开销,只处理指定的指针。
VIF Virtual Interrupt(bit 19)。包含了IF标志的虚拟镜像。该标志和VIP标志配对使用。处理器仅仅在控制寄存器CR4的VME或是PVI标志被设定,并且IOPL小于3时,才识别VIF。(VME标志允许virtual-8086扩展模式;PVI标志允许保护模式虚拟中断)。
VIP Virtual interrupt pending(bit 20)。由软件来设定,指示一个中断是未决的。清除该位来指示没有未决的中断。处理器会读取该位。但是不会修改它。处理器仅仅在控制寄存器CR4的VME或是PVI标志被设定,并且IOPL小于3时,才识别VIF。
ID Identification(bit21)。程序或函数可以设置或清除该位来说明是否支持CPUID指令。
|
BIT47—BIT16 |
BIT15—BIT0 |
全局描述符表寄存器GDTR |
基地址 |
界限 |
中断描述符表寄存器IDTR |
基地址 |
界限 |
|
BIT15—BIT0 |
相应的高速缓冲寄存器 |
BIT31—BIT0 |
BIT31—BIT0 |
BIT11—BIT0 |
局部描述符表寄存器LDTR |
选择子 |
基地址 |
界限 |
属性 | |
任务状态段寄存器TR |
选择子 |
基地址 |
界限 |
属性 |
80486中设置了4个系统地址寄存器,用来在保护模式下管理4个系统表。
因为只能用在保护模式下,顾又称为保护方式寄存器。
GDTR
全局描述服表寄存器,48位。用来存放GDT(全局描述符表)的32位线性基地址和16位界限值。全局描述符表的最大长度64K,每个8B,共8000个描述符。包括系统使用的和公用的。
IDTL
中断描述符表寄存器,48位。用来存放IDT(中断描述附表)的32位线性地址和16位界限值。由于80486仅有256个中断,顾IDT最多有256个中断描述符。
LDTR
局部描述附表寄存器,16位。用来存放在GDT中查找LDT的16位选择器。另有一个64位的隐含段描述符高速缓冲寄存器,用来存放找到的LDT表段描述符,包括基地址,段界限,属性。
TR
任务状态寄存器,16位。用来存放全局描述符表中查找任务状态段TSS描述服的16位选择符。与之相应的也有一个64位高速缓冲寄存器。
控 制 |
CRx |
BIT31 |
BIT30 |
BIT29 |
BIT18 |
BIT16 |
BIT5 |
BIT4 |
BIT3 |
BIT2 |
BIT1 |
BIT0 | ||||
CR0 |
PG |
CD |
NW |
AM |
WP |
NE |
ET |
TS |
EM |
MP |
PE | |||||
CR1 |
保留 | |||||||||||||||
CR2 |
页故障线性地址寄存器 | |||||||||||||||
CR3 |
页目录基址寄存器 |
保留 |
PCD |
PWT |
| |||||||||||
从上表可见,80386有四个32位的控制寄存器,分别命名位CR0、CR1、CR2和CR3,由来存放全局性与任务无关的机器状态。但CR1被保留,供今后开发的处理器使用,在80386中不能使用CR1,否则会引起无效指令操作异常。CR0包括指示处理器工作方式的控制位,包含启用和禁止分页管理机制的控制位,包含控制浮点协处理器操作的控制位。CR2及CR3由分页管理机制使用。CR0中的位5—位30及CR3中的位0至位11是保留位,这些位不能是随意值,必须为0。
控制寄存器CR0的低16位等同于80286的机器状态字MSW。
1.保护控制位
控制寄存器CR0中的位0用PE标记,位31用PG标记,这两个位控制分段和分页管理机制的操作,所以把它们称为保护控制位。PE控制分段管理机制。PE=0,处理器运行于实模式;PE=1,处理器运行于保护方式。PG控制分页管理机制。PG=0,禁用分页管理机制,此时分段管理机制产生的线性地址直接作为物理地址使用;PG=1,启用分页管理机制,此时线性地址经分页管理机制转换位物理地址。关于分页管理机制的具体介绍在后面的文章中进行。
下表列出了通过使用PE和PG位选择的处理器工作方式。由于只有在保护方式下才可启用分页机制,所以尽管两个位分别为0和1共可以有四种组合,但只有三种组合方式有效。PE=0且PG=1是无效组合,因此,用PG为1且PE为0的值装入CR0寄存器将引起通用保护异常。
需要注意的是,PG位的改变将使系统启用或禁用分页机制,因而只有当所执行的程序的代码和至少有一部分数据在线性地址空间和物理地址空间具有相同的地址的情况下,才能改变PG位。
PG和PE |
PG |
PE |
处理器工作方式 |
0 |
0 |
实模式 | |
0 |
1 |
保护模式,禁用分页机制 | |
1 |
0 |
非法组合 | |
1 |
1 |
保护方式,启用分页机制 |
2.协处理器控制位
控制寄存器CR0中的位1—位4分别标记为MP(算术存在位)、EM(模拟位)、TS(任务切换位) 和ET(扩展类型位),它们控制浮点协处理器的操作。
当处理器复位时,ET位被初始化,以指示系统中数字协处理器的类型。如果系统中存在 80387协处理器,那么ET位置1;如果系统中存在80287协处理器或者不存在协处理器,那么ET位清0。
EM位控制浮点指令的执行是用软件模拟,还是由硬件执行。EM=0时,硬件控制浮点指令传送到协处理器;EM=1时,浮点指令由软件模拟。
TS位用于加快任务的切换,通过在必要时才进行协处理器切换的方法实现这一目的。每当进行任务切换时,处理器把TS置1。TS=1时,浮点指令将产生设备不可用(DNA)异常。 MP位控制WAIT指令在TS=1时,是否产生DNA异常。MP=1和TS=1时,WAIT产生异常;MP=0时,WAIT指令忽略TS条件,不产生异常。
AM对准屏蔽位,与状态标志AC配和使用。控制对数据的对准校验。当AM,AC被置1时,对用户级(CPL=3)访问的存储器单元进行对准校验,即边界检查。
WP写保护位,保护用户级的那些页,置1时,禁止管理级的写操作写入用户级的页面.
3.CR2和CR3 控制寄存器CR2和CR3由分页管理机制使用。 CR2用于发生页异常时报告出错信息。当发生页异常时,处理器把引起页异常的线性地址保存在CR2中。操作系统中的页异常处理程序可以检查CR2的内容,从而查出线性地址空间中的哪一页引起本次异常。 CR3用于保存页目录表的其始物理地址。由于目录是页对齐的,所以仅高20位有效,低12 位保留未用。向CR3中装入一个新值时,低12位必须为0;但从CR3中取值时,低12位被忽略。每当用MOV指令重置CR3的值时,会导致分页机制高速缓冲区的内容无效,用此方法,可以在启用分页机制之前,即把PG位置1之前,预先刷新分页机制的高速缓存。CR3寄存器即使在CR0寄存器的PG位或PE位为0时也可装入,如在实模式下也可设置CR3,以便进行分页机制的初始化。在任务切换时,CR3要被改变,但是如果新任务中CR3的值与原任务中CR3的值相同,那么处理器不刷新分页高速缓存,以便当任务共享也表时有较快的执行速度。 PCD禁止页高速缓冲位,置1时,不对页进行高速缓冲操作。 PWT写贯穿位。