您的位置: 网站首页 > 程序开发 > 汇编语言与微机原理教程 > 第3章 微处理器的结构 > 【3.2 8086微处理器的功能结构】

3.2 8086微处理器的功能结构

 

3.2  8086微处理器的功能结构

Intel 8086是一个16位的微处理器,有20条地址线,能访问1MB实际地址的存储空间。

8086微处理器内部结构如图3-2所示。从图3-2中可看出,8086微处理器由两个部分即指令执行部件(EU)和总线接口部件(BIU)组成。指令执行部件由算术逻辑运算单元(ALU)、标志寄存器(FLAGS)、通用寄存器组和EU控制器4个部件组成,其主要功能是执行指令。总线接口部件由地址加法器、专用寄存器组、指令队列和总线控制逻辑4部件组成。它的主要功能是形成访问存储器的物理地址;访问存储器取得指令并暂存到指令队列中等待执行;访问存储器或I/O端口以读取操作数参与EU运算,或存放运算结果等。

3-2  8086微处理器的内部结构

3.2.1  总线接口单元

总线接口部件(BIU)主要由地址加法器、专用寄存器组、指令队列缓冲器和总线控制电路4个部件组成,其主要功能是负责完成CPU与存储器或I/O设备之间的数据传送。BIU中地址加法器把来自于段寄存器的16位地址(段首地址)左移4位后与16位偏移地址(来自于IP寄存器或EU16位寄存器或其他位置)相加,形成20位的实际地址,以对1MB的存储空间进行寻址。具体地说,当CPU取指令时,BIUCS16位段首地址左移4位并和IP16位偏移地址相加,形成指令在存储器中的物理地址,然后访问该物理地址所对应的存储单元,从中取出指令代码送到指令队列缓冲器中等待执行。指令队列一共6个字节(8088的指令队列为4个字节),一旦指令队列中空出2个(8086)或1个(8088)字节,BIU将自动进入读指令操作以填满指令队列;遇到转移类指令时,BIU将指令队列中的内存指令作废,重新从新的目标地址中取指令送到指令缓冲队列中。当EU需要读/写数据时,BIU将相应段寄存器中16位段首地址左移4位和EU送来的16位偏移地址相加,形成操作数的物理地址,从该地址单元中读取操作数或者将指令的执行结果传送到该单元中。

总线控制电路将8086/8088微处理器的内部总线与它引脚所连接的外部总线相连,它是8086/8088与外部交换信息的必经之路,包括16条数据线、20条地址线和若干条控制信号线。微处理器正是通过这些总线与外部取得联系从而形成各种规模的8086/8088微型计算机。

从微处理器的内部结构来看,80888086很相似,区别仅表现在以下两个方面。

18088与外部交换数据的数据总线宽度是8位,总线控制电路与专用寄存器组之间的数据总线宽度也是8位,而EU内部总线仍是16位,所以把8088称为准16位微处理器。

28088 BIU中指令队列的长度只有48字节,只要队列中出现一个空闲字节,BIU就会自动访问存储器,取指令来填满指令队列。

3.2.2  执行单元

EU的功能是执行指令。一般情况下,指令按照它存放的先后次序顺序执行。EU从指令队列中源源不断地取得指令代码,满负荷地连续执行指令而省去了取指令的时间。指令执行过程中如果需要访问存储器取操作数,那么EU将访问地址送给BIU,等待操作数到达,然后继续操作。遇到转移类指令,BIU会将指令队列中的后继指令作废,从新的地址重新取指令。这时,EU要等待BIU将取到的指令装入指令队列后才能继续执行。在这两种情况下,EUBIU的并行操作会受到一定影响,但是只要转移指令出现的比例不是很高,两者的重叠操作仍然会取得良好的效果。

EU中的算术逻辑运算单元(ALU)可完成16位或8位的二进制运算,运算结果通过内部总线送到通用寄存器,或者送往BIU的内部寄存器中,等待写入存储器。16位暂存器用来暂存参加运算的操作数。ALU运算后的结果特征(有无进位、溢出等)置入标志寄存器(FLAGS)中保存。

EU控制器负责从BIU的指令队列中取出指令,并对指令译码,根据指令要求向EU内部各部件发出控制命令以实现这条指令的功能。

3.2.3  寄存器组

8086/8088 CPU的内部寄存器如表3-1所示。

3-1  8086/8088 CPU内部寄存器

寄存器

高字节

低字节

   

   

AX

BX

CX

DX

AH

BH

CH

DH

AL

BL

CL

DL

累加器

基址寄存器

计数寄存器

数据寄存器

通用数据寄存器

SP

BP

SI

DI

 

 

堆栈指针

基址指针

源变址

目的变址

指针和变址寄存器

CS

DS

SS

ES

 

 

代码段

数据段

堆栈段

附加段

段寄存器

IP

FLAGS

 

 

指令指针

标志寄存器

控制寄存器

1.通用寄存器组

8086/8088微处理器指令执行部件(EU)中有816位通用寄存器,它们可分成两组。一组由AXBXCXDX构成,称做通用数据寄存器,用来存放16位的数据或地址。也可以把它们当作88位寄存器来使用,也就是把每个通用寄存器的高半部分和低半部分分开。低半部分被命名为ALBLCLDL;高半部分被命名为AHBHCHDH8位寄存器只能存放数据而不能存放地址。

1AX称为累加器,是算术运算时使用最多的寄存器,而且所有外部设备的输入/输出指令只能使用ALAX作为数据寄存器。

2BX称为基址寄存器,它可以用作数据寄存器,在访问存储器时也可以存放被读/写的存储单元的地址,是具有双重功能的寄存器。

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

4DX称为数据寄存器,它在乘、除法中作为辅助累加器,在输入/输出操作中存放端口的地址。

另一组416位寄存器主要用来存放操作数的偏移地址(即操作数的段内地址)。

1SP称为堆栈指针寄存器,存放栈顶的偏移地址,供堆栈操作使用。

2BP称为基址指针寄存器,常常用来存放堆栈内数据的基地址。

3SI称为源变址寄存器,主要用于存放地址,在字符串操作中存放源操作数的偏移地址。变址寄存器内存放的地址在数据传送完成后,具有自动修改的功能。例如,传送1个字节数据后把地址加1,为下次传送做好准备,变址寄存器因此得名。

4DI称为目的变址寄存器,主要用于存放地址,在字符串操作中存放目的操作数的偏移地址。

2.段寄存器

8086/8088微处理器总线接口部件(BIU)中设置有416位段寄存器,它们是代码段寄存器(CS)、数据段寄存器(DS)、附加段寄存器(ES)和堆栈段寄存器(SS)。

代码段存放程序指令,程序代码超过64KB时需要分成几个段存放。CS中存放的是现在正在执行的程序段的段基址。

数据段用于存放当前使用的数据,需要第二个数据段时可以使用附加段。

堆栈段是内存中的一块存储区,用来存放专用数据。例如,调用子程序时的入口参数、返回地址等,这些数据都按照先进后出的规则进行存取。SS存放堆栈段的段基址,SP存放当前堆栈栈顶的偏移地址。数据进出堆栈要使用专门的堆栈操作指令,SP的值在执行堆栈操作指令时根据规则自动地进行修改。

编程时,程序和各种不同类型的数据分别存放在不同的逻辑段中,它们的段基址存放在段寄存器中,偏移地址存放在指针寄存器或变址寄存器中。

3.标志寄存器(FLAGS

8086/8088微处理器中设置了一个16位标志寄存器(FLAGS),用来存放运算结果的特征和控制标志,其格式如图3-3所示。

15

11

10

9

8

7

6

 

4

 

2

 

0

 

OF

DF

IF

TF

SF

ZF

 

AF

 

PF

 

CF

3-3  8086/8088微处理器16位标志寄存器格式

标志寄存器FLAGS中存放的9个标志位可分成两类,一类叫状态标志,用来表示运算结果的特征,包括CFPFAFZFSFOF;另一类叫控制标志,用来控制微处理器的操作,包括IFDFTF。各标志位的作用说明如下:

1CFCarry Flag):进位标志位。CF=1表示本次运算中最高位(第7位或第15位)有进位(加法运算时)或有借位(减法运算时)。

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

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

2PFParity Flag):奇偶标志位。PF=1表示本次运算结果的低8位中有偶数个1PF=0表示有奇数个1PF可以用来进行奇偶校验,或者用来生成奇偶校验位。

3AFAuxiliary Carry Flag):辅助进位标志位。AF=1表示8位运算结果(限使用AL寄存器)中低4位向高4位有进位(加法运算时)或有借位(减法运算时),这个标志位只在BCD数运算中起作用。

4ZFZero Flag):零标志位。ZF=1表示运算结果为0(各位全为0);否则ZF=0

5SFSign Flag):符号标志位。SF=1表示运算结果的最高位(第7位或第15位)为1;否则SF=0

6OFOverflow Flag):溢出标志位。OF=1表示两个用补码表示的有符号数的加法或减法结果超出了该字长所能表示的范围。例如,进行8位运算时,OF=1表示运算结果大于+127或小于-128,此时不能得到正确的运算结果。OF标志对无符号数的运算结果没有意义。

7IFInterrupt Flag):中断允许标志位。IF=1表示允许微处理器响应可屏蔽中断。IF标志可通过STI指令置位(置1),也可通过CLI指令复位(清0)。

8DFDirection Flag):方向标志位。在串操作指令中,若DF=0,表示串操作指令执行后地址指针自动增量,串操作由低地址向高地址进行;若DF=1,表示地址指针自动减量,串操作由高地址向低地址进行。DF标志位可通过STD指令置位,也可通过CLD指令复位。

9TFTap Flag):单步标志位。TF=1表示控制微处理器进入单步工作方式。在这种工作方式下,微处理器每执行完一条指令就会自动产生一次内部中断,这在程序调试过程中很有用。

4.指令指针寄存器(IP

8086/8088微处理器中有一个16位指令指针寄存器(IP),用来存放将要执行的下一条指令在代码段中的偏移地址。在程序运行过程中,BIU自动修改IP中的内容,使它始终指向将要执行的下一条指令。

程序不能直接访问IP,但是可通过某些指令修改IP的内容。例如,执行转移指令时会将转移的目标地址送入IP中,以实现程序的转移。