汇编语言第2章微型计算机系统结构_第1页
汇编语言第2章微型计算机系统结构_第2页
汇编语言第2章微型计算机系统结构_第3页
汇编语言第2章微型计算机系统结构_第4页
汇编语言第2章微型计算机系统结构_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章微型计算机系统结构本章学习目标.了解汇编语言程序设计的源程序总体结构和指令的执行过程。.理解微型计算机8086/8088CPU的内部结构和外部引脚的含义。.充分理解微型计算机8086/8088CPU的工作模式和适用的范围。.理解8086/8088CPU系统总线时序、总线周期的组成和完成的目标任务。.掌握8086/8088CPU内部段寄存器和通用寄存器的隐含及替代使用方法。.熟练掌握8086/8088CPU标志寄存器中的各标志位所表示的具体意义和产生的条件。2.18086/8088微处理器2.1.1CPU结构为了说明8086CPU的结构,需要先了解CPU的功能,然后考虑需要什么样的结构才能够实现这种功能。这样的一种学习思路可以使读者更容易理解CPU的各个组成结构。

CPU的功能概括起来就是“执行指令”。一个程序有很多条指令,放在内存中的。那么把它取出来送给CPU就是“取指”过程。指令本身的执行在CPU内部,“执行过程”跟接口没有关系。执行完毕,要将结果输出到内存或者端口,这就是“输出结果”过程。将上述指令执行的过程概括一下,可以分为3个步骤:①“取指”过程;②“执行”过程;③“输出结果”过程。执行过程在CPU内部完成,部件称为执行部件EU;“取指”和“输出结果”过程则是由总线接口部件BIU来完成的。

8086CPU内部结构如图2-1所示。从功能上可将8086分为两个部分,即总线接口单元BIU(BusInterfaceUnit)和执行单元EU(ExecutionUnit).1.总线接口单元BIU

总线接口单元的功能是负责完成与存储器或I/O设备之间的数据传送。其具体任务是:BIU要从内存取指令送到指令队列缓冲器;CPU执行指令时,总线接口单元要配合执行单元从指定的内存单元或外设端口中取数据,将数据传送给执行单元,或者把执行单元的操作结果传送到指定的内存单元或外设端口中。

BIU内有4个16位段地址寄存器CS(代码段寄存器)、DS(数据段寄存器)、SS(堆栈段寄存器)和ES(附加段寄存器),16位指令指针IP(InstructionPointer),6字节指令队列缓冲器,20位地址加法器和总线控制电路。下面对总线接口单元作3点说明。

(1)指令队列缓冲器

8086的指令队列为6个字节,而8088的指令队列为4个字节。不管是8086还是8088,都会在执行指令的同时,从内存中取下面一条或几条指令,取来的指令就依次放在指令队列中。它们采用“先进先出”的原则,按顺序存放,并顺序到EU中去执行,且遵循下列原则。

1)取指时,每当指令队列缓冲器中存满一条指令时,EU就立即开始执行。

2)指令队列缓冲器中只要空出两个字节,BIU便自动执行取指操作,直到填满为止。

3)在EU执行指令的过程中,指令需要对存储器或I/O设备存取数据时,BIU将在执行完现行取指的存储器周期后的下一个存储器周期时,对指定的内存单元或I/O设备进行存取操作,交换的数据经BIU由EU进行处理。

4)当EU执行完转移、调用和返回指令时,则要清除指令队列缓冲器,并要求BIU从新的地址重新开始取指令,新取的第一条指令将直接经指令队列送到EU去执行,随后取来的指令将填入指令队列缓冲器。由于BIU和EU是分开并独立工作的,因此,在一般情况下,CPU执行完一条指令后就可以执行下一条指令,而不需要像以往8位CPU那样重复地进行先取指令、后执行指令的串行操作。16位CPU这种并行重叠操作的特点,提高了总线的信息传输效率和整个系统的执行速度。如图2-2所示为8086/8088CPU程序的执行过程。(2)地址加法器和段寄存器

8086有20条地址线,但CPU内部寄存器只有16位,那么如何用16位寄存器实现20位地址的寻址呢?分别用16位的段寄存器与16位的偏移量巧妙地解决了这一矛盾。即各个段寄存器分别用来存放各段的起始地址。由IP提供或由EU按寻址方式计算出寻址单元的16位偏移地址(又称为逻辑地址)后,将与左移4位后的段寄存器的内容同时送到地址加法器进行相加,形成一个20位的实际地址(又称为物理地址),以对存储单元寻址。实际地址的产生过程如图2-3所示。例如,要形成某指令码的实际地址,就需将IP的值与代码段寄存器CS(CodeSegment)左移4位后的内容相加。假设CS=ECOOH,IP=0800H,此时指令的物理地址为EC800H。(3)16位指令指针IPIP的功能与8位CPU类似。正常运行时,IP中含有BIU要取的下一条指令(字节)的偏移地址。IP在程序运行中能自动加1修正,使之指向要执行的下一条指令。有些指令能使IP值改变或使IP值压入堆栈,或由堆栈弹出恢复原值。2.执行单元EU

执行单元不与系统直接相连,它的功能只是负责执行指令;执行的指令从BIU的指令队列缓冲器中取得,而且执行指令的结果或执行指令所需要的数据都由EU向BIU发出请求,再由BIU对存储器或外设存取。EU由下列部分组成。

1)16位算术逻辑单元(ALU):它可以用于进行算术、逻辑运算,也可以按指令寻址方式计算出寻址单元的16位偏移量。

2)16位标志寄存器F:它用来反映CPU运算的状态特征或存放控制标志。

3)数据暂存寄存器:它协助ALU完成运算,暂存参加运算的数据。

4)通用寄存器组:它包括4个16位数据寄存器AX,BX,CX,DX和4个16位指针与变址寄存器SP,BP,SI,DI.5)EU控制电路:它是控制、定时各种状态逻辑电路,接收从BIU中指令队列取来的指令,经过指令译码形成各种定时控制信号,对EU的各个部件实现特定的定时操作。

EU中所有的寄存器和数据通道(除队列总线为8位外)都是16位的宽度,可实现数据的快速传递。2.1.2寄存器结构寄存器是CPU在运算时一些中间数据的暂存地址,按照其用途的不同可以分为通用寄存器、指令指针寄存器、标志寄存器和段寄存器4类。8086/8088的内部寄存器编程结构如图2-4所示。它共有14个16位寄存器,其中标志寄存器只用了9位。下面根据寄存器用途的不同对各种寄存器进行详细介绍。

1.通用寄存器

8086/8088的通用寄存器分为两组。(1)数据寄存器

EU中有4个16位数据寄存器AX,BX,ON和DX。每个数据寄存器分为高字节H和低字节L,它们均可作为8位数据寄存器独立寻址、独立使用。多数情况下,这些数据寄存器用在算术运算或逻辑运算指令中,用来进行算术逻辑运算。而在有些指令中,它们则有特定的用途:如AX作累加器;BX作基址寄存器,在查表指令XLAT中存放表的起始地址;CX作计数寄存器,在数据串操作指令的REP中存放数据串元素的个数;DX作数据寄存器,在字的除法运算指令DIV中存放余数。这些寄存器在指令中隐含使用。有关数据寄存器的隐含使用操作如表2-1所示。

(2)指针寄存器和变址寄存器指针寄存器SP和BP称为P组,变址寄存器SI和DI称为I组,它们都是16位寄存器,一般用来存放地址的偏移量(即相对于段起始地址的距离)。偏移量在BIU的地址加法器中和左移4位的段寄存器内容相加产生20位的物理地址。指针寄存器SP和BP用来指示存取位于当前堆栈段中的数据所在的地址,但SP和BP在使用上有区别。入栈(PUSH)和出栈((POP)指令是由SP给出栈顶的偏移地址,故称为堆栈指针,BP则是存放位于堆栈段中一个数据区的基地址,故称为基址指针寄存器(数据区首地址的偏移量)。变址寄存器SI和DI是存放当前数据段的偏移地址的。源操作数地址的偏移放于SI中,所以SI称为源变址寄存器;目的操作数地址的偏移地址放于DI中,故DI称为目的变址寄存器。例如在数据串操作指令中,被处理数据串地址的偏移地址由SI给出,处理后的结果数据串地址的偏移地址则由DI给出。

2.指令指针寄存器指令指针寄存器IP用来存放下一条待执行指令在代码段中的偏移地址。与CS(代码段寄存器)相结合形成指向指令存放单元的物理地址。3.标志寄存器

16位标志寄存器F只用了其中的9位作标志位,即6个状态标志位,3个控制标志位。如图所示。状态标志位用来反映算术或逻辑运算后结果的状态,以记录CPU的状态特征,分别为:CF,PF,AF,ZF,SF,OF.1)CF(CarryFlag)进位标志:当执行一个加法或减法运算使最高位(即D15位或D7位)产生进位或借位时,则CF为1,否则为0。在进行多字节数的加减运算时,要使用到该标志位;在比较无符号数大小时,也用到该标志位。此外,循环指令也会影响它。

2)PF(PrityFlag)奇偶标志:当指令执行结果的低8位中含有偶数个1时,则PF为1,否则为0。利用PF可进行奇偶校验检查,或产生奇偶效验位,在串行通信中也用到PF位。

3)AF(AuxiliaryCarryFlag)辅助进位标志:当执行一个加法或减法运算使结果中低字节的低4位向高4位有进位或借位时,则AF为1,否则为0.4)ZF(ZeroFlag)零标志位:若当前的运算结果为0,则ZF为1,否则为0.5)SF(SignFlag)符号标志:它和运算结果的最高位(根据D15位或D7位判断)相同。当数据用补码表示时,负数的最高位为1,正数的最高位为0.

6)OF(OverflowFlag)溢出标志:此标志用于反映有符号数加减运算是否引起溢出。如运算结果超过了8位或16位有符号数的表示范围,即在字节运算时大于+127或小于-128,在字运算时大于+32767或小于-32768,称为溢出。当补码运算有溢出时,OF为1;否则为0。对OF的取值可以采用简易的办法来求解:字节运算,C6和C7位的异或;字运算,则用C14和C15位的异或

C,表示进行加减运算时第i位向第i+1位的进位或借位。标志寄存器中的3个控制标志位分别为DF,IF和TF。

1)DF(DirectionFlag)方向标志:它用来控制数据串操作指令的步进方向。若用STD指令将DF置1,则串操作过程中地址会自动递减;若用CLD指令将DF清零,则串操作过程中地址会自动递增。

2)IF(InterruptEnableFlag)中断允许标志:它是控制可屏蔽中断的标志。若用STI指令将IF置1,则表示允许CPU接受外部从INTR引线上发来的可屏蔽中断请求信号;若用CLI指令将IF清零,则禁止CPU接受可屏蔽中断请求信号。IF的状态不影响非屏蔽中断(NM)请求,也不影响CPU响应内部的中断请求。

3)TF(TrapFlag)跟踪(陷阱)标志:它是为调试程序方便而设置的。若将TF置1,则8086/8088CPU处于单步工作状态方式;否则,将正常执行程序。8086/8088没有专门设置和清除TF标志的指令,要通过其他方法设置和清除。中断时标志寄存器自动地压入了堆栈,故可以在中断服务程序中,用BP间址找到标志寄存器存放的内存单元,并进行改变,当IRET指令使堆栈中存放的原标志寄存器内容自动地弹回到CPU中去时,其中的TF已是新的状态“1”了。

4.段寄存器

8086/8088CPU具有寻址存储空间1MB的能力,但是8086/8088指令中给出的地址码仅有16位,指针寄存器和变址寄存器也只有16位,即用16位长度二216=64K不能使CPU直接寻址220=1MB空间。为此,8086/8088用一组段寄存器将这1MB存储空间分成若干个逻辑段,每个逻辑的长度为64K。这些逻辑段可被任意设置在整个存储空间上下浮动。

8086/8088CPU的BIU中有4个16位段寄存器(CS,SS,DS,ES),分别称为代码段寄存器CS、堆栈段寄存器SS、数据段寄存器DS和附加段寄存器ES,用来存放各段的起始地址,它们被称为“段基址”寄存器。代码段寄存器CS用来存放程序当前使用的代码段的段基址,CPU执行的指令将从代码段取得;堆栈段寄存器SS用来存放程序当前使用的堆栈段的段基址,堆栈操作的数据就在这个段中;数据段寄存器DS用来存放程序当前使用的数据段的段基址。一般来说,程序使用的数据放在数据段中;附加段寄存器ES用来存放程序当前使用的附加段的段基址,它通常也用来存放数据,典型用法是存放处理后的数据。段的概念(强调)

8086/8088CPU的指令指针IP和堆栈指示器SP都是16位,故只能直接寻址64K.为了能寻址1MB存储空间,引入了分段的新概念。在8086/8088系统中,1MB存储空间被分为若干逻辑段,其实际存储器中段的位置如图2-6所示。每段最多可包含64K长度的连续存储单元。每个段的起始地址又叫基址,它是一个能被16整除的数,即最后4位为0,基址是用软件设置的。段和段之间可以是连续的、分开的、部分重叠或完全重叠的。一个程序所用的具体存储空间可以为一个逻辑段,也可以为多个逻辑段。如果段不重叠且连续只能有16个段,216×24=1M段的基址存放在段寄存器CS,DS,SS和ES中。程序可以从4个段寄存器给出的逻辑段中存取代码和数据。若要对另外的段而不是当前可寻址的段进行存取信息,程序必须首先改变对应的段寄存器,将其设置成所要存取的段的基址。有关段寄存器的使用约定如表2-2所示。

8086与8088的区别:内部结构和性能基本上是相同的。主要区别在于:8086是真正的标准16位CPU,它有16条数据线和20条地址线;

8088是在8位微处理器8080和8085基础上发展起来的一种准16位微处理器,它的内部寄存器、运算单元和内部操作都是16位的,可处理16位数据,也能处理8位数据,但它的数据总线只有8条,它同样也有20条地址线。

8086CPU的内部指令队列缓冲器为6字节长,而8088CPU的内部指令队列缓冲器为4字节长。2.1.38086/8088的引脚介绍

CPU引脚需要连接总线。总线又包括地址总线、数据总线、控制总线。一个引脚只能连接总线的一根线,引脚实质上和总线的位数相对应。为了减小引脚数量,8086的引脚设计采用过分时复用的方法,使得引脚的数量减少了一半。地址总线有20位,其中16位是地址/数据总线分时复用,另4位是地址/状态总线分时复用。其次就是CPU和一些控制信号线进行数据交换:一方面CPU的控制指令通过这些引脚发送出去;另一方面外部的一些状态要通过这些引脚反馈回来。1.8086/8088系统总线时序由于CPU的引脚具有分时复用功能,在了解CPU各引脚功能之前首先要了解系统总线的时序结构。微处理器是在统一的时钟信号CLK控制下,按节拍进行工作的。8086/8088的时钟频率为5MHz,故时钟周期为200ns,CPU每执行一条指令,至少要通过总线对存储器访问一次(取指令)。

8086/8088CPU通过总线对外部(存储器或I/O接口)进行一次访问所需的时间称为一个总线周期。一个总线周期至少包含4个时钟周期即T1,T2,T3,T4,处在这些基本时钟周期中的总线状态称为T状态。

8086/8088CPU采用分时复用的地加数据总线。在一个总线周期内,首先利用总线传送地址,然后再利用同一总线传送数据。具体来说,在T1状态,BIU把要访问的存储单元或I/O端口的地址输出到总线上。若为读周期,在T2中使总线处于浮动的(高阻)缓冲状态,以使CPU有足够的时间从输出地址方式转变为输入(读)数据方式,然后在T3状态的开始,CPU从总线上读入数据。T4结束本总线周期.若为写周期,由于输出地址和输出数据都是写总线过程,CPU不必转变读写工作方式,因而不需要缓冲区,CPU在T2~T4中把数据输出到总线上,考虑到CPU和慢速的存储器或I/O接口之间传送的实际情况,CPU会在总线周期的T3和T4之间插入若干个附加时钟周期。这附加周期称为等待周期TW.

需要特别指出,仅当BIU需要填补指令队列的空缺,或者当EU在执行指令过程中需要申请一个总线周期时,BIU才一会进入执行总线周期的工作状态。在两个总线周期之间,可能出现一些没有BIU活动的时钟周期T1,处于这种时钟周期中的总线状态被称为空闲状态,或者简称T1状态。如图2-7所示为典型的总线周期序列。只有第28脚不同2.8086/8088CPU的引脚信号

8086和8088的引脚信号如图2-8所示。它们的40条引线按功能可分为以下5类

(1)地址/数据总线AD15-AD0

这是分时复用的存储器或端口地址和数据总线。三态,双向输入/输出。808616位数据,8088只能传输8位数据,所以只有AD7~AD08条地址数据线,A15~A8只用来输出地址。作为复用引脚,在总线周期的T1状态用来输出要寻址的存储器或I/O端口地址;在T2状态浮置成高阻状态,为传输数据做准备;在T3状态,用于传输数据;T4状态结束总线周期。当CPU响应中断以及系统总线“保持响应”时,复用线都被置为高阻状态。(2)地址状态总线A19/S6-A16/S3

地址/状态总线为输出、三态总线,采用分时输出,即T1状态输出地址的最高4位,T2-T4状态输出状态信息。当访问存储器时,T1状态时输出高4位的地址A19-A16送到锁存器(8282)锁存,与AD15-AD0组成20位的地址信号;访问I/O端口时,A19-A16=0。状态信息S6为0用来指示8086/8088当前与总线相连,所以,在T2-T4状态,S6总等于0,表示当前连总线上。S5表示中断允许标志位IF的当前设置。S4和S3用来指示当前正在使用哪个段寄存器,如表2-3。当系统总线处于“保持响应”状态时,这些引线置为高阻状态。

(3)控制总线

1)/BHE/S7:/BHE高8位数据总线允许/状态复用引脚三态、输出。/BHE在总线周期的T1状态时输出,S7在T2~T4时输出。在8086中,当/BHE/S7引脚上输出/BHE信号时,表示总线高8位AD15-AD8上的数据有效。在8088中,第34引脚不是/BHE/S7,而是被赋予另外的信号:在最小工作模式时,它为/SS0,和DT//R、/M/IO一起决定了8088当前总线周期的读/写动作;在最大工作模式时,它恒为高电平。

S7在当前的8086芯片设计中未被定义,作备用状态信号线。

2)/RD:读控制信号,三态,输出。当/RD=0时,表示将要执行一个对存储器或I/O端口的读操作。到底是对内存单元还是对I/O端口读取数据,取决于/M/IO信号。在一个读操作的总线周期中,/RD信号在T2,T3和Tw状态均为低电平。在系统总线进入“保持响应”期间,/RD被浮空。

3)READY:“准备好”信号线,输入。它实际上是由所寻址的存储器或I/O端口发来的响应信号,高电平有效。当READY=1时,表示所寻址的内存或I/O设备己准备就绪,马上就可以进行一次数据传输。CPU在每个总线周期的T3状态开始对READY信号采样。如果检测到READY为低电平,表示存储器或I/O设备尚未准备就绪,则CPU在T3状态之后自动插入一个或几个等待状态Tw直到READY变为高电平,才进入T4状态,完成数据传送,结束当前总线周期。

4)/TEST:等待退出测试信号,输入。它用于多处理器系统中且只有在执行WAIT指令时才使用。当CPU执行WAIT指令时,每隔5个时钟周期对该线输入进行一次测试;若/TEST=1时,CPU将停止取下条指令而进入等待状态,重复执行WAIT指令,直至/TEST=0.等待状态结束,CPU才继续往下执行被暂停的指令。等待期间允许外部中断。

/TEST与WAIT配合使用。WAIT处理器控制指令,相当于暂停

5)INTR:可屏蔽中断请求信号,输入,高电平有效。当1NTR=1时,表示外设提出了中断请求,8086/8088在每个指令周期的最后一个T状态采样此信号。若IF=1,则CPU响应中断,停止执行指令序列,并转去执行中断服务程序。

6)NMI:非屏蔽中断请求信号,输入,上升沿触发。此请求不受IF状态的影响,也不能用软件屏蔽,只要此信号一出现,就在现行指令结束后引起中断。

7)RESET:复位信号,输入,高电平有效。通常与8284A复位输出端相连,8086/8088要求复位脉冲宽度不得小于4个时钟周期,接通电源时不能小于50uS;复位后,内部寄存器状态如表2-4所示。程序执行时,RESET线保持低电平。interrupt

request

中断请求不可屏蔽中断(NonMaskableInterrupt)

8)CLK:系统时钟,输入。通常与8284A时钟发生器的时钟输出端CLK相连,该时钟信号的低/高之比常采用2:1(占空度1/3)。

(4)电源线VCC和地线GNDVCC:电源,输入,第40脚。8086/8088CPU采用单一的+5V电压。

GND:接地引脚,第1,20脚。向CPU提供参考地电平,有两个接地引脚。

(5)其他控制线(24~31引脚)由于8086/8088CPU可以工作在不同的工作模式(最大/最小),其他引脚功能都相同,只有24~31引脚在不同的工作模式下功能各不相同。2.2工作模式

8086/8088CPU芯片可以在两种模式下工作,即最小模式和最大模式。所谓最小模式就是系统中只有一个8086/8088微处理器。在这种情况下,所有总线控制信号都是直接由8086/8088CPU产生的,系统中的总线控制逻辑电路被减到最少,该模式适用于规模较小的微机应用系统。最大模式是相对于最小模式而言的,最大模式用于中、大规模的微机应用系统中。在最大模式下,系统中至少包含两个微处理器,其中一个为主处理器,即8086/8088CPU,其他的微处理器称为协处理器(如8087),协助主处理器工作。

MN//MX是最小/最大模式设置信号,输入,第33脚。该输入引脚电平的高、低决定了CPU工作在最小模式还是最大模式。当MN//MX=1时,8086/8088工作在最小工作模式(MN)。在此方式下,全部控制信号由CPU本身提供。(主要介绍)当MN//MX=0时,8086/8088工作在最大工作模式下。这时系统的控制信号由8288总线控制器提供,而不是由8086/8088直接提供。(了解)不同的工作模式只有这8个引脚不同括号内是最大模式2.2.1最小工作模式和系统总线周期时序当MN//MX=1时,接电源电压,系统工作于最小工作模式。最小工作模式系统的系统总线结构如图2-9。

在最小工作模式下,第24~31脚的信号含义如下所述。

1./INTA(InterruptAcknowledge)中断响应信号输出它用于对外设的中断请求作出响应。当外部中断源通过INTR引脚向CPU发出中断请求信号后,如果中断允许标志位IF=1(即CPU处于开中断)时,CPU在当前指令执行完后,响应中断。中断响应周期时序如图2-10所示。是两个连续的负脉冲。第1个负脉冲通知外设接口,中断请求己获允许;外设接口收到第2个负脉冲后,把中断类型号放到AD0-AD7总线上,而在这两个总线周期的其余时间里,AD0-AD7处于浮空。CPU读入中断类型码后,可以在中断矢量表中找到该外设的服务程序入口地址,从而转入中断服务。

2.ALE(AddressLatchEnable)地址锁存信号输出它是8086/8088提供给地址锁存器8282/8283(74LS373,74LS374)的控制信号,高电平有效。在任何一个总线周期的T1状态,ALE输出有效电平,以表示当前在地址/数据复用总线上输出的是地址信息,地址锁存器将ALE作为锁存信号,对地址进行锁存。

3./DEN(DataEnable)数据允许信号输出当用8286/8287(74LS244,74LS245)作为数据总线收发器时,/DEN为收发器提供一个控制信号,表示CPU当前准备发送或接收一个数据。总线收发器将/DEN作为输出允许信号,即在每个存储器的访问周期以及中断响应周期均为低电平;在DMA(直接内存访问)方式时,被浮置为高阻状态。

4.DT//R(DataTransmit/Receive)数据收发输出在使用8286/8287作为数据总线收发器时,DT//R信号用来控制8286/8287的数据传送方向。当DT//R为高电平时,则进行数据发送;当DT//R为低电平时,则进行数据接收。在DMA方式时,它被浮置为高阻状态。

【资料】DMA方式,Direct

Memory

Access,也称为成组数据传送方式。

工作原理:

一个设备接口试图通过总线直接向另一个设备发送数据(一般是大批量的数据),它会先向CPU发送DMA请求信号。外设通过DMA的一种专门接口电路――DMA控制器(DMAC),向CPU提出接管总线控制权的总线请求,CPU收到该信号后,在当前的总线周期结束后,会按DMA信号的优先级和提出DMA请求的先后顺序响应DMA信号。CPU对某个设备接口响应DMA请求时,会让出总线控制权。于是在DMA控制器的管理下,外设和存储器直接进行数据交换,而不需CPU干预。数据传送完毕后,设备接口会向CPU发送DMA结束信号,交还总线控制权。

实现DMA传送的基本操作如下:

(1)外设可通过DMA控制器向CPU发出DMA请求:

(2)CPU响应DMA请求,系统转变为DMA工作方式,并把总线控制权交给DMA控制器;

(3)由DMA控制器发送存储器地址,并决定传送数据块的长度;

(4)执行DMA传送;

(5)DMA操作结束,并把总线控制权交还CPU。

注意:

DMA请求信号可能会打断一条指令的执行,使它暂时停止执行,数据传送完毕后才恢复该指令的执行。

用途:

DMA方式主要适用于一些高速的I/O设备。这些设备传输字节或字的速度非常快。对于这类高速I/O设备,如果用输入输出指令或采用中断的方法来传输字节信息,会大量占用CPU的时间,同时也容易造成数据的丢失。而DMA方式能使I/O设备直接和存储器进行成批数据的快速传送。

DMA控制器或接口一般包括四个寄存器:

状态控制寄存器、数据寄存器、地址寄存器和字节计数器。

这些寄存器在信息传送之前需要进行初始化设置。即在输入输出程序中用汇编语言指令对各个寄存器写入初始化控制字。

5.M//IO(Memory/InputandOutput)存储器/输入、输出控制信号输出如为高电平,则表示CPU和存储器之间进行数据传输;如为低电平,则表示CPU和输入/输出设备之间进行数据传输。一般在前一总线周期的T4状态,M//IO就成为有效电平,然后开始一个新的总线周期,且一直保持有效电平,直到本周期的T4状态为止。在DMA方式时,M//IO被浮置为高阻状态。

6./WR(Write)写信号输出

/WR有效时,表示CPU当前正在进行存储器或I/O写操作,到底为哪种写操作,则由M//IO信号决定。对任何写周期,/WR在T2、T3、TW期间有效。在DMA方式时,被浮置为高阻状态。

7.HOLD(HoldRequest)总线保持请求信号输入

8.HLDA(HoldAcknowledge)总线保持响应信号输出当系统中CPU之外的另一个主模块要求占用总线时,通过HOLD向CPU发一个高电平的请求信号。如果CPU允许让出总线,就在当前总线周期完成时,于T4状态从HLDA脚发出一个回答信号,同时,CPU使地址/数据总线和控制总线处于浮空状态。总线请求部件收到HLDA信号后,就获得了总线控制权。在此后一段时间,HOLD和HLDA都保持高电平。在总线占有部件用完总线之后,会把HOLD信号变为低电平,表示现己放弃对总线的占有。8086/8088收到低电平的HOLD信号后,也将HLDA变为低电平,于是CPU又重新获得对总线的占有权。图2-11所示为8086最小工作模式时读和写总线周期时序图。控制8286收发器/BHE---高8位数线有效若在系统中应用了收发器8286,则要利用控制信号DT//R和/DEN。由于是读,故DT//R应为低电平,/DEN信号也在T2状态有效,8286处于反向传送。如果存储器或IO接口可以立即完成数据准备而不需要等待状态,则T3状态期间将数据放到系统数据总线上。CPU在T3状态结束时从AD15S-AD0上读取数据后,在T4状态前期使/RD变为无效,存储器或I/O接口检测到这个跳变后,便认为这次传送结束,撤去数据。对于写总线周期,则必须给出写信号,因此,/WR信号在T2状态变成有效低电平,并在撤销地址后,立即把数据送上AD15-AD0。由于是写操作,DT//R应为高电平,/DEN为低电平,8286处于正向传送。如果存储器或I/O接口可以完成数据写入而不需要等待状态,CPU在T3状态前期使/WR变为无效并撤销输出的数据信号。不管是读总线周期,还是写总线周期,DEN在T4状态都变为无效,从而关闭收发器8286。在读总线周期或写总线周期中,若所使用的存储器或外设的工作速度较慢,不能满足上述基本时序的要求,则可利用READY信号产生电路产生READY信号并经时钟8284同步后加到CPU的READY线上,使CPU在T3和T4之间插入一个或几个TW状态,来解决CPU与存储器或外设之间的时间配合。

8086在T3状态的开始测试READY线,若发现READY信号为有效高电平,T3状态之后即进入T4状态;若发现READY信号为低电平,则在T3状态结束后不进入T4状态,而插入一个TW状态。以后在每一个TW状态的开始都测试READY线,只有发现它为有效高电平时,才在这个TW状态结束进入T4状态。在8088最小工作模式系统读写总线周期中,M//IO为IO//M,/BHE/S7是/SS0且与IO//M同时变化,AD15~AD8为A15~A8,仅用于输出地址,只有AD7~AD0传送数据。其他同8086。2.2.2最大工作模式

8086/8088也都可以按最大工作模式来配置系统。当MN//MX线接地时,系统就工作于最大工作模式了。最大工作模式和最小工作模式区别。最小模式系统中,

CPU的引脚直接提供所有必须的总线控制信号,这种方式适合于单处理器组成的小系统。在最小工作模式中,作为单处理器的8086/8088CPU通常控制着系统总线,但也允许系统中的其他主控设备—DMA控制器占用系统总线。DMA控制器通过占用系统总线可实现外部设备和存储器之间直接数据传送。

DMA控制器虽然通过挪用总线周期实现外部设备与存储器之间的直接数据传送,提高了整个系统的能力,但DMA控制器却不能执行命令,其能力是相当有限的。

假如系统中有两个或多个同时执行指令的处理器,这样的系统就称为多处理器系统。增加的处理器可以是8086/8088处理器,也可以是数字数据处理器8087或I/O处理器8089。在设计多处理器系统时,除了解决对存储器和I/O设备的控制、中断管理、DMA传送时总线控制权外,还必须解决多处理器对系统总线的争用问题和处理器之间的通信问题。因为多个处理器通过公共系统总线共享存储器和I/O设备,所以必须增加相应的逻辑电路,以确保每次只有一个处理器占用系统总线。为了使一个处理器能够把任务分配给另一个处理器或者从另一个取回执行结果,就必须提供一种明确的方法来解决两个处理器之间的通信。多处理器系统可以有效地提高整个系统的性能。

8086/8088的最大工作模式就是专门为实现多处理器系统而设计的。

IBMPC系列机系统中的微处理器工作于最大工作模式,系统中配置了一个作为协处理的数字数据处理器8087、以提高系统数据处理的能力。

为了满足多处理器系统的需求,又不增加引脚个数,在最大模式下的8086/8088采用了对控制引脚译码的方法以产生更多控制信号。CPU有8个控制引脚且各自有独立的意义,经过分组译码后产生具体控制信号。CPU的8个控制引脚24~31的功能定义如下。

1.QS1,QS0(输出24、25脚)指令队列状态输出线。它们用来提供8086/8088内部指令队列的状态。8086/8088内部在执行当前指令的同时,从存储器预先取出后面的指令,并将其放在指令队列中,QS1和QS0便提供指令队列的状态信息,以便提供外部逻辑跟踪8086/8088内部指令序列。QS1和QS0表示的状态情况如表2-5所示。外部逻辑通过监视总线状态和队列状态,可以模拟CPU的指令执行过程并确定当前正在执行哪一条指令。有了这种功能,8086/8088才能告诉协处理器何时准备执行指令。在PC中,这两条线与8087协处理器的QS1和QS0相连。2./S2,/S1,/S0(输出,三态,26、27、28脚)状态信号输出线,这3位状态的组合表示CPU当前总线周期的操作类型。8288总线控制器接收这3位状态信息,产生访问存储器和I/O端口的控制信号及对8282.8286的控制信号。如表2-6所示为这3位状态信号的编码和由8288产生的对应信号。

3./LOCK(输出,三态29)总线锁定信号,低电平有效。CPU输出此信号表示不允许总线上的主控设备占用总线。该信号由系统指令前缀LOCK使其有效,并维持到下一条指令执行完毕为止。此外,CPUINTR引脚上的中断请求也会使LOCK引脚从第一个INTA脉冲开始直至第二个INTA脉冲结束保持低电平。这样就保证在中断响应周期之后,其他主控设备才能占用总线。4./RQ//GT1,/RQ//GT0(输入/输出30、31)

在最大模式下有两对总线输入输出请求和应答线,请求和应答是共用一条线都是低电平有效,在最小模式下只有一对HOLD和HLDA

这两条引脚都是双向的,低电平有效,用于输入总线请求信号和输出总线授权信号,/RQ//GT0优先级高于/RQ//GT1。主要用于不同处理器之间连接控制用。在IBMPC系列机系统中,把CPU的/RQ//GT1引脚接至8087协处理器的/RQ//GT0端,这样8087就可根据其指令的执行情况,用这条线向8088发出总线请求信号,以便能够控制总线,当8088通过这条线向8087发出总线授权信号后,8087就获得了对总线的控制权。当8087用完总线后,又通过此线向8088发出释放总线控制权的控制信号,8088在下一个时钟周期开始,便重新获得对总线的控制权。在IMBPC系列机系统中,把CPU的/RQ//GT0引脚接至+5V,即使其处于无效状态。最大工作模式和最小工作模式系统之间的主要区别是增加了一个控制信号转换电路——Intel8288总线控制器。8288根据/S2,/S1和/S0状态组合产生相应的存储器或I/O读写命令和总线控制命令信号,用于控制数据传送以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论