因此,在程序实行过程中,寄存器相称于存储单元,可用来存放运算过程中所须要的操作数、操作数地址和中间结果等。
8086 CPU内包含4组16位寄存器:通用寄存器组、段寄存器、指令指针寄存器及标志位寄存器。
CPU内部寄存器
(1)通用寄存器组
包括8个16位的通用寄存器,个中4个寄存器AX、BX、CX和DX又称为数据寄存器,它们可以存放16位的数据或地址。
每个16位的寄存器都可以分为两个8位的寄存器利用。
当做8位寄存器利用时,高8位的寄存器名称为AH、BH、CH和DH,低8位的寄存器名称为AL、BL、CL和DL。
每个寄存器都有各自的专用场合,个中AX被称作累加器,利用最为频繁,它在算术运算、逻辑运算及在输入/输出指令中作为数据寄存器利用等;
BX被称为基址寄存器,在间接寻址中作基址寄存器,常做偏移地址访问数据段;
CX被称作计数寄存器,作为循环和串行操作等指令中的隐含计数器;
DX被称作数据寄存器,常用来存放双字长数据的高8位或存放外设端口的地址。
SP、BP、SI和DI这4个通用寄存器只能用作16位寄存器,常日用于存储器寻址时供应偏移地址,也可用作数据寄存器。
SP称为堆栈指针(Stack Pointer),也称为堆栈指示器,必须与SS堆栈段寄存器联用。用于指示栈底或栈顶的偏移地址。
BP称为基址指针(Base Pointer),常被用做偏移地址访问堆栈段。
源变址寄存器SI(Source Index)和目的变址寄存器DI(Destination Index),常日与DS数据段寄存器一起利用,
用来确定数据段中某一存储单元的地址,DI用于存放目的操作数的偏移地址,SI与DI联用寻址数据段,DI与ES联用附加数据段。
(2)段寄存器8086 CPU可以直接寻址容量为1MB的存储器,因此须要20位地址码。
8086 CPU内部所有寄存器都是16位的,采取寄存器间接寻址都只能寻址64KB的存储空间,因此CPU对存储器采取分段技能,将1MB的存储空间分为多少逻辑段,
每段存储容量最大为64KB。8086CPU内部设有4个16位段寄存器,这些段寄存器的内容与段内偏移地址组成20位物理地址,
段内偏移地址可能存放在寄存器中,也可能存放在存储器中。
1)代码段寄存器CS
代码段是一个随机存取存储区,用来保存微处理器利用的程序代码。在8086系统中,代码段寄存器CS定义了代码段的起始地址。代码段的最大存储空间是64KB。
2)数据段寄存器DS
数据段也是一个随机存取存储区,用来保存程序实行过程中所利用的数据及存放程序运行后的结果。数据段寄存器DS定义了数据段的起始地址,其最大的存储空间也是64KB。
3)附加段寄存器ES
附加段是为某些串操作指令存放操作数而附加的一个数据段。与数据段类似,附加段寄存器ES定义了附加段的起始地址,其最大存储空间也为64KB。
4)堆栈段寄存器SS
堆栈段是一个分外的随机存取存储区,用来零食保存程序实行过程中有关寄存器的内容、程序的地址信息及通报参数等。
堆栈寄存器SS与堆栈指针SP共同确定堆栈段内的存取地址。其最大存储空间为64KB。
(3)指令指针寄存器8086 CPU中设置了一个16位指令指针IP。IP用来存放将要实行的下一条指令在当前代码段中的偏移地址,它与代码段寄存器CS联用,
以确定下一条指令的物理地址。8086 CPU利用CS:IP取得下一条要实行的指令的物理地址。顺序实行程序时,CPU每取一个指令字节,IP自动加1,
指向代码段中下一个要读取的字节;当IP单独改变时,会发生段内的程序转移;当CS和IP同时改变时,会产生段间的程序转移。
(4)标志位寄存器标志寄存器(FLAGS)用于保存部分指令(例如,算术运算指令或逻辑运算指令)实行结果的状态,常用作后续条件转移指令的转移掌握条件。
标志寄存器为16位,实际利用了个中的9位。
标志寄存器(FLAGS)
标志寄存器(FLAGS)详细图
根据标志位的功能,可将9个标志位分成两类:
【1】状态标志,表示运算后的状态特色,它影响后面的操作。状态标志位有6位:CF、PF、AF、ZF、SF和OF;
【2】掌握标志,用来掌握CPU的操作,掌握标志有3位:TF、IF和DF。
六种状态标志的含义:
1)CF(Carry Flag),进位标志位。运算中最高位有进位或借位时,CF=1,否则CF=0;
2)PF(Parity Flag),奇偶校验位。运算结果中的低8位中1的个数为偶数时,PF=1,否则PF=0;
3)AF(Auxiliary Flag),赞助进位标志位。运算结果低4位向高4位有进位或借位时,AF=1,否则AF=0.常日用于对BCD算术运算结果的调度。
4)ZF(Zero Flag),零标志位。若运算结果为0时,ZF=1,否则,ZF=0;
5)SF(Sign Flag),符号标志位。若运算结果的最高位为1,则SF=1,否则SF=0,即与运算结果的最高位相同。
6)OF(Overflow Flag),溢出标志位。
——对付加法运算,判断溢出的方法:
若两个加数的最高位为0,而和的最高位为1,则产生上溢出。
若两个加数的最高位为1,而和的最高位为0,则产生下溢出。
当两个加数的最高位不相同时,不产生溢出。
——对付减法运算,判断溢出的方法:
若被减数的最高位为0,减数的最高位为1,而差的最高位为1,则产生上溢出。
若被减数的最高位为1,减数的最高位为0,而差的最高位为0,则产生下溢出。
被减数及减数的最高位相同时,不产生溢出。
溢出是指补码运算后的结果超出了所选字长能表示数的范围。例如,8位补码所能表示数的范围是-128~+127,16位补码所能表示数的范围是-32768~+32767.
三种掌握标志的含义:
1)TF(Trap Flag),陷进标志位,也常称为单步标志位。调试程序时,可设置单步事情办法,TF=1时,8086 CPU每实行完一条指令就自动产生一个内部中断。
在DEBUG调试程序中,通过单步实行操作,CPU运行单步中断做事程序,会把当前CPU中各寄存器的值在屏幕上显示出来。当TF=0时,8086 CPU能连续实行指令。
2)IF(Interrupt Flag),中断许可标志位。该标志用于掌握外部可屏蔽中断是否可以被8086 CPU相应。若IF=1,则许可CPU相应可屏蔽中断要求;若IF=0,则禁止。
3)DF(Direction Flag),方向标志位。用于掌握串操作指令中地址指针的变革方向。
如果DF=0,每次串操作后的存储器地址就自动增加,若DF=1,每次串操作后的存储器地址就自动减少。
FLAGS中标志位的符号表示
FLAGS中标志位的符号表示