1、第2章 8086微处理器及其系统 习题解答1. 8086 CPU 由哪两部分构成,它们的主要功能是什么?在执行指令期间,EU 能直接访问存储器吗,为什么?【解】8086CPU由执行部件(EU)和总线接口部件(BIU)两部分组成。执行部件由内部寄存器组、算术逻辑运算单元(ALU)与标志寄存器(FR)及内部控制逻辑等三部分组成。寄存器用于存储操作数和中间结果;算术逻辑单元完成16位或8位算术逻辑运算,运算结果送上ALU内部数据总线,同时在标志寄存器中建立相应的标志;内部控制逻辑电路的主要功能是从指令队列缓冲器中取出指令,对指令进行译码,并产生各种控制信号,控制各部件的协同工作以完成指令的执行过程。
2、总线接口部件(BIU)负责CPU与存储器、I/O设备之间传送数据、地址、状态及控制信息。每当EU部件要执行一条指令时,它就从指令队列头部取出指令,后续指令自动向前推进。EU要花几个时钟周期执行指令,指令执行中若需要访问内存或I/O设备,EU就向BIU申请总线周期,若BIU总线空闲,则立即响应,若BIU正在取一条指令,则待取指令操作完成后再响应EU的总线请求。2. 8086CPU与传统的计算机相比在执行指令方面有什么不同?这样的设计思想有什么优点?【解】8086 CPU与传统的计算机相比增加了指令队列缓冲器,从而实现了执行部件(EU)与总线接口(BIU)部件的并行工作,因而提高了8086系统的效
3、率。3. 8086 CPU 中有哪些寄存器,各有什么用途?【解】8086共有8个16位的内部寄存器,分为两组: 通用数据寄存器。四个通用数据寄存器AX、BX、CX、DX均可用作16位寄存器也可用作8位寄存器。用作8位寄存器时分别记为AH、AL、BH、BL、CH、CL、DH、DL。AX(AH、AL)累加器。有些指令约定以AX(或AL)为源或目的寄存器。实际上大多数情况下,8086的所有通用寄存器均可充当累加器。BX(BH、BL)基址寄存器。BX可用作间接寻址的地址寄存器和基地址寄存器,BH、BL可用作8位通用数据寄存器。CX(CH、CL)计数寄存器。CX在循环和串操作中充当计数器,指令执行后CX
4、内容自动修改,因此称为计数寄存器。DX(DH、DL)数据寄存器。除用作通用寄存器外,在I/O指令中可用作端口地址寄存器,乘除指令中用作辅助累加器。 指针和变址寄存器。BP(Basic Pointer Register)基址指针寄存器。SP(Stack Pointer Register)堆栈指针寄存器。SI(Source Index Register)源变址寄存器。DI(Destination Index Register)目的变址寄存器。BP、SP称为指针寄存器,用来指示相对于段起始地址的偏移量。BP和SP一般用于堆栈段。SI、DI称为变址寄存器,可用作间接寻址、变址寻址和基址变址寻址的寄存器
5、。SI一般用于数据段,DI一般用于数据段或附加段。标志寄存器(FR):是一个16位寄存器,算术逻辑单元进行算术逻辑运算后,在标志寄存器中建立相应的标志。段地址寄存器(CS、DS、SS、ES)。用于存放段地址,根据其主要用途,分为代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS、附加段寄存器ES。代码段寄存器CS:代码段是存放程序代码的存储区域,代码段寄存器用来存放代码段存储区域的起始地址。数据段寄存器DS:数据段是存放程序中所使用的数据的存储区域,数据段寄存器用来存放程序的数据存储区的起始地址。堆栈段寄存器SS:堆栈段寄存器用来存放堆栈存储区的起始地址。由堆栈段寄存器SS与堆栈指针寄存器S
6、P来确定当前堆栈指令的操作地址。附加段寄存器ES:附加段是为某些字符串操作指令存放目的操作数而设置的一个附加的数据段,附加段寄存器用来存放该附加数据段存储区域的起始地址。指令指针寄存器(IP)。又称程序计数器,是16位寄存器。IP中存放当前将要执行的指令的有效地址,每取出一条指令IP自动增量,即指向了下一条指令。指令队列缓冲器:是一个与CPU速度相匹配的高速缓冲寄存器。在EU执行指令的同时,BIU可以从内存中取出下一条或下几条指令放到指令缓冲器中,EU执行完一条指令后,可以立即从指令缓冲器中执行下一条指令。4. 状态标志与控制标志有何不同,程序中是怎样利用这两类标志的?标志寄存器有哪些标志位,
7、各在什么情况下置位?【解】状态标志根据算术逻辑运算结果由硬件自动设定,它们反映运算结果的某些特征或状态,可作为后继操作(如条件转移)的判断依据。控制标志由用户通过指令来设定,它们可控制机器或程序的某些运行过程。标志寄存器的内容如下:1514131211109876543210OFDFIFTFSFZF-AF-PF-CFCF(Carry Flag)进位标志,反映在运算结果的最高位有无进位或借位。如果运算结果的最高位产生了进位(加法)或借位(减法)则CF=1,否则CF=0。PF(Parity Flag)奇偶标志,反映运算结果中“1”的个数的奇偶性,主要用于判断数据传送过程中是否出错。若结果的低8位中
8、有偶数个“1”则PF=1,否则PF=0。AF(Auxiliary Carry Flag)辅助进位标志,又称半进位标志。加减运算时,若D3向D4产生了进位或借位则AF=1,否则AF=0。在BCD码运算时,该标志用于十进制调整。ZF(Zero Flag)零标志,反映运算结果是否为0。 若结果为零则ZF=1,否则ZF=0。SF(Sign Flag)符号标志,反映运算结果最高位即符号位的状态。如果运算结果的最高位为则SF=1(对带符号数即为负数),否则SF=0(对带符号数即为正数)。OF(Overflow Flag)溢出标志,反映运算结果是否超出了带符号数的表数范围。若超出了机器的表数的范围,即为产生
9、溢出,则OF=1,否则OF=0。DF(Direction Flag)方向标志,用于串处理指令中控制串处理的方向。当DF=1时,每次操作后变址寄存器SI、DI自动减量,因此处理方向是由高地址向低地址方向进行。当DF=0,则SI、DI自动增量,处理方向由低地址向高地址方向进行。该标志由方向控制指令STD或CLD设置或清除。IF(Interrupt Flag)中断允许标志,用于控制CPU是否允许响应可屏蔽中断请求。IF=1为允许响应可屏蔽中断请求,IF=0则禁止响应可屏蔽中断请求。该标志可由中断控制指令STI或CLI设置或清除。TF(Trap Flag)陷阱标志,用于单步操作。TF=1时,每执行一条
10、用户程序指令后自动产生陷阱,进入系统的单步中断处理程序。TF=0时,用户程序会连续不断地执行,不会产生单步中断。5. 求出下列运算后各个标志的状态,并说明进位标志和溢出标志的区别。 (1) 1278H + 3469H (2) 54E3H - 27A0H (3) 3881H + 3597H (4) 01E3H - 01E3H【解】CF进位标志,反映在运算结果的最高位有无进位或借位。OF溢出标志,反映运算结果是否超出了带符号数的表数范围。机器实际处理时判断是否溢出的方法是根据最高位的进位(CF)与次高位的进位是否相同来确定,若两者不相同则OF=1(表示有溢出),否则OF=0(表示无溢出)。(1)0
11、001 0010 0111 10000011 0100 0110 1001 0100 0110 1110 0001运算后各个标志的状态:OFDFIFTFSFZF-AF-PF-CF000110(2) 0101 0100 1110 0011 0010 0111 1010 0000 0010 1100 0100 0011运算后各个标志的状态:OFDFIFTFSFZF-AF-PF-CF000000(3)0011 1000 1000 0001 0011 0101 1001 0111 0110 1110 0001 1000运算后各个标志的状态:OFDFIFTFSFZF-AF-PF-CF000010(4)0
12、000 0001 1110 0011 0000 0001 1110 0011 0000 0000 0000 0000运算后各个标志的状态:OFDFIFTFSFZF-AF-PF-CF0010106. 8086 CPU 中存储器的逻辑地址和物理地址之间有什么关系,各有多少值?【解】物理地址为某一个存储单元的实际地址,对于8086它是一个20位的地址。物理地址从00000HFFFFFH变化,对应1MB的空间。逻辑地址,又称偏移地址或有效地址,即对段首的偏移量。偏移地址从0000HFFFFH变化,对应64KB的空间。物理地址的获得方法是:将段寄存器的内容左移4位(即16),与逻辑地址相加,得到20位物
13、理地址。根据寻址方式的不同,偏移地址可以来自程序计数器(IP)或其它寄存器。7. 8086CPU使用的存储器为什么要分段,怎样分段?为什么要设置段寄存器,有几个段寄存器?各段寄存器有什么意义?【解】8086 CPU内部数据结构是16位的,即所有的寄存器都是16位的,而外部寻址空间为1MB,即需要20位地址线。为了能用内部寄存器中的16位地址来寻址1MB空间,8086将1MB空间以16字节为一个内存节,共分成64K个节。节的起始地址分别为00000H、00010H、00020H、FFFF0H,称为段基址。节的起始地址的后4位二进制数为全0,称为节的段地址。用于存放段地址的寄存器称为段寄存器,根据
14、其主要用途,分为代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS、附加段寄存器ES。代码段寄存器CS:用来存放代码段存储区域的起始地址。数据段寄存器DS:数存放程序的数据存储区的起始地址。堆栈段寄存器SS:用来存放堆栈存储区的起始地址。由堆栈段寄存器SS与堆栈指针寄存器SP来确定当前堆栈指令的操作地址。附加段寄存器ES:附加段是为某些字符串操作指令存放目的操作数而设置的一个附加的数据段,附加段寄存器用来存放该附加数据段存储区域的起始地址。8. 简述A0与在8086系统中的应用。【解】8086系统中将1MB存储空间分成两个512KB的物理存储体。一个存储体由偶数地址组成,另一个存储体由奇数地
15、址组成。用A0位来区分两个存储体。用和A0的组合来选择存储体,其组合关系及操作情况如下: (1) 从偶地址读写一个字节( A010)。AD15AD8上的数据被忽略,字节内容通过AD7AD0传送。 (2) 从奇地址读写一个字节( A001)。在AD15AD8上传送的数据有效,AD7AD0上数据被忽略。 (3) 从偶地址开始读写一个字( A000)。在AD15AD0上传送的数据同时有效。(4) 从奇地址开始读写一个字。第一个总线周期 A001,从奇地址读写低字节,在AD15AD8上传送的数据有效。第二个总线周期 A010,从偶地址读写高字节,在AD7AD0上传送的数据有效。9. 8086系统中为什
16、么要采用地址锁存器8282?采用什么方法从分时复用地址/数据线中将数据和地址信号分离出来?【解】8086地址总线与数据总线是分时复用的,高8位数据有效信号也是复用信号。在T1状态,总线上输出20位地址信号及信号,而在T2T4状态,总线用于数据传送,信号也失效。为了正确地交换数据,地址信号及信号在T2T4期间必须保持,所以需要设一组地址锁存器(3片8282),用于锁存地址及信号。在T1状态,CPU送出地址锁存允许信号ALE,将ALE接向8282的选通输入端STB。当ALE1时,8282输出跟随输入变化,用ALE的下降沿将总线上已经稳定的地址信号锁入8282。10. 8086和8088 CPU的主
17、要区别是什么?【解】8088的内部结构和指令功能与8086完全相同,只是为了和原有的8位微处理器外围芯片兼容,其外部数据总线是8位的。11. 8086系统中的存储器采用什么结构?如何与地址、数据线连接?【解】8086系统中将1MB存储空间分成两个512KB的物理存储体。一个存储体由偶数地址组成,另一个存储体由奇数地址组成。用A0位来区分两个存储体。12. 8086的I/O端口寻址范围是多少?什么是I/O端口与内存分别独立编址?【解】8086的I/O端口使用16位地址A15A0,I/O端口地址范围为0000HFFFFH,可寻址空间为64KB。I/O端口与内存分别独立编址时,指令访问的是I/O端口
18、还是内存,由地址信息无法区分,由M/信号区分是I/O端口的寻址与内存寻址 。13. 在对存储器和I/O设备读写时,要用到(IO读)、(IO写)、(存储器读)、(存储器写)信号,这些信号的作用是什么?它们在最小模式时可用怎样的电路得到?请画出示意图。【解】:该信号有效时,对IO端口执行读操作:该信号有效时,对IO端口执行写操作:该信号有效时,对存储器执行读操作:该信号有效时,对存储器执行写操作在最小模式时可分别用以下电路得到上述信号:1M/1M/1M/1M/14. 什么是基地址和位移量,它们之间有何联系?【解】8086 CPU内部数据结构是16位的,而外部寻址空间为1MB。为了能用内部寄存器中的
19、16位地址来寻址1MB空间,8086将1MB空间以16字节为一个内存节(Paragraph),共分成64K个节。节的起始地址称为段基址。偏移地址是存储地址对段首的偏移量。偏移地址从0000HFFFFH变化,对应64KB的空间。它们之间有何联系:物理地址基地址16位移量。15. 设CS=1200H,IP=0FF00H,此时指令的物理地址是多少?指向这一物理地址的CS和IP的值是惟一的吗?【解】指令的物理地址:12000H0FF00H21F00H指向这一物理地址的CS和IP的值不是惟一的。16. 若CS=1000H,指出当前代码段可寻址的存储空间的大小和地址范围。【解】当前代码段可寻址的存储空间的
20、大小:64KB当前代码段可寻址的存储空间的地址范围:10000H1FFFFH17. 简述8086单CPU和多CPU系统各自主要特点,并说明有何差别。【解】单CPU系统中只有一个微处理器8086,所有总线控制信号由它产生,系统中总线控制逻辑信号可减少到最小。多CPU系统中包括两个以上处理器,其中一个为8086作为主处理器,其它处理器作为协处理器,一般多用于复杂的大中型系统。与8086协同工作的协处理器有8087、8089两种,分别为数学协处理器和输入/输出协处理器。配置协处理器的系统,主处理器不用处理费时的复杂运算和I/O操作,因此可大大提高主处理器的运行效率。18. 时钟周期、T状态、总线周期
21、、指令周期的定义是什么,什么情况下会出现空闲周期?【解】计算机是由一串脉冲控制进行工作的。这一串脉冲称为计算机的时钟,每个脉冲的时间称为一个时钟周期,每个脉冲称为一个时钟脉冲或一个T状态。若干个时钟脉冲完成一个基本操作。一种基本操作称为一个总线周期。执行一条指令所需要的时间称为指令周期19. 8086 CPU 读/写总线周期包含几个时钟周期,什么情况下需要插入TW等待周期,插入TW的数量取决于什么因素 【解】8086 CPU 读/写总线周期包含4个时钟周期。读总线周期:在T3状态内存或I/O端口将数据送上数据总线。CPU准备读入数据。在T3的前沿(下降沿),CPU查询READY引脚,若内存或外
22、设工作速度较慢,来不及在基本总线周期内完成数据传送工作,则应通过逻辑电路在T3前沿之前产生READY低电平信号,T3前沿若查到READY为低电平,则在T3后自动插入一个等待状态TW,在TW前沿继续查询READY信号,若READY仍为低电平,则继续插入TW,直到READY上升为高电平,则等待状态结束,进入T4状态。写总线周期:在T3状态中,T2状态有效的信号继续保持有效,继续向外部写数据。在T3的下降沿查询READY,若内存或I/O端口在标准总线周期内来不及接收数据,则应通过逻辑电路在T3前沿之前产生READY低电平信号。CPU查到READY为低,则在T3之后插入一个TW,并在TW前沿继续查询R
23、EADY,直到READY上升为高电平,则结束等待进入T4状态。20. 8086 CPU 复位后,有哪些特征?8086 系统的起动程序如何去找?【解】8086 CPU 复位后:所有内部寄存器、标志寄存器IR及ES、SS、DS段寄存器清0,指令队列缓冲器清空,指令指针寄存器(IP)清0,CS被置为FFFFH;复位时,所有三态输出总线变为高阻状态,这些三态总线包括:AD15AD0,A19/S6A16/S3,/S7,(M/),(DT/),(), 等。ALE、HLDA、QS0、QS1等信号降为低电平, 、等信号上升为高电平。8086 系统的起动程序从CS16+IP即FFFF0H地址开始执行。21.808
24、6 系统在最小模式时应该怎样配置?试画出这种配置并标出主要信号的连接关系。【解】8086 系统在最小模式时的典型配置:一片8284A时钟发生器产生系统所需要的时钟信号CLK,同时对外部READY信号和系统复位信号RESET进行同步,其输出送向8086应相引脚。三片8282(或74LS373)地址锁存器用于20位地址和信号锁存,使得整个总线读写周期期间地址信号始终有效,以支持8086CPU地址/数据总线分时复用的工作方式。两片8286总线驱动器(又称总线收发器或总线驱动器)。当系统所连存储器和外设较多时,为了提高数据总线的驱动能力,可以接入8286芯片。该模式的配置图见教材。22. 画出最小模式时读存储器或I/O设备的总线周期时序。【解】8086 最小模式下的读周期时序见教材。7