【微机原理与接口技术】二、8086系统结构

 

-8086CPU内部结构

1、总线接口部件BIU(Bus Interface Unit):

-描述:8086CPU与外部(存储器和I/O端口)的接口,提供16位双向数据总线和20位地址总线。

-作用:地址形成、取指令、指令排队、读/写操作、总线控制;

-组成:

1)16位段地址寄存器:

CS:代码段寄存器;

DS:数据段寄存器;

ES:附加段寄存器;

SS:堆栈段寄存器;

2)IP:16位指针寄存器,存放下一条要执行指令的偏移地址;

3)20位物理地址加法器:将16位逻辑地址变换成存储器读/写所需要的20位物理地址;

4)6字节指令队列:预放6字节的指令代码;

5)总线控制逻辑:发出总线控制信号;

-工作过程:CS中16位段地址最低位补4个0,加上IP中16位偏移地址,在加法器中形成20位物理地址,送往地址总线,通过总线控制逻辑发出存储器读信号_RD,启动存储器,按给定地址从存储器中取出指令,送往指令队列中等待执行。

 

2、指令执行部件EU(Execution Unit)

-描述:完成指令译码和执行指令工作;

-组成:

1)ALU:算术逻辑运算单元,完成8位或16位的二进制运算;16位暂存器可以暂存参加运算的操作数;

2)PSW:标志寄存器,存放ALU运算结果特征;

3)寄存器组:

①通用16位寄存器:

AX、BX、CX、DX;

AX又称累加器;

②专用16位寄存器:

SI:源变址寄存器;

DI:目的变址寄存器;

SP:堆栈指针寄存器;

BP:基址指针寄存器;

4)EU控制器:取指令控制和时序控制部件;

-工作过程:EU从BIU取得指令,译码,若执行指令需要访问存储器或I/O端口取操作数,则EU将操作数的偏移地址通过内部16位数据总线送给BIU,与地址段一起,在BIU的地址加法器中形成20位物理地址,申请访问存储器或I/O端口,取得操作数送给EU,EU根据指令要求向EU内部各部件发出控制命令,完成执行指令的功能。

 

-寄存器结构

 

1、通用寄存器组:

-描述:EU中包含4个16位通用寄存器:AX、BX、CX、DX;

也可以分为8个8位寄存器使用:AL、BL、CL、DL、AH、BH、CH、DH,只能存放8位数据,不能存放地址。

 

2、指针和变址寄存器:

1)BP与SP寄存器称为指针寄存器,与SS联用,为访问现行堆栈段提供方便。

2)SP寄存器在堆栈操作中使用。

3)SI与DI称为变址寄存器,通常与DS一起使用,为访问现行数据段提供段内地址偏移量。

 

3、段寄存器:

CS:代码段寄存器;

DS:数据段寄存器;

ES:附加段寄存器;

SS:堆栈段寄存器;

由他们给出相应逻辑段的首地址,称为段基址,段基址与段内偏移地址组合形成20位物理地址,段内偏移地址可以存放在寄存器中,也可以存放在存储器中。

 

4、指令指针寄存器:

IP,用来存放将要执行的下一条指令在现行代码段中的偏移地址。8086程序不能直接访问IP。

 

5、标志寄存器PSW:

1)CF:Carry Flag,进位标志位。本次运算中最高位由进位或借位时,CF=1。STC使CF标志置位,CLC复位,CMC取反。

2)PF:Parity Flag,奇偶校验标志位。本次结果运算中低八位有偶数个1时,PF=1;奇数个1时,PF=0。

3)AF:Auxiliary Carry Flag,辅助进位标志位。本次运算低四位向高四位有进位或借位时,AF=1。

4)ZF:Zero Flag,全零标志位。本次运算结果全零时(结果为0),ZF=1。

5)SF:Sign Flag,符号标志位。本次运算结果最高位为1时,SF=1。反映了本次运算结果的正负。

6)OF:Overflow Flag,溢出标志位。本次运算过程中产生溢出时,OF=1。对带符号数,字节运算结果范围(-128~+127),字运算结果(-32768~+32767),超过此范围为溢出。

①加法运算:计算机判断低位向最高有效位产生进位,而最高有效位向前无进位,置OF=1;或相反,低位向最高位无进位,而最高位向前却有进位,置OF=1.

②减法运算:最高位需要借位,而低位并不向最高位借位时,OF置1;或相反,当最高位不需要借位,而低位从最高位有借位时,OF置1。

 

7)TF:Trap Flag,单步标志位。调试程序时,可设置单步工作方式,TF=1时,CPU没执行完一条指令,就自动产生一次内部中断,使用户能逐条跟踪程序进行调试。

8)IF:Interrupt Flag,中断标志位。IF=1时,允许CPU响应可屏蔽中断,当IF=0时,即使外部设备有中断申请,CPU也不响应。STI使IF置1,CLI使IF置0。

9)DF:Ditection Flag,方向标志位。控制串操作指令中地址指针变化方向,若在串操作指令中,DF=0,,地址指针自动增量,即由低地址向高地址进行串操作,若DF=1,地址指针自动减量,即由高地址向低地址进行串操作。STD使DF置1,CLD使DF置0。

 

各标志位在DeBug中的符号表示:

 

-存储器组织

1、存储器地址分段

描述:在存储器中以字节为单位存储信息,每个存储单元有唯一的地址确定。8086由20根地址线可寻址1MB字节的存储空间,即对存储器寻址需要20位物理地址。而8086为16位机,CPU内部寄存器只有16位,可寻址64KB。因此8086系统把整个存储空间分成许多逻辑段,每段容量不超过64KB。

 

2、物理地址形成

-逻辑地址:存储器的任一逻辑地址由段基址和偏移地址组成,都是无符号的16位二进制数,程序设计时采用逻辑地址。

-物理地址:存储器的绝对地址,从00000~FFFFFH,是CPU访问存储器的实际寻址地址,它由逻辑地址变换而来。

-段基址:每段的起始地址,必须是每小段的首地址,其低四位一定位0。有四个段寄存器(CS,DS,ES,SS),用于存放段基址。

-计算公式:

物理地址 = 段基址 × 16 + 偏移地址

 

3、逻辑地址来源

取指令时:自动选择CS寄存器值作段基址,偏移地址由IP指出;

堆栈操作:自动选择SS寄存器值作段基址,偏移地址由SP指出;

读/写存储器操作或访问变量:自动选择DS或ES寄存器值作段基址(必要时修改为CS或SS),偏移地址由指令所给定的寻址方式来决定。当BP作为基地址寻址时,段基址由堆栈寄存器SS提供,偏移地址从BP中取得。

 

 

4、存储器分体结构

8086系统中1MB的存储空间分成两个存储体:偶地址存储体和奇地址存储体,各512KB:

 

存储器中存放的信息称为存储单元的内容,一个字在存储器中按相邻两个字节存放,存入时以低位字节在低地址、高位字节在高地址的次序存放。

如图 (00100H) = 1234H

(00103H) = 0152H

8086CPU访问存储器时,都是以字为单位进行的,并从偶地址开始。编程时要从存储器偶地址开始存放字数据(对准存放)

 

5、堆栈

-描述:在存储器中开辟一个区域,用来存放暂时需要保存的数据。堆栈段是由段定义语句在存储器中定义的一段,容量小于等于64KB。段基址由SS指定,栈顶由SP指定(SP指向的可以是当前栈顶单元,也可以是栈顶上的空单元),堆栈地址增长方式是向上增长,栈底设在存储器的高地址区,堆栈地址由高向低增长。

-工作方式:

1、堆栈工作方式是先进后出

2、入栈指令PUSH(SP-2->SP,SP指向新栈顶,低位数据压入SP,高位数据压入(SP+1));

3、出栈指令POP(当前栈顶SP(低位数据)和SP+1(高位数据)内容弹出,修改指针,SP+2->SP,SP指向新栈顶)。

4、以字为单位进行操作时,低字节在偶地址,高字节在奇地址。

例:SS=C000H,堆栈段<64KB,SP=1000H

猜你喜欢

转载自blog.csdn.net/JifengZ9/article/details/106879266