微机原理与接口技术参考答案.docx
《微机原理与接口技术参考答案.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术参考答案.docx(30页珍藏版)》请在冰豆网上搜索。
微机原理与接口技术参考答案
《微机原理与接口技术》习题参考答案
习题2
1.为何说8086CPU是16位CPU?
答:
16位指的是8086CPU的字长,而字长一般来说和运算器、寄存器、总线宽度一致。
因为8086CPU的部寄存器、部运算部件以及部操作都是按16位设计的,这决定了它的字长为16位。
2.8086CPU由哪两个单元组成?
其中,指令队列在哪个单元中,有何作用?
答:
总线接口单元(BusInterfaceUnit,BIU)和执行单元(ExecutionUnit,EU)。
指令队列在BIU中。
它的作用是当EU在执行指令时,空闲的BIU可以从存读取后续指令到指令队列,这样就可以将取指令工作和执行指令工作重叠进行,从而提高CPU的工作效率,加快指令的执行速度。
3.8086CPU中8位寄存器和16位寄存器是什么关系?
答:
8086的通用寄存器包括数据寄存器、指针寄存器和变址寄存器。
其中数据寄存器包含AX、BX、CX、DX四个16位寄存器,但他们每个都可以分开作为两个单独的8位寄存器使用。
8086的指针寄存器和变址寄存器不可分割为8位寄存器。
4.8086CPU中的IP寄存器有何用途?
答:
IP寄存器是指令指针寄存器,用来存放下一条要执行的指令在代码段中的偏移地址。
在程序运行过程中,IP寄存器始终指向下一条指令的首地址,与CS寄存器联合确定下一条指令的物理地址。
8086就是通过IP寄存器来控制指令序列的执行流程。
5.在标志寄存器中,用于反映运算结果属性的标志位有哪些?
它们每一位所表示的含义是什么?
答:
有CF、PF、AF、ZF、SF、OF。
它们的含义如下:
CF:
进位标志。
它记录运算时从最高有效位产生的进位值或结果值。
最高有效位有进位或有借位时CF=1,否则CF=0。
PF:
奇偶标志。
它记录运算结果的奇偶检验条件。
当结果操作数中“1”的个数为偶数时PF=1,否则PF=0。
AF:
辅助进位标志。
在字节运算时,由低半字节(字节的低4位)向高半字节有进位或借位时,AF=1,否则AF=0。
ZF:
零标志。
运算结果为零时ZF=1,否则ZF=0。
SF:
符号标志。
它记录运算结果的最高位,即由符号数的符号。
OF:
溢出标志。
在运算过程中,如果运算结果已经超出了机器能表示的数值围(指有符号数)称为溢出,此时OF=1,否则OF=0。
6.分别完成下面的8位运算,并说明各主要标志位的状态,以及结果是否产生溢出(提示:
需要分为有符号数和无符号数两种情况)。
(1)90H+3CH
(2)3CH-90H(3)7DH-9CH
答:
(1)有符号:
CCH主要标志CF=0PF=1AF=0ZF=0SF=1OF=0无溢出
无符号:
CCH主要标志CF=0PF=1AF=0ZF=0SF=1OF=0无溢出
(2)有符号:
ACH主要标志CF=1PF=1AF=0ZF=0SF=1OF=1溢出
无符号:
ACH主要标志CF=1PF=1AF=0ZF=0SF=1OF=0溢出
(3)有符号:
E1H主要标志CF=1PF=1AF=0ZF=0SF=1OF=1溢出
无符号:
E1H主要标志CF=1PF=1AF=0ZF=0SF=1OF=0溢出
7.假设下列各组数值均分配在10000H开始的连续存储单元中,分别画出各组数值在存中的存储形式。
字节:
2、‘2’、‘B’、‘b’和‘0’;
字:
12H、1004H、-1和0;
双字:
420H、12345678H和0。
答:
(1)
2
‘2’
‘B’
‘b’
‘0’
10000H
02H
32H
42H
62H
30H
(2)
12H
1004H
-1
0
10000H
12H
04H
FFH
00H
10001H
00H
10H
FFH
00H
(3)
420H
12345678H
0
10001H
20H
78H
00H
10002H
04H
56H
00H
10003H
00H
34H
00H
10004H
00H
12H
00H
8.什么是物理空间?
8086CPU的物理地址是多少位?
其决定的物理空间有多大?
答:
物理空间是指由编址单元(如字节)大小和地址总线宽度决定的可寻址的存储器地址空间。
8086CPU具有20条地址总线,所以它的物理地址是20bit。
8086的存储是按照字节存储的,所以其物理空间为
B=1MB。
9.什么是逻辑空间?
8086的逻辑空间有何特点?
其逻辑地址如何构成?
答:
采用分段存储管理方式,将物理空间分割,通过段映射构建的由多个独立的逻辑段构成的存储空间即为逻辑空间。
8086使用16位地址在段寻址,称为段的偏移地址,因此其特点是段的最大长度
=64KB。
在8086中,将16位的段地址和16位的偏移地址合称为逻辑地址,其中段地址舍弃了最低四位的0,故逻辑地址等于段地址乘以10H加偏移地址。
10.简述面向逻辑空间编程比面向物理空间编程的优势。
答:
可以解除程序设计对实际物理空间的依赖。
具体表现在:
程序设计时不需要了解存储器的使用情况,操作系统或监控程序会将程序分配在空闲空间,不会和系统程序或其他程序冲突;
第二,程序设计时采用的是逻辑空间的地址,存储管理部件将自动、透明地进行逻辑空间地址到物理空间地址的转换,即逻辑空间到物理空间的映射,所以,不同的空间分配对程序没有影响;
第三,逻辑空间是相对“观察者”而言的,即不同的人面对的逻辑空间是独立无关的,所以每个编程者都是在自己的逻辑空间上编程。
11.8086CPU是如何实现逻辑空间到物理空间的映射的?
答:
逻辑空间的段地址指明要访问的存储单元所处的段,偏移地址指明存储单元的段地址。
段地址表示段在物理空间上的起始位置,偏移地址表示要访问的存储单元相对于起始位置的偏移量。
12.简述段寄存器的作用。
答:
为了保证地址转换的效率,访问存储器时,总是由段寄存器提供段址。
8086在BIU中设有4个段寄存器(CS、DS、SS、ES),CPU可以在某一时刻通过这4个段寄存器来访问4个不同的段。
在程序设计层面,可以通过指定段和段寄存器的关系来标识段,这样在实际编程时,绝大多数情况下逻辑地址只需要指定偏移地址。
13.已知当前(CS)=7F00H,(IP)=017CH,问下条指令的物理地址是什么?
答:
(CS)*10H+(IP)=7F00H*10H+017CH=7F000H+017CH=7F17CH
14.已知当前(DS)=5C00H,(ES)=5D10H,而数据的物理地址是63654H,若分别使用DS和ES段寄存器访问该数据,问偏移地址分别是多少?
答:
若使用DS,则(IP)=63654H-(DS)*10H=63654H-5C000H=7654H。
若使用ES,则(IP)=63654H-(ES)*10H=63654H-5D100H=6554H。
15.什么是I/O端口?
8086CPU的端口空间是多大?
需要使用地址总线的多少位访问端口空间?
答:
I/O端口即输入输出接口,是外部设备和主机交换信息的接口,在它们之间的通信中起到了转换和缓冲数据的作用。
8086的I/O端口空间大小为
=64KB。
需要16位,8086使用地址总线的低16位访问I/O端口。
16.简述Intel的32位处理器如何对16位处理器的寄存器进行扩展,有何好处。
答:
(1)将16位通用寄存器扩展16位形成32位通用寄存器。
同时还保留了原来的16位寄存器和8位寄存器。
(2)将指令寄存器IP扩展16位形成32为的EIP寄存器。
(3)段寄存器仍然是16位的,但增加了FS和GS两个段寄存器。
(4)将寄存器Flags扩展16为形成32位的EFLAGS标志寄存器,增加了新的标志。
32位微处理器完整保留了16位微处理器的寄存器结构,可保证16位架构的程序可以不经修改的运行在32位架构中,即向前兼容,是Intel商业成功的重要保证。
17.简述32位处理器的工作模式。
答:
(1)实模式。
实模式下的工作原理与8086相同,就相当于一个告诉的8086处理器。
(2)保护模式。
该模式有以下特点:
支持多任务;支持存储器的分段管理和分页管理,易于实现虚拟操作系统;具有保护功能,包括存储器保护、任务特权级保护和任务之间的保护。
(3)虚拟8086模式。
虚拟8086模式是为了在保护模式下执行8086程序而设计的。
在虚拟8086模式下可执行16位的软件,同时虚拟8086模式又可以以任务的形式与真正的32位任务进行切换,共享资源。
18.简述保护模式下存储管理的特点。
答:
在保护模式下,微处理器支持分段存储管理和分页存储管理。
分段存储管理完成由多个逻辑段构建的逻辑空间映射到线性空间的工作;程序设计面向逻辑空间进行;如果不使用分页存储管理,则线性空间就是物理空间;分页存储管理将线性空间按照一定的大小(4KB)划分页(逻辑页),然后以页为单位在物理空间上进行分配(物理页)和回收,并实现逻辑页到物理页的映射;分页存储管理对使用者是透明的。
习题3
1.指令由哪两部分构成?
分别起什么作用?
答:
由操作码和操作数组成。
操作码表示指令所要完成操作的功能和性质,操作数提供该操作的对象。
2.存储器寻址方式提供的是什么地址?
它最终如何映射到实际的物理地址?
答:
由段址和偏移地址组成的逻辑地址。
逻辑空间的段地址指明要访问的存储单元所处的段,偏移地址指明存储单元的段地址。
段地址表示段在物理空间上的起始位置,偏移地址表示要访问的存储单元相对于起始位置的偏移量。
3.简述立即寻址和直接寻址、寄存器寻址和寄存器间接寻址的区别。
答:
立即寻址的指令所需的操作数直接存放在指令中,指令的操作数字段就是真正的操作数。
直接寻址是在指令中给出操作数所在存单元的段偏移量。
寄存器寻址的操作数存放在寄存器中,指令的操作数字段是使用的寄存器。
寄存器间接寻址方式中,寄存器存放的是操作数的地址,而不是操作数本身,即操作数是通过寄存器间接得到的。
4.指出下列各种操作数的寻址方式。
MOVAX,420H
MOV[BX],SI
MOVAX,[90]
MOV[DI+90],AH
MOVAL,[BP+SI+20]
答:
答案一(默认求源操作数寻址方式)
1)MOVAX,420H立即寻址
2)MOV[BX],SI寄存器寻址
3)MOVAX,[90]直接寻址
4)MOV[DI+90],AH寄存器寻址
5)MOVAL,[BP+SI+20]相对基址变址寻址
答案二
1)MOVAX,420H源:
立即寻址目:
寄存器寻址
2)MOV[BX],SI源:
寄存器寻址目:
基址寻址
3)MOVAX,[90]源:
直接寻址目:
寄存器寻址
4)MOV[DI+90],AH源:
寄存器寻址目:
变址寻址
5)MOVAL,[BP+SI+20]源:
(相对)基址变址寻址目:
寄存器寻址
5.指出下列寻址方式中源操作数所使用的段寄存器。
MOVAX,[SI+20H]
MOVAL,[1000H]
MOVAX,ES:
[BX][SI]
MOVAX,[BP+1234H]
答:
(1)DS
(2)DS(3)ES(4)SS
6.已知寄存器(BX)=2010H、(DI)=0FFF0H和(BP)=420H,试分别计算出下列寻址方式中源操作数的有效地址。
MOVAX,[2345H]
MOVAX,[BX]
MOVAX,ES:
[DI+200]
MOVAX,DS:
[BP+DI]
MOVAX,[BX+DI+114H]
答:
1)MOVAX,[2345H]2345H
2)MOVAX,[BX]2010H
3)MOVAX,ES:
[DI+200]0B8H
4)MOVAX,DS:
[BP+DI]410H
5)MOVAX,[BX+DI+114H]2114H
7.使用类似MOV指令的双操作数指令需要注意什么?
答:
(1)MOV指令不需要经过ALU处理,所以对标志位没有影响;
(2)MOV指令是双操作数指令,在使用时有一些限制:
立即数不能作为目的操作数;CS不能作为目的操作数;段寄存器不能到段寄存器;立即数不能到段寄存器;存不能到存;
8.8086系统的堆栈是如何组织的?
如何判断堆栈满或空?
答:
8086的堆栈采用存储器方式实现,8086将堆栈组织为一个逻辑段,称为堆栈段。
堆栈段的段址由寄存器SS指定,堆栈指针由SP寄存器担当。
若SP当前值等于SS段址的的最小值,即SP为0时,堆栈满;若SP当前值等于堆栈指定的SP初始值时,堆栈空。
9.已知(SS)=0FF00H、(SP)=00B0H,先执行两条将8086H和0F20H入栈的PUSH指令,再执行一条POP指令。
请画出堆栈容变化过程示意图(请标出存储单元的物理地址)。
答:
执行完两条PUSH后:
||0FF00H←SS
……
|20H|0FFACH←SP
|0FH|0FFADH
|86H|0FFAEH
|80H|0FFAFH
再执行一条POP后:
||0FF00H←SS
……
|86H|0FFAEH←SP
|80H|0FFAFH
10.用一条指令实现将BX与SI之和传送给CX的功能。
答:
LEACX,[BX+SI]
11.写出下列指令中每条指令的执行结果,并指出标志位CF、ZF、OF、SF的变化情况。
MOVBX,40ABH
ADDBL,09CH
MOVAL,0E5H
CBW
ADDBH,AL
SBBBX,AX
ADCAX,20H
SUBBH,-9
答:
MOVBX,40ABH;将立即数40ABH传给寄存器BX,对标志位无影响
ADDBL,09CH;将9CH与ABH相加,结果47H存入BL,CF=1,ZF=0,
;OF=1,SF=0
MOVAL,0E5H;将立即数E5H传给寄存器AL,对标志位无影响
CBW;对AL进行符号扩展,即AX为FFE5H,对标志位无影响
ADDBH,AL;将AL中的数即E5H与BH中的数40H相加,结果25H存BH,
;CF=1,ZF=0,OF=1,SF=0
SBBBX,AX;将BX中的数2547H减去AX中的数FFE5H,再减去标志位
;CF=1,即将结果2561H存入BX中,CF=1,ZF=0,OF=1,SF=0
ADCAX,20H;将AX中的数FFE5H加20H,再加CF=1,即得0006H存
;入AX,CF=1,ZF=0,OF=1,SF=0
SUBBH,-9;将BH中的数25H加上F7H(补码),即得1BH存入BH,CF=1,
;ZF=0,;OF=1,SF=0
12.简述乘法指令和除法指令寻址方式的特点。
答:
都是隐含寻址指令。
都分8位和16位两种情况,其中8位乘法的被乘数在AL中,指令给出8位乘数,得到的16位结果存放在AX中;16位乘法的被乘数在AX中,指令给出16位被乘数,32位结果在DX:
AX中。
8位除法的16位被除数在AX中,指令给出8位除数,8位商在AL中,8位余数在AH种;16位除法的32位操作数在DX:
AX中,指令给出16位操作数,16位商在AX中,16位余数在DX中。
乘法指令和除法指令都不允许立即数。
13.完成一个计算DL(无符号数)三次方的指令序列。
答:
MOVAL,DL
IMULDL
MULDL
14.按下列要求编写指令序列。
清除DH中的最低三位而不改变其他位,结果存入BH中;
把DI中的最高5位置1而不改变其他位;
把AX中的0~3位置1,7~9位取反,13~15位置0;
检查BX中的第2、5和9位中是否有一位为1;
检查CX中的第1、6和11位中是否同时为1;
检查AX中的第0、2、9和13位中是否有一位为0;
检查DX中的第1、4、11和14位中是否同时为0;
答:
(1)MOVBH,F8H
ANDBH,DH
(2)ORDI,FFF8H
(3)ORAX,000FH
XORAX,0380H
ANDAX,1FFFH
(4)MOVDX,BX
TESTDX,0004H;若ZF=0,则第2位为1
TESTDX,0020H;若ZF=0,则第5位为1
TESTDX,0200H;若ZF=0,则第9位为1
(5)XORCX,0824H
JEYES
(6)TESTDX,0001H;若ZF=1,则第0位为0
TESTDX,0002H;若ZF=1,则第2位为0
TESTDX,0200H;若ZF=1,则第9位为0
TESTDX,2000H;若ZF=1,则第13位为0
(7)XORDX,4812H
JEYES
15.NOT指令和NEG指令有何不同?
编写指令序列将(DX:
AX)中的双字算数求反。
答:
NOT指令是对操作数的按位求反,称为逻辑求反。
而NEG指令是算数求反。
NOTAX
NOTDX
ADDAX,1
ADCDX,0
16.使用移位指令将40和-49分别乘2和除2,请注意选择合适的移位指令。
答:
MOVAX,0028H;将40存入AX
SHLAX,1;(AX)*2
MOVAX,0028H;将40存入AX
SARAX,1;(AX)/2
MOVAX,FFCFH;将-49存入AX
SHLAX,1;(AX)*2
MOVAX,FFCFH;将-49存入AX
SARAX,1;(AX)/2
17.分析下面指令序列完成的功能。
MOVCL,4
SHLDX,CL
MOVBL,4H
SHLAX,CL
SHRBL,CL
ORDL,BL
答:
MOVCL,4;将4存入CL
SHLDX,CL;(DX)*16
MOVBL,4H;将4H存入BL
SHLAX,CL;(AX)*16
SHRBL,CL;(BL)右移4位,为0
ORDL,BL;BL为0,取得DL的高四位
18.方向标志DF的作用是什么?
用于设置或消除该标志位的指令是什么?
答:
作用是控制串的处理方向。
指令STD设置DF=1,CLD清除DF。
19.已知数据段中保存有100个字的数组,起始地址为0B00H。
编写指令序列实现将-1插入到第一个字。
答:
20.什么是段间转移?
什么是段转移?
它们的实现机制有何不同?
答:
根据转移指令和转移指令要转移到的目标位置之间的关系,把转移分为段转移和段间转移。
段转移中,转移的目标位置在当前代码段,CS的容不变,只改变IP的容;段间转移中,转移的目标地址不在本段,此时CS和IP的容都需要修改。
21.条件转移指令中,所谓的“条件”是什么,如何做到?
如何使用?
请举例说明。
答:
所谓的条件就是某个标志位或某几个标志位的状态。
单一条件的5个标志位ZF、CF、OF、SF和PF,以及它们的否定。
多个标志位的联合还可以构成复合条件。
例如:
CMPAX,1;执行(AX)-1不保存结果
JZEqual;如果结果为零(ZF=1)则转移到Equal
……
Equal:
22.假设AX和BX中的容是有符号数,CX和DX中的容是无符号数,试实现:
如果(DX)>(CX),则转到EXCEED;
如果(BX)>(AX),则转到EXCEED;
如果(CX)=0,则转到ZERO;
如果(BX)-(AX)将产生溢出,则转到OVERFLOW;
如果(BX)
(AX),则转到NOTBIG;
如果(DX)
(CX),则转到NOTBIG;
答:
(1)CMPDX,CX
JAEXCEED
(2)CMPBX,AX
JGEXCEED
(3)CMPCX,0
JZZERO
(4)CMPBX,AX
JOOVERFLOW
(5)CMPBX,AX
JLENOTBIG
(6)CMPDX,CX
JBENOTBIG
23.已知数据段中保存有100个字的数组,起始地址为0B00H。
编写指令序列实现将数组中的每个字加1。
答:
LEASI,0B00H
MOVCX,100
L1:
MOVAX,[SI]
INCAX
MOV[SI],AX
ADDSI,2
LOOPL1
24.简述段调用和段间调用的主要区别。
答:
段调用的调用位置和子程序在同一段,段间调用的调用位置和子程序不在同一段。
25.已知指令CALLSUB1实现段调用子程序SUB1,请用JMP指令序列实现此调用功能。
答:
PUSH[IP]
JMPSUB1
26.子程序SUB1的最后一条指令是RET指令实现段返回,它能否用JMP指令模拟?
答:
POPBX;前提是调用时已经将原来的IP值入栈
JMPBX
27.如何得到中断60H的中断服务程序的首地址?
答:
MOVAX,0
MOVES,AX;中断向量表放在存最低端,段址为0
LDSSI,ES:
[60H*4];中断向量放在中断向量表“中断号*4”位置,占4字节,
;低字是偏移地址,高字是段址,所以使用LDS取长指针。
28.编写指令序列完成将中断1CH指向新的中断服务程序的功能,新的中断服务程序首地址为0FA00:
100H。
答:
习题4
1.简述汇编语言的优缺点及应用场合。
答:
汇编语言的优点:
1)、相比机器语言便于阅读和理解、书写和编程、调试和维护;2)、是计算机系统和逻辑功能的直接描述,便于理解计算机系统;3)、汇编语言可以直接控制硬件,更能充分发挥硬件的特性;4)、汇编语言程序目标代码简短,占用存少,执行速度快。
缺点:
1)、汇编语言是低级语言,面向机器,不适于描述和反映现实问题,编程相对复杂和麻烦;2)、需要使用者掌握大量计算机相关知识,不利于计算机的推广;3)、依赖特定的计算机结构,缺乏通用性和可移植性。
应用场合:
1)、底层的系统软件。
底层的系统软件往往需要直接面对计算机系统或直接操作硬件,所以多采用汇编语言;2)、高效程序。
汇编语言与机器语言一一对应,其程序的时间代价和空间代价都比较小。
2.什么是汇编过程?
其中,汇编程序起什么作用?
答:
汇编过程是指将汇编语言源程序转化为目标程序的过程。
汇编程序又称汇编器,它将汇编语言书写的程序翻译成与之等价的机器语言程序。
3.伪指令END有何作用?
答:
END伪指令的作用包括两点:
1)、标识程序结束。
汇编程序在处理源程序时,碰到END时就终止汇编,所以在END之后的容对汇编程序没有意义;2)、END的标号是可选项,指示程序开始执行的起始地址,即程序要执行的第一条指令。
如果多个模块相连,只有主模块的END语句需要使用标号可选项。
4.画图说明下列语句所分配的存储空间及初始化数据情况。
(1)B_VARDB'ABCD',12,-12,3DUP(?
0,2DUP(1,2))
(2)W_VARDW'AB',256,-1,5DUP(?
1,2)
5.变量名、标号的属性有哪些?
答:
变量名是存放数据