80386:
;=================================================
80386共有34个寄存器,可分为七类,它们分别是:
通用寄存器
段寄存器
指令指针和标志寄存器
系统地址寄存器
控制寄存器
调试寄存器
测试寄存器
;=================================================
A1:General Register(通用寄存器)
EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP,
它们的低16位就是8086的
AX,BX,CX,DX,SI,DI,SP,BP
;-------------------------
EAX:累加器
EBX:基址寄存器
ECX:计数器
EDX:数据寄存器
ESI:源地址指针寄存器
EDI:目的地址指针寄存器
EBP:基址指针寄存器
ESP:堆栈指针寄存器
;------------------------
这些寄存器可将低16位单独存取
也就是8086的AX,BX,CX,DX,SI,DI,SP,BP
它们的高16位不受影响
可单独存取AH,AL,BH,BL,CH,CL,DH,DL
;=================================================
A2:Segment Register(段寄存器)
80386增加了两个段FS,GS
这些段寄存器都是16位的
;------------------------
CS:代码段(Code Segment)
DS:数据段(Data Segment)
ES:附加数据段(Extra Segment)
SS:堆栈段(Stack Segment)
FS:附加段
GS:附加段
;------------------------
;=================================================
A3:Instruction Pointer(指令指针寄存器)
80386的指令指针EIP是一个32位寄存器,是从8086的IP扩充而来。
;-------------------------------------------------
Flag Register(标志寄存器)
80386的标志寄存器EFLAGS也是一个32位寄存器,其中只使用了15位。
32位标志寄存器中,除保留8088/8086CPU的9个标志外,另新增加了4个标志
a.IOPL(I/O Privilege Level),I/O特权级字段,
它的宽度为2bit,它指定了I/O指令的特权级。
如果当前的特权级别在数值上小于或等于IOPL,
那么I/O指令可执行。否则,将发生一个保护性异常。
b.NT(Nested Task):嵌套任务(Nested Task,位14)。
若NT=1,当前执行的任务嵌套于另一任务中
执行完该任务后,要返回到原来的任务中去;
否则NT=0。这个标志最早出现在80286中。
c.RF(Restart Flag):重启标志,它的宽度是1位。
它主要控制是否接受调试故障。RF=0接受,RF=1忽略。
如果你的程序每一条指令都被成功执行,那么RF会被清0。
而当接受到一个非调试故障时,处理器置RF=1。
d.VM(Virtual Machine):虚拟8086模式
(用软件来模拟8086的模式,所以也称虚拟机)。
VM=0,处理器工作在一般的保护模式下;
VM=1,工作在V8086模式下。
其它16个标志位的含义和8086一样
e.CF(Carry Flag):进位标志位,由CLC,STC两标志位来控制
f.PF(Parity Flag):奇偶标志位
g.AF(Assistant Flag):辅助进位标志位
h.ZF(Zero Flag):零标志位
i.SF(Singal Flag):符号标志位
j.IF(Interrupt Flag):中断允许标志位,由CLI,STI两条指令来控制
k.DF(Direction Flag):向量标志位,由CLD,STD两条指令来控制
l.OF(Overflow Flag):溢出标志位。
;=================================================
A4:System Address Register(系统地址寄存器)
80386有4个系统地址寄存器,用来:
1.存储操作系统需要的保护信息和地址转换表信息;
2.定义目前正在执行任务的环境;
3.地址空间和中断向量空间。
;------------------------
GDTR:48位全局描述符表寄存器
用于保存全局描述符表的32位基地址和全局描述符表的16位界限
(全局描述符表最大为216字节,共216/8=8K个全局描述符)。
IDTR:48位中断描述符表寄存器
用于保存中断描述符表的32位基地址和中断描述符表的16位界限
(中断描述符表最大为216字节,共216/8=8K个中断描述符)。
LDTR:16位局部描述符表寄存器
用于保存局部描述符表的选择符。
一旦16位的选择符放入LDTR,
CPU会自动将选择符所指定的局部描述符
装入64位的局部描述符寄存器中。
TR:16位任务状态寄存器
用于保存任务状态段(TSS)的16位选择符。
与LDTR类似,一旦16位的选择符放入TR,
CPU会自动将该选择符所指定的任务描述符
装入64位的任务描述符寄存器中。
;------------------------
LDTR和TR寄存器是由16位选择字段和64位描述符寄存器组成。
用来指定局部描述符表和任务状态段TSS在物理存储器中的位置和大小。
64位描述符寄存器是自动装入的,程序员不可见。
LDTR与TR只能在保护方式下使用,程序只能访问16位选择符寄存器。
;=================================================
A5:Control Register(控制寄存器)
80386有4个32位控制寄存器(CR0、CR1、CR2和CR3)。
它们的作用是保存全局性的机器状态。
CR0的低16位称为机器状态字MSW。
;------------------------
PE:保护允许位。
进入保护方式时PE=1。除复位外,不能被清除。实方式时PE=0。
MP:监视协处理器位。
当协处理器工作时MP=1,否则MP=0。
EM:仿真协处理器位。
当MP=0,且EM=1时,表示要用软件来仿真协处理器功能。
TS:任务转换位。
当两任务切换时,使TS=1,此时不允许协处理器工作;
当两任务之间切换完成后,TS=0。
ET:协处理器类型位。
系统配接80387时ET=1,配接80287时ET=0。
PG:页式管理允许位。
PG=1表示启用芯片内部的页式管理系统,否则PG=0。
CR1:由Intel公司保留
CR2:存放引起页故障的线性地址
CR3存放当前任务的页目录基地址
;=================================================
A6:Debug Register(调试寄存器)
80386设有8个32位调试寄存器DR0~DR7,它们为调试提供了硬件支持。
;------------------------
DR0~DR3:4个保存线性断点地址的寄存器
DR4、DR5:备用寄存器
DR6:调试状态寄存器
通过该寄存器的内容可以检测异常,并允许或禁止进入异常处理程序
DR7:调试控制寄存器
用来规定断点字段的长度
断点访问类型
“允许”断点
“允许”所选择的调试条件
;------------------------
;=================================================
A7:Test Register(测试寄存器)
80386设置了8个32位的测试寄存器TR0~TR7,
其中TR0~TR5由Intel公司保留,用户只能访问TR6、TR7。
它们用于控制对TLB中的RAM和CAM相联存储器的测试。
TR6是测试控制寄存器,TR7是测试状态寄存器,保存测试结果的状态。
;=================================================
相关资料:
http://mcit.xjtu.edu.cn/wlkj/wykj/ch2/ch2_4_1.htm
推荐-x86 instruction listings: