Bootstrap

8086/8088CPU的储存器结构(一)

一、CPU的寄存器

1、通用寄存器组

执行部件EU中有8个16位通用寄存器。可分为两组,

第一组为通用数据寄存器,由AX,BX,CX和DX构成;

第二组为指针与变址寄存器,由SP,BP,SI和DI构成;主要用来存放操作数的偏移地址

(1)通用数据寄存器

用来存放16位的数据或地址,也可以分别将这四个寄存器AX,BX,CX,DX拆成两部分,高半部分和低半部分,高半部分民命名为AH,BH,CH,DH,而低半部分命名为AL,BL,CL,DL,因此,原本四个能用来存放16位的数据或地址的寄存器就变成八个只能用来存放数据而不能存放地址的8位寄存器。

·AX累加器,是算术运算时使用的主要寄存器,所有外部设备的输入输出指令只能使用AL 或者AH作为数据寄存器。

BX基址寄存器,顾名思义,即基本地址寄存器,是具有双重功能的寄存器,既可用作数据寄存器,在访问储存器时,又可存放被读写的储存单元的地址

CX计数寄存器,可用作数据寄存器,在字符串操作、循环操作和移位操作时用作计数器。

DX:数据寄存器,在乘除法中作为辅助累加器,在输入输出操作中存放接口的地址。

(2)指针和变址寄存器

主要用来存放操作数的偏移地址,即操作数的段内地址

SP:堆栈(stack)指针寄存器,在堆栈操作中存放栈顶的偏移地址

BP:基址指针寄存器,常用作堆栈区的基地址寄存器

SI:源变址寄存器,在字符串操作中存放源操作数的偏移地址。

变址寄存器内存放的地址在数据传送完成后,具有自动修改的功能。

DI:目的(destination)变址寄存器,在字符串操作中存放目的操作数的偏移地址

2、断寄存器

CPU总线接口部件BIU中设置有4个16位段寄存器,分别是代码段寄存器CS, 数据段寄存器DS, 附加段寄存器ES, 堆栈段寄存器SS.  编程时,程序和各种不同类型的数据分别存放在不同的逻辑段中,他们的 “段地址” 存在 “段寄存器” 中,段内的偏移地址存在于指针寄存器或者变址寄存器中。

CS代码【code】段(segment)寄存器,程序代码超过64K时,需要分成几个段存放。CS存放的是正在执行的程序段的段基址

DS数据段寄存器,存放当前使用的数据

ES:若当前使用的数据量太大,则需要增加第二个数据段,这时,附加段ES则派上用场。

SS堆栈段寄存器,是内存中的一块存储区,存放专用数据

3、控制寄存器

(1)标志寄存器FLAGS

共9个标志位,可分两类

第一类:状态标志,包括CF, PF, AF, ZF, SF和OF,用来表示运算结果特征,是否全零,是否溢出等;

第二类:控制标志,包括IF, DF 和TF,用来控制CPU操作,从上到下或从下到上等 。

CF:(carry flag)进位标志位CF=1,表示本次加法运算中有进位或者减法运算中有借位。

进行两个无符号数的加减法运算后,CF=1,表示运算的结果超出了该字长能够表示的数据范围。例如,执行8位数据运算后,CF=1表示结果超出255(2^7+2^6+……+2^0),或者是减法得到的差小于零。

进行有符号数运算时,CF对运算结果没有直接意义

PF:(parity flag)奇偶标志位。用来进行奇偶校验(传输数据过程中有没有出现数据丢失的现象),或生成奇偶校验位

PF=1,本次运算结果的低八位有偶数个1 

PF=0,本次运算结果的低八位有奇数个0 

AF:(auxiliary carry flag)辅助进位标志位。

AF=1,表示8位运算结果(仅限于AL寄存器)中低四位向高4位有进位或者借位,这个标志位只在BCD数运算中起作用。

ZF:(zero flag)零标志位。

ZF=1,运算结果全为0;否则ZF=0.

⑤SF:(sign flag)符号标志位

SF=1,表示运算结果最高位为“1”,  否则SF=0;

OF:(overflow flag)溢出标志位。

OF=1 ,表示两个用补码表示的有符号数的加法或减法结果超出了该字长所能表示的范围。

例如:进行八位运算时,OF=1,表示运算结果大于127或者小于-128,此时不能得到正确的运算结果。         OF标志对无符号数的运算结果没有意义。

OF是根据操作数的符号及其变化情况设置的。

例如:加法运算时,两个操作数的符号相同,而结果的符号与之相反,也就是判断最高位和次高位是否同时产生进位,则OF=1,   否则位0.

IF:(interrupt flag)终端允许标志位。

IF=1 表示允许CPU响应可屏蔽中断。 该标志可通过STI指令置位,也可通过CLI指令复位(清零)。

DF:(direction flag)方向标志位

在串操作指令中,若DF=0,表示串操作指令执行后地址指针自动增量,由低地址向高地址进行;

DF=0,表示地址指针自动减量,由高地址向低地址进行

DF标志位可通过STD指令置位,也可通过CLD指令复位。

TF:(trap flag)单步标志位。

TF=1,控制CPU进入单步工作方式。在这种工作方式下,CPU每执行完一条指令就会自动产生一次内部中断。

例题:

AL=3BH,  AH=7DH,指出AL和AH中的内容相加后,标志CF, AF, PF, SF, OF 和ZF 的状态。

解:AL=3BH=0011 1011B

        AH=7DH=0111 1101B

相加须先化成补码,但由于是正数,源码=反码=补码

相加后得         1011 1000

CF:运算时最高位没有进位,为0

AF:低四位有向高四位进位,为1

PF:结果有偶数个1,  为1

SF:结果最高位为1, 为1

OF:结果没超过127,不算溢出,为0

ZF:结果不是全0,为0

;