Chinaunix首页 | 论坛 | 博客
  • 博客访问: 298577
  • 博文数量: 76
  • 博客积分: 1662
  • 博客等级: 上尉
  • 技术积分: 764
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-25 17:04
个人简介

辛勤的鸟儿总能找到虫子....

文章分类

全部博文(76)

文章存档

2017年(1)

2013年(4)

2012年(5)

2011年(4)

2010年(32)

2009年(23)

2008年(7)

分类: LINUX

2008-10-12 16:18:31

段寄存器

CS,DS,SS,ES,FS,GS

32位处理器中的段寄存器分为两部分,一部分是可见的段选择符寄存器,即上表中的616为寄存器;另有664位的段描述符高速缓冲寄存器与之对应,用来存放段的描述符信息(如32位基址,20位界限,段说明符信息),编程不可见,在保护模式下起作用。

153

2

10

INDEX

TI

RPL

段选择符格式如上表,高13位是索引值,低2位是特权标志,第2位指明段描述符所在的描述附表。

专用寄存器

EIP/IP可由跳转指令修改

EFLAGS/FLAGS

1)运算状态标志

CF

PF

AF

SF

OF

2)控制状态标志

DF        Direction bit 10)。控制串操作指令中地址递增、递减的变化方式。0时递增。

TF        Trapbit 8)。设置的话打开单步调试模式;清除的话关闭单步调试模式。在单步调试模式中,处理器执行每一条指令后会产生一个debug异常,使得调试器可以在每条指令后检查程序状态。如果程序使用POPFPOPFDIRET指令设置TF位的话,在POPFPOPFDIRET指令指令后的下一条指令执行后,产生debug异常。

IF        Interrupt enable(bit 9)。控制处理器是否响应可屏蔽硬件中断。设置的话,允许中断。清除的话,屏蔽可屏蔽硬件中断。IF标志对异常和不可屏蔽中断(NMI interrupts)没有影响。控制寄存器CR4中的CPLIOPLVME状态标志决定IF位是否能被CLISTIPOPFPOPFDIRET指令修改。

以下由80386及以上提供

IOPL    I/O privilege level fieldbits 12 and 13)。决定了当前运行着的程序的I/O特权等级。当前程序的CPL必须比IOPL小或相等(更多的特权),才能访问I/O地址空间。这两个位只有在CPL等于0时,才能被POPFIRET指令修改。IPOL还是控制虚拟86模式下修改IF标志和处理中断的机制之一。

NT        Nested taskbit 14)。控制着中断和任务调用链。处理器在用CALL指令、发生一个中断、或发生一个异常而执行一个任务时,设置该位。在用IRET指令返回时处理器检查并修改该位。该位可以用POPF/POPFD指令来显式的改变。然而在应用程序中改变该位将造成无法预测的异常。

RF        Resumebit 16)。控制处理器是否响应指令中断。如果设置该位,将暂时不产生debug exceptions,但是其他异常不受影响。清楚该位的话,就能够产生debug exceptions。该标志的主要用途是使触发断点的指令能够重新运行。这时,调试器必须在堆栈中的EFLAGS中设置该位,该EFLAGS在用IRETD返回时将被加载。这样的话,可以防止该断点再一次触发debug异常。处理器将在该指令被成功执行后自动清楚该位。使该断点再次有效。

VM        Virtual-8086 modebit 17)。设置该位打开虚拟8086模式;清除的话返回保护模式。

以下标志由Pentium及以上提供

AC        Alignment checkbit 18)。设置该位和在控制寄存器CR0中的AM标志将检查内存引用是否对齐。清除该位或是控制寄存器CR0中的AM标志将关闭对齐检查。如果打开了对齐检查,当访问一个没有对齐的操作数时,会引发alignment-check异常。比如在奇数地址的一个word或是一个doubleword的地址无法被4整除。alignment-check异常只有在用户模式(特权级3)下才会被触发。在特权级0时访问内存无论是否设置该位都不会触发alignment-check异常。该异常可以用来检查数据是否对齐。这在和其他要求所有数据都对齐的处理器交换数据是非常有用。该异常还能用在解释器标识未对齐的指针。这可以消除检查每一个指针的开销,只处理指定的指针。

VIF    Virtual Interruptbit 19)。包含了IF标志的虚拟镜像。该标志和VIP标志配对使用。处理器仅仅在控制寄存器CR4VME或是PVI标志被设定,并且IOPL小于3时,才识别VIF。(VME标志允许virtual-8086扩展模式;PVI标志允许保护模式虚拟中断)。

VIP    Virtual interrupt pendingbit 20)。由软件来设定,指示一个中断是未决的。清除该位来指示没有未决的中断。处理器会读取该位。但是不会修改它。处理器仅仅在控制寄存器CR4VME或是PVI标志被设定,并且IOPL小于3时,才识别VIF

ID        Identificationbit21)。程序或函数可以设置或清除该位来说明是否支持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中查找LDT16位选择器。另有一个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位的控制寄存器,分别命名位CR0CR1CR2CR3,由来存放全局性与任务无关的机器状态。但CR1被保留,供今后开发的处理器使用,在80386中不能使用CR1,否则会引起无效指令操作异常。CR0包括指示处理器工作方式的控制位,包含启用和禁止分页管理机制的控制位,包含控制浮点协处理器操作的控制位。CR2CR3由分页管理机制使用。CR0中的位5—30CR3中的位0至位11是保留位,这些位不能是随意值,必须为0

    控制寄存器CR0的低16位等同于80286的机器状态字MSW

1.保护控制位

    控制寄存器CR0中的位0PE标记,位31PG标记,这两个位控制分段和分页管理机制的操作,所以把它们称为保护控制位。PE控制分段管理机制。PE=0,处理器运行于实模式;PE=1,处理器运行于保护方式。PG控制分页管理机制。PG=0,禁用分页管理机制,此时分段管理机制产生的线性地址直接作为物理地址使用;PG=1,启用分页管理机制,此时线性地址经分页管理机制转换位物理地址。关于分页管理机制的具体介绍在后面的文章中进行。

    下表列出了通过使用PEPG位选择的处理器工作方式。由于只有在保护方式下才可启用分页机制,所以尽管两个位分别为01共可以有四种组合,但只有三种组合方式有效。PE=0PG=1是无效组合,因此,用PG1PE0的值装入CR0寄存器将引起通用保护异常。

需要注意的是,PG位的改变将使系统启用或禁用分页机制,因而只有当所执行的程序的代码和至少有一部分数据在线性地址空间和物理地址空间具有相同的地址的情况下,才能改变PG位。

PGPE
位与处
理器工
作模式

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位用于加快任务的切换,通过在必要时才进行协处理器切换的方法实现这一目的。每当进行任务切换时,处理器把TS1TS=1时,浮点指令将产生设备不可用(DNA)异常。 MP位控制WAIT指令在TS=1时,是否产生DNA异常。MP=1TS=1时,WAIT产生异常;MP=0时,WAIT指令忽略TS条件,不产生异常。

AM对准屏蔽位,与状态标志AC配和使用。控制对数据的对准校验。当AMAC被置1时,对用户级(CPL=3)访问的存储器单元进行对准校验,即边界检查。

WP写保护位,保护用户级的那些页,置1时,禁止管理级的写操作写入用户级的页面.

3.CR2CR3

    控制寄存器CR2CR3由分页管理机制使用。

     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写贯穿位。

阅读(1945) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~