4.1 系统寄存器 (System Registers)
为系统程序员设计的寄存器可以分为以下几类:
EFLAGS (标志寄存器)
Memory-Management Registers (内存管理寄存器)
Control Registers (控制寄存器)
Debug Registers (调试寄存器)
Test Registers (测试寄存器)
4.1.1 系统标志 (System Flags)
系统标志寄存器EFLAGS 控制着 I/O、可屏蔽中断(maskable interupts)、调试(debuging)、任务切换(task switching)、保护模式下虚拟8086方式的执行、多作务环境(multitasking environment)。这些标志在图 4-1 中被高亮显示。
IF ( 中断许可标志 Interrupt-Enable Flag,比特位 9)
设置 IF 使CPU可识别外部(可屏蔽)中断请求。复位 IF 则禁止中断。 IF 对不可屏蔽外部中断和异常的识别没有任何作用。关于中断的详细信息,请参看第9章的描述。
NT (嵌套任务 Nested Task, 比特位 14)
处理器用嵌套位来控制被中断或被调用的任务链。NT 对 IRET 指令的操作有影响。更多的信息请参看第7章和第9章。
RF (继续位 Resume Flag, 比特位 16)
RF 位暂时禁止调试异常,以便一条指令可以在一个调试异常结束后立即重看书而且不会引发另一个调试异常。参看第12章以获得更多的细节。
TF (陷阱位 Trap Flag,比特位 8)
设置 TF 可以让处理器工作在单步调试模式。在此模式下,CPU 每执行完一条指令后将自动引发一个异常,这样可以在程序每执行完一条指令后对程序进行查询。单步仅仅是80386 众多调试特性的一个。参看第12章以获得更多的细节。
VM (虚拟8086 模式 Virtual 8086 Mode,比特位 17)
当此位设置时,VM 标志说明一个任务正在执行一个8086 程序。参看第14章以得到更多80386 在保护模式下执行8086 任务、多任务环境的详细介绍。
4.1.2 内存管理寄存器 (Memory –Management Registers)
80386 有4个寄存器来寻址特定的数据结构,它们用来实现段式内存管理。
GDTR 全局描述符表寄存器 (Global Descriptor Table Register)
LDTR 局部描述符表寄存器 (Local Descriptor Table Register)
这些寄存器指向段描述符表 GDT 和 LDT。第5章对通过描述符表来寻址的机制做了详细的介绍。
IDTR 中断描述符表寄存器 (Interrupt Descriptor Table Register)
这个寄存器指向一张包含中断处理子程序入口点的表(IDT)。第9章对中断机制进行的详细介绍。
TR 任务寄存器 (Task Register)
这个寄存器指向当前任务信息存放处,这些信息是处理器所需要的。第7章对80386的多任务特性做了介绍。
4.1.3 控制寄存器 (Control Registers)
图4-2显示了80386的控制寄存器,CR0、CR2、和CR3。这些寄存器可以通过MOV 指令的一些变种形式被系统程序员所访问,这样便可以把它们存入通用寄存器或从通用寄存器中加载,例如:
MOV EAX , CR0
MOV CR3 , EBX
CR0 包含系统控制标志,这些标志控制着整个系统的运行,而不仅仅是针对某一个特定的任务。
EM (摸拟位 Emulation,比特位 2)
EM 指示协处理器功能是否通过摸拟来实现。更多的信息请参看第11章。
ET (扩展类型 Extension Type, 比特位 4)
ET 指明了系统内协处理器的类型(80287 或80387)。详细情况请查看第11章和第10章。
MP (数学部件存在 Math Present,比特位 1)
MP 控制 WAIT 指令的执行,WAIT 用于系统与协处理器的同步。第11章对其进行详细介绍。
PE (保护模式允许 Protection Enable,比特位 0)
设置PE 将让处理器工作在保护模式下。复位PE将返回到实模式工作。关于模式切换请参看第14章和第10章。
PG (分页允许 Paging, 比特位 31)
PG 指明处理器是否通过页表来转换线性地址到物理地址。关于分页地址转换请查看第5章。关于如何设置PG位,请查看第10章。
TS (任务已切换Task Switched,比特位 3)
处理器第次做任务切换时将设置 TS 位, 当执行协处理器指令时将会测试 TS 位。详细信息请查看第11章。
CR2 被用来当PG位置位时,处理缺页异常。当发生缺页异常时,处理器自动将引起缺页异常的线性地址存放到CR2。关于缺页中断请查看第9章。
CR3 只有当PG 位设置时才有用。通过CR3,CPU 可以定位当前任务的页目录表。关于页表和页地址转换机制请查看第5章。
4.1.4 调试寄存器 (Debug Register)
调试寄存器使80386有很好的调试功能,包括断点、不改变代码段情况下设置指令断点。关于它们的格式和用途请参看第12章。
4.1.5 测试寄存器 (Test Registers)
测试寄存器并不是80386体系结构的标准部件。它们仅仅是用来测试TLB 地址转换信息,这些存贮的是来自页表中的。查看第12章,关于怎样使用这些寄存器。