2.3 习 题 解 答
1. 选择题:
答案:(1)E (2)A (3)D (4)C
2. 填空题:
答案:
a) EU,16,BIU,BIU,20 b) 20,4,状态
c) 0FFFF0H,ROM,跳转 d) 2,512K,奇地址, BHE e) 64K,16 f) 逻辑地址 g) 空闲
h) 总线请求(输入)/总线请求允许(输出),RQ/GT0 ,RQ/GT1
3. 8086/8088 CPU的地址总线有多少位?其寻址范围是多少?
答:8086/8088 CPU的地址总线共20位,最大可寻址1MB空间。
4. 什么是总线?一般微计算机中有哪些总线?
答:总线是微机系统之间、系统各模块之间或模块内部以及芯片内部各部分之间用来传送信息的公共信息通路,是计算机传送信息的一组导线,它将各部件连接成一个整体。
总线有多种分类方法,按总线在微机中所处位置的不同(或按总线上信息传送范围的不同)来看,微机中包括片内总线、片间总线、系统内总线和系统外总线四级总线。
5. 8086/8088 CPU分为哪两个部分?各部分主要由什么组成?
答:8086/8088 CPU分为总线接口部件(BIU)和执行部件(EU)两个部分。其中: BIU包括:4个16位的段地址寄存器(CS、DS、SS、ES); 1个16位的指令指针寄存器IP; 1个20位的地址加法器; 指令队列寄存器; 内部寄存器;
输入输出总线控制逻辑;
EU包括: 4个16位的通用数据寄存器(AX、BX、CX、DX); 4个16位的专用寄存器(BP、SP、SI、DI); 1个16位的标志寄存器FR;
6. 什么叫指令队列?8086/8088 CPU中指令队列有什么作用?其长度分别是多少字节?
答:指令队列是用来暂存指令的一组寄存器,按“先进先出”原则读写。 在8086/8088 CPU中,只要指令队列未填满,BIU就从外部存储器取指令并放入指令队列中;另一方面,只要指令队列中不空,EU就可将指令队列中已有的指令取出执行,这样BIU和EU按并行方式重叠操作,大大提高了CPU的利用率,也降低了CPU对存储器、I/O端口存取速度的要求。
8086CPU中的指令队列缓冲器长度为6个字节,而8088CPU只有4个字节。
7. 8086/8088 CPU中有几个通用寄存器?有几个变址寄存器?有几个指针寄存器?通常哪几个寄存器亦可作为地址寄存器使用?
答:8086/8088 CPU中共有:
8个16位的通用寄存器AX、BX、CX、DX 、BP、SP、SI、DI; 2个变址寄存器SI、DI; 2个指针寄存器BP、SP;
其中BX、BP、SI、DI亦可作地址寄存器。
8. 8086/8088 CPU中有哪些标志位?它们的含义和作用如何?
答:8086/8088 CPU中共有9个标志位,其中DF、IF和TF为控制标志位,其余6个为状态标志位。它们的含义和作用如下所示:
CF(Carry Flag)进位标志:若算术运算的结果产生了进位或借位(对字节操作最
高位是D7位;对字操作最高位是D15位),则CF=1,否则CF=0。
PF(Parity/Even Flag)奇偶标志:如果运算结果中含有偶数个1,则PF=1,否则
PF=0。此标志位主要用于数据通信中,检测数据传送有无出错。
AF(Auxiliary Carry Flag)辅助进位标志:用于反映一个字节(字的低字节)的低
4位向高4位有无进位(借位)的情况,有进(借)位时,AF=1,否则AF=0。这个标志位主要用于实现BCD码算术运算所需的二-十进制调整之用。 ZF(Zero Flag)零标志:若运算结果为0,此标志为1;否则ZF=0。
SF(Sign Flag)符号标志:因为补码运算的最高位是符号位,所以它和运算结果的
最高位(字节操作是D7位,字操作是D15位)状态相同。当运算结果为负时,SF=1;否则SF=0。
OF(Overflow Flag)溢出标志:在带符号数的加或减运算中结果超出 8位或16位
符号数所能表示的数值范围(-128~127或-32768~+32767)时,产生溢出使OF=1,否则OF=0。
DF(Direction Flag)方向标志位:此标志位用以控制串操作指令地址指针的步进
方向。每执行一条串操作指令,对地址要进行一次调整(对字节操作为加1或减1,对字操作为加2或减2)。方向标志DF决定地址是增量还是减量。若DF=1,串地址为减量;DF=0,则为增量。
IF(Interrupt Enable Flag)中断允许标志位:也称为开中断标志位。若使IF=1,
则CPU允许接受外部来的可屏蔽中断源发出的中断请求;若使IF=0,则表示CPU不响应此中所请求。IF对非屏蔽中断及CPU内部中断请求均不起作用。 TF(Trap Flag)陷阱标志位:也称为跟踪标志位。若TF=1,则 CPU处于单步执
行指令的工作方式。在这种工作方式下,CPU每执行完一条指令就自动地产生一次类型为1的内部中断,可以借此检查这条指令的执行情况。
9. 什么是堆栈?它有什么用途?堆栈指针的作用是什么?举例说明堆栈的操作。
答:堆栈是一个按照后进先出(LIFO)的原则存取数据的存储区域。堆栈的作用是为了在调用子程序(或转向中断服务程序)时,把断点及有关的寄存器、标志位及时正确地保存下来,并保证逐次正确返回。利用堆栈指针SP可以实现对栈区的自动管理。
例如:要把AX寄存器中的内容压入堆栈,用入栈指令PUSH AX(设SP原值为1000H),其操作过程如下所示:
第一步:先把SP-l→SP,然后把AH(高位字节)送入SP所指单元(即SP=1FFFH); 第二步:再次使SP-1→SP,把AL(低位字节)送至SP所指单元(此时SP=1FFEH); 数据出栈操作与入栈过程正相反:弹出时,先把AL内容弹出,然后修改SP+1→SP;再把AH内容弹出,再修改SP+1→SP。
10. 对于由8086/8088 CPU组成的系统,堆栈的位置如何确立?堆栈的首址(即SS中的值)是不是栈底?为什么?
答:8086/8088系统中堆栈的位置由SS和SP初始化后确立:其中(SS)*16决定了堆栈段起始单元的地址,即堆栈段首址;(SS)*16+(SP初值)决定了堆栈段最后一个单元的地址,即栈底;(SS)*16+(SP现值)决定了堆栈段当前可用单元的地址,即栈顶。
显然,堆栈首址并不是栈低。一般来说,在堆栈所在的内存区内,栈底为高地址端。堆栈初始化后,未压入数据时,栈底与栈顶是重合的。当堆栈压入数据后,栈顶地址总是小于栈底地址,位于低地址端。
11. Intel 8086与8088有何区别?
答:8086与8088的区别主要表现在以下几个方面:
第一、8086的指令队列可以容纳6个字节,每个总线周期在存储器中取出2个字节指令代码填入队列。而8088只能容纳4个字节,且每个总线周期只能取出1个字节指令代码。
第二、8086外部数据总线宽度为16位,8088外部数据总线宽度只有8位。注意:8086和8088外部数据总线的宽度不同将导致扩展主存储器及输入/输出接口时系统地址线和数据线连接方式的不同。
第三、其他不同的引脚定义:(1)AD15~AD0,在8086中为地址/数据复用,而在8088中AD15~AD8改为A15~A8只作地址线用;(2)34、28号引脚定义不同。
12. 8086/8088 CPU工作在最小模式时:当CPU访问存储器时,要利用哪些信号?当CPU访问外设接口时,要利用哪些信号?当HOLD有效并得到响应时,CPU的哪些信号被置成高阻?
答:8086/8088 CPU工作在最小模式时,若访问存储器,需用到以下信号:M/IO、ALE、 DT/R、DEN、READY、BHE、WR、RD、AD0~AD15、A19/S6~A16/S3。若访问外设,需用到以下信号:M/IO、ALE、 DT/R、DEN、READY、WR、RD、AD0~AD15。
当HOLD有效并得到响应时,8086/8088 CPU的所有具有三态的输出线将处于浮空状态,即被置成高阻,8086/8088 CPU放弃对总线的控制权。这些具有三态的输出线包括地址/数据总线和控制总线中的大部分如M/IO、DT/R、DEN、WR、RD、INTA等。
13. 当8086/8088 CPU工作在最大模式时,S2、S1、S0可以表示CPU的哪些状态?RQ/GT信号的作用是什么?
答:8086/8088 CPU工作在最大模式时,S2、S1、S0状态信号经8288总线控制器译码产生对存储器、I/O端口访问所需的控制信号。
状态输入 S2 S1 S0 CPU总线周期 中断响应 读I/O端口 写I/O端口 停机 8288输出命令 INTA IORC 0 0 0 0 0 0 1 1 0 1 0 1 IOWC,AIOWC 无 1 1 1 1 0 0 1 1 0 1 0 1 取指令 读存储器 写存储器 无 MRDC MRDC MWTC, AMWC 无 总线请求/允许信号线RQ/GT0和RQ/GT1是为8086/8088和其它处理器(如8087/8089)使用总线而提供的一种仲裁机制。
14. 试指出下列运算后的各个状态标志,并说明进位标志和溢出标志的区别:
(1)1278H+3469H
答:CF=0 AF=1 ZF=0 SF=0 OF=0 PF=1 (2)54E3H-27A0H
答:CF=0 AF=0 ZF=0 SF=0 OF=0 PF=0 (3)3881H+3597H
答:CF=0 AF=0 ZF=0 SF=0 OF=0 PF=1 (4)01E3H-01E3H
答:CF=0 AF=0 ZF=1 SF=0 OF=0 PF=1
其中,进位标志CF用于判别无符号数运算是否超出数的表示范围,而溢出标志OF用于判别带符号数运算是否超出数的表示范围。
奇偶标志PF只能判断结果低8位中“1”的个数为奇数还是偶数。
15. 什么是逻辑地址?什么是物理地址?它们之间有什么联系?各用在何处?
答:逻辑地址由两个16位的部分即段基址和偏移量组成,一般在程序中出现的地址都表示为逻辑地址形式;物理地址是一个20位的地址,它是唯一能代表存储空间每个字节单元的地址,一般只出现在地址总线上。
由于8086/8088CPU中的寄存器只有16位长,所以程序不能直接存放20位的物理地址,而必须借助逻辑地址,即用两个16位的寄存器来表示物理地址。他们之间的关系是:物理地址=段基址*16+偏移量;另外,一个物理地址可对应多个逻辑地址。
16. 什么是段基值?什么是位移量?它们之间有何联系?
答:段基址即段起始地址,它的高16位地址存放在段寄存器中,称之为段基值(低4位一般为0)。存储器单元所在的位置距离段起始地址的偏移量称之为位移量。程序中一个存储单元的实际地址(即物理地址)是由这两部分共同表示的。
17. 若CS为0A000H,试说明现行代码段可寻址物理空间的范围。
答: 因为8086系统中可寻址的最大逻辑段长度为64K,所以当CS为0A000H,即段基址为CS*16=0A0000H时,现行代码段可寻址物理空间的范围为:0A0000H ~ 0AFFFFH。
18. 设现行数据段位于存储器0B0000H~0BFFFFH单元,DS段寄存器内容为多少?
答: DS段寄存器内容为0B000H。
19. 8086/8088 CPU使用的存储器为什么要分段?怎么分段?
答:在8086/8088CPU中,ALU的运算是16位的,有关的地址寄存器如SP、IP以及BP、SI、DI等都是16位的,因而对地址的运算也只能是16位。也就是说对8086/8088而