如果需要访问存储器或者I/O设备,那么EU会向BIU发出访问总线的请求,以完成访问存储器或者I/O接口的操作。如果此时BIU正好处于空闲状态,那么,会立即响应EU的总线请求;但如果BIU正在将某个指令字节取到指令队列中,那么,BIU将首先完成这个取指令操作,然后再去响应EU发出的访问总线的请求。
③ 当指令队列已满,而且EU又没有总线访问时,BIU便进入空闲状态。 5
④ 在执行转移指令、调用指令和返回指令时,下面要执行的指令就不是在程序中紧接 着的那条指令了,而BIU 往指令队列装入指令时,总是按顺序进行的。在这种情况下,指 令队列中已经装入的指令就没有用了,会被自动消除。随后,BIU 会往指令队列中装入另一
个程序段中的指令。 3.答:
地址信号是CPU 发送给内存或I/O 设备的,所以地址线是单向的;
数据信号可以从CPU 发送给内存或I/O 设备,也可以从内存或I/O 设备发送给CPU, 故而数据线是双向的。 4.答:
8086CPU 中有14 个寄存器。它们是:4 个16 位的通用寄存器:AX、BX、CX、DX 和 8 个8 位的通用寄存器:AH、AL、BH、BL、CH、CL、DH、DL;指针和变址寄存器SP、 BP、 SI、DI;4 个16 位的段寄存器CS、DS、SS 和ES;标志寄存器FR;指令指针寄存器 IP。 功能略。
5.将十六进制数5678H和以下各数相加,试求叫法运算的结果及进算后标志寄存器中6个状态标志的值,用十六进制数表示运算结果。 2分 1)7834H 2)1234H 3)8765H 答:
(1)加法运算的结果为:CEACH;CF=0,PF=1,AF=0,ZF=0,SF=1,OF=1; (2)加法运算的结果为:68ACH;CF=0,PF=1,AF=0,ZF=0,SF=0,OF=0; (3)加法运算的结果为:DDDDH;CF=0,PF=1,AF=0,ZF=0,SF=1,OF=0。
6.8086CPU可寻址的存储器地址范围是多少?可寻址的I/O端口地址范围是多少?2分 答:
8086CPU 可寻址的存储器地址范围是00000H~FFFFFH; 可寻址的I/O 端口地址范围是0000H~FFFFH。 7.答:
由于8086CPU 提供20 位地址,但8086 中可用来存放地址的寄存器,如IP、SP、BX、 SI 等都是16 位的,只能直接寻址64KB。为了寻址1MB 存储空间,8086CPU 采用了典型的 存储器分段技术,即将整个存储器空间分为许多逻辑段,每个逻辑段的容量小于或等于64KB。 分段后,对存储器的寻址操作不再直接用20 位的物理地址,而是采用段地址加段内偏移地 址的二级寻址方式。 8.答:
将AH的内容送存储单元的操作过程中:M / IO ?1,WR ??0,RD ?1,DT / R ?1; 将I/O 端口的内容送AL的操作过程中:M / IO ??0,WR ?1,RD ??0,DT / R ??0。 9.答:
BHE A0 有效的数据引脚 操 作 0 0
6
AD15~AD0(一个总线周期同时访问奇体和偶 体,从奇地址单元读/写字数据的高8 位,从偶地 址单元读/写字数据的低8 位) 从偶地址读/写一个 字 6
1 0 AD7~AD0
从偶地址读/写一个 字节
0 1 AD15~AD8 从奇地址读/写一个 字节 0 1 1 0
AD15~AD8(第一个总线周期从奇字数据的低8 位)
AD7~AD0(第二个总线周期从偶地址单元读/写 字数据的高8 位) 从奇地址读/写一个 字
10.简述8086系统复位后各寄存器的状态。 2分 答:
8086 系统复位后,指令指针(IP)为0000H;CS 寄存器为FFFFH,其他寄存器为0000H; 指令队列清空。
11. 简述8086系统中为什么一定要有地址锁存器?需要所存哪些信息? 2分 答:
8086 的A19/S6~A16/S3 和AD15~AD0 是复用信号,需要地址锁存器将地址信息保存 起来,为外接存储器或外设提供地址信息。 需要锁存的信号是:地址信号及BHE 信号。
12.8086CPU基本的总线周期包括几个时钟周期? 1分 答:
8086CPU 一个基本的总线周期包含4 个时钟周期:T1、T2、T3 和T4 。
在T1 状态,M/ IO有效,指示CPU 访问的是存储器还是外设,之后CPU 往多路复用
总线上发出地址信息,以指出要寻址的存储单元或外设端口的地址。在T1 状态,CPU 还必 须在ALE 引脚上输出一个正脉冲作为地址锁存信号。BHE信号也在T1 状态送出,它用来 表示数据传送的字宽。
在T2 状态,CPU 从总线上撤销地址,使总线的低16 位浮空,置成高阻状态,为传输 数据作准备。总线的最高4 位(A19~A16)用来输出本总线周期的状态信息。读信号RD或 写信号WR在T2 状态变为有效,指示CPU 将进行哪种操作(读或写)。
在T3 状态,多路总线的高4 位继续提供状态信息,而多路总线的低16 位上出现由CPU 读出的数据或者CPU 从存储器或端口写入的数据。
在T4 状态和前一个状态的交界处,CPU 对数据总线进行采样,获得数据,总线周期结 束。
13.什么情况下需要插入TW周期?应该插入多少个TW取决于什么因素? 2分
7
答:
在有些情况下,外设或存储器速度较慢,不能及时地配合CPU 传送数据。这时,外设 或存储器会通过“READY”信号线在T3 状态启动之前向CPU 发一个“数据未准备好”信 号,于是CPU 会在T3 之后插入1 个或多个附加的时钟周期TW。取决与外设或存储器速度。 14.答:
两种操作时序的不同之处发生在T1 和T2 状态。
① 在T1状态,读周期:DT/R应输出低电平;写周期:DT/R应输出高电平。
② 在T2 状态,读周期:RD有效,而WR无效,AD15~AD0 为高阻态;写周期:RD
变为无效,而写信号WR变为有效,AD15~AD0 在地址撤销之后立即送出要写入存储器或 外设端口的数据。 7
15.答:
在最小模式下,读信号RD、ALE 和DT/R、DEN等信号直接由CPU 给出; 在最大模式下,总线控制器8288 根据 2 1 S ,S 和
0 S 状态信号产生读信号MRDC和IORC,
ALE 和DT/R、DEN 也是由8288 发出的,而且DEN 信号的极性与CPU 在最小模式下发 出的DEN信号正好相反。 8
第4章 习题答案
1.什么叫寻址方式?8086CPU支持哪几种寻址方式? 2分 答:
指令中关于如何求出操作数有效地址的方法称为寻址方式。
8086CPU支持多种寻址方式,根据操作数的类型及来源大致分为3类:数据寻址、转移地址寻址和I/O寻址。 2.答:
8086汇编指令可以采用7种基本的数据寻址方式:①立即寻址;②寄存器寻址;③直接寻址;④寄存器间接寻址;⑤寄存器相对寻址;⑥基址变址寻址;⑦相对基址变址寻址。 与存储器寻址方式(后5种)相比,寄存器寻址方式最快。
3.内存寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?如果要用某个段寄存器指出段地址,指令中应该如何表示? 2分 答:
如果指令中没有用前缀说明操作数存放在哪个段,则操作数默认存放在数据段。
8086系统允许操作数存放在代码段、堆栈段或附加段。此时,就需要在指令中利用前缀指明段超越。例如: MOV ES:[1225H],AX
4.在8086系统中,设DS=1000H,ES=2000H,SS=1200H,BX=0300H,SI=0200H,BP=0100H,VAR的偏移量为0600H,请指出下列指令的目标操作数的寻址方式,若目标操作数为存储器操作数,请计算它们的物理地址是多少? 2分
1)MOV BX,12 2)MOV [BX],12 3)MOV ES:[SI],AX 4)MOV VAR,8 5)MOV [BX][SI],AX 6)MOV 6[BP][SI],AL 7)MOV [100H],DX 8)MOV 6[BX],CX
8
9)MOV VAR+5,AX 答:
(1)寄存器寻址方式
(2)寄存器间接寻址方式,PA=10300H (3)寄存器间接寻址方式,PA=20200H (4)直接寻址方式,PA=10060H (5)基址变址寻址方式,PA=10500H (6)相对基址变址寻址方式,PA=12300H (7)直接寻址方式,PA=11000H
(8)__________寄存器相对寻址方式,PA=10306H (9)直接寻址方式,PA=10065H
5.判断指令对错。如果是错误的,请说明原因答。 2分 1)XCHG CS,AX ×
2)MOV [BX],[1000H] × 3)XCHG BX,IP × 4)PUSH CS √ 5)POP CS × 6)IN BX,DX √
7)MOV BYTE[BX],1000 × 8)MOV CS,[1000H] × 9)MOV BX,OFFSET VAR[SI] √ 10)MOV AX,[SI][DI] ×
11)MOV COUNT[BX][SI],ES:AX × 6.试述以下指令的区别。 2分
1)MOV AX,3000H 与 MOV AX,[3000H] 2)MOV AX,MEM 与 MOV AX,OFFSET MEM 3)MOV AX,MEM 与 LEA AX,MEM
4)JMP SHORT L1 与 JMP NEAR PTR L1 5)CMP DX,CX 与 SUB DX,CX
6)MOV [BP][SI],CL 与 MOV DS:[BP][SI],CL 答:
(1)源操作数的寻址方式不同。MOV AX,3000H指令的源操作数采用的是立即数寻址方式,MOV AX,[3000H]指令的源操作数采用的是直接寻址方式。 (2)指令执行后,AX的值不同。MOV AX,MEM指令执行后,AX得到的是MEM单元的内容,而MOV AX,OFFSET MEM指令执行后,AX得到的是MEM单元的地址。 (3)指令不同。MOV AX,MEMMOV AX,MEM指令执行后,AX得到的是MEM单元的内容,而LEA AX,MEM指令执行后,AX得到的是MEM单元的地址。
(4)转移的类型不同。JMP SHORT L1指令实现的是段内转移,而JMP NEAR PTR L1指令实现的是段间转移。
(5)指令的执行结果不同。CMP DX,CX指令执行后,DX的值不变,而SUB DX,CX指令执行后,DX的值是两寄存器值的差。
(6)操作数所在段不同。MOV [BP][SI],CL指令访问的是堆栈段的存储单元,而MOV DS:[BP][SI],CL指令访问的是数据段的存储单元。 7.答:
9
(1)MOV BYTE PTR [BP],200指令执行后,(58200H)=200H (2)MOV WORD PTR [BX],2000指令执行后,(22400H)=2000H 8.答:
当前栈顶地址是:FE00H:2010H;
执行PUSH BX指令后,栈顶地址变为:FE00H:200EH,栈顶2字节内容是:3457H。 9.答:
(1)(DX)=3C62H,CF=1 (2)(DX)=03C6H,CF=0 (3)(DX)=18A0H,CF=1 (4)(DX)=2BC6H,CF=0 (5)(DX)=18B7H,CF=1 (6)(DX)=BCC5H,CF=0 10.答: (AX) CF ZF OF SF PF (1) 134EH 0 0 0 0 1 (2) 0821H 0 0 0 0 1 (3) F142H 1 0 0 1 1 (4) 0A69 1 0
10