微机原理课后答案
2023年10月25日发(作者:示范高中和普通高中有什么区别)
从windows复制文件到ubuntu-
2.3 习 题 解 答
1. 选择题:
(1)某微机具有16MB的内存空间,其CPU的地址总线应有( )条。
A.26 B.28 C.20 D.22 E.24
(2)当RESET信号进入高电平状态时,将使8086/8088
CPU的( )寄存器初始化为0FFFFH。
A.SS B.DS C.ES D.CS
(3 )8086/8088 CPU与慢速存储器或I/O接口之间进行数据传输,为了使传送速度匹配,有时需要在( )状态之间插入若干等待周期TW。
A.T1和T2 B.T2和T3 C.T3和T4 D.随机
答案:(1)E
2. 填空题:
(1)8086/8088 CPU执行指令中所需操作数地址由( )计算出( )位偏移量部分送( ),由( )最后形成一个( )位的内存单元物理地址。
(2)D (3)C (2)8086系统的存储体系结构中,1MB存储体分( )个库,每个库的容量都是( )字节,其中和数据总线D15~D8相连的库全部由( )单元组成,称为高位字节库,并用( )作为此库的选通信号。
(3)用段基值及偏移量来指明内存单元地址的方式称为( )。
(4)通常8086/8088 CPU中当EU执行一条占用很多时钟周期的指令时,或者在多处理器系统中在交换总线控制时会出现( )状态。
(5)在8086/8088最大方式系统中各微处理器都有两条( )引脚,其中( )比( )具有更高的优先级。
答案:
a) EU,16,BIU,BIU,20
b) 2,512K,奇地址,
BHE
c) 逻辑地址
d) 空闲
e) 总线请求(输入)/总线请求允许(输出),RQ/GT0 ,RQ/GT1
3. 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亦可作地址寄存器。
4. 什么是堆栈?它有什么用途?堆栈指针的作用是什么?举例说明堆栈的操作。
答:堆栈是一个按照后进先出(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。
5. 对于由8086/8088 CPU组成的系统,堆栈的位置如何确立?堆栈的首址(即SS中的值)是不是栈底?为什么?
答:8086/8088系统中堆栈的位置由SS和SP初始化后确立:其中(SS)*16决定了堆栈段起始单元的地址,即堆栈段首址;(SS)*16+(SP初值)决定了堆栈段最后一个单元的地址,即栈底;(SS)*16+(SP现值)决定了堆栈段当前可用单元的地址,即栈顶。
显然,堆栈首址并不是栈低。一般来说,在堆栈所在的内存区内,栈底为高地址端。堆栈初始化后,未压入数据时,栈底与栈顶是重合的。当堆栈压入数据后,栈顶地址总是小于栈底地址,位于低地址端。
6. 试指出下列运算后的各个状态标志,并说明进位标志和溢出标志的区别:
(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
其中,进位标志CF用于判别无符号数运算是否超出数的表示范围,而溢出标志OF用于判别带符号数运算是否超出数的表示范围。
奇偶标志PF只能判断结果低8位中“1”的个数为奇数还是偶数。
7. 什么是段基值?什么是位移量?它们之间有何联系?
答:段基址即段起始地址,它的高16位地址存放在段寄存器中,称之为段基值(低4位一般为0)。存储器单元所在的位置距离段起始地址的偏移量称之为位移量。程序中一个存储单元的实际地址(即物理地址)是由这两部分共同表示的。
8. 若CS为0A000H,试说明现行代码段可寻址物理空间的范围。
答: 因为8086系统中可寻址的最大逻辑段长度为64K,所以当CS为0A000H,即段基址为CS*16=0A0000H时,现行代码段可寻址物理空间的范围为:0A0000H ~
0AFFFFH。
9. 设现行数据段位于存储器0B0000H~0BFFFFH单元,DS段寄存器内容为多少?
答: DS段寄存器内容为0B000H。
10. 已知当前段寄存器的基值(DS)=021FH,(ES)=0A32H,(CS)=234EH,则上述各段在存储器空间中物理地址的首址及末地址号是什么?
答:数据段: 021F0H~121EFH
附加段: 0A320H~1A31FH
代码段: 234E0H~334DFH
11. 若(CS)=5200H时,物理转移地址为5B230H,则当CS的内容被设定为7800H,物理转移地址应为多少?
答:按题目条件可知该转移地址距CS所指代码段的段基址的偏移量为9230H (即= 5B230H-52000H),因此若(CS)=7800H,则物理转移地址应为:78000H
+9230H=81230H。
12. 若8086工作于最小方式,试指出当 CPU完成将AH中的内容送到物理地址为9100H的存储单元操作时,以下哪些RD、WR、BHE/S7、引脚信号出现过低电平:M/IO、DT/R?
答:WR和BHE/S7引脚信号出现过低电平。
13. 若8086工作于最大方式,试指出当CPU完成将CL内容传送到物理地址为91003H单元的操作时,8288输出的哪些总线命令信号应变为有效(低电平)?
答:MWTC(存储器写命令)和DEN(数据有效命令)信号应变为有效。
14. 某系统中已知当前(SS)=2258H,(SP)=0800H,说明该堆栈段在存储器中的物理地址范围。若当前堆栈中存入10个字节数据,那么SP内容应为什么值?
答:堆栈段在存储器中的物理地址范围为:22580H~22D80H,其中22580H(=2258H*16)为堆栈段的段基址,而22D80H(=2258H*16+0800H)为栈底地址。在存入10个字节数据后SP内容应为07F6H(=0800H-0AH)。
15. 现有6个字节的数据分别为11H,22H,33H,44H,55H,66H,已知它们在存储器中的物理地址为 400A5H~400AAH,若当前(DS)=4002H,请说明它们的偏移地址值。如果要从存储器中读出这些数据,需要访问几次存储器?每次各读出哪些数据?
答:这几个字节数据的偏移地址值为:0085H~008AH(偏移地址 = 物理地址 - 段基址*16 = 物理地址 -
40020H)
数据是以字节形式存放的。如果是8088CPU,无论如何都要读6次存储器,每次分别读出一个字节。如果是8086CPU,可分为以下三种情况:
若以字节方式读数据,则每读一个字节需要访问一次存储器,共需6个总线周期;
若以字的方式读数据,由于存放格式为非规则字,故每读一个非规则字需要两个总线周期,3个非规则字仍需6个总线周期,每个总线周期读出一个字节;
若对读取方式无具体规定,则可以先读一个奇地址字节11H,然后连续读两个规则存放的字3322H、5544H,最后读偶地址字节66H,这样共需访问4次存储器。