微机原理课后习题参考答案精品文档46.docx
《微机原理课后习题参考答案精品文档46.docx》由会员分享,可在线阅读,更多相关《微机原理课后习题参考答案精品文档46.docx(26页珍藏版)》请在冰豆网上搜索。
微机原理课后习题参考答案精品文档46
第1部分微型计算机基础知识
1.1微处理器、微型计算机和微型计算机系统三者之间有什么不同?
【解】微处理器:
指计算机内部对数据进行处理并对处理过程进行控制的部件,伴随着大规模集成电路技术的迅速发展,芯片集成密度越来越高,CPU可以集成在一个半导体芯片上,
这种具有中央处理器功能的大规模集成电路器件,被统称为“微处理器”。
微型计算机:
简称“微型机”、“微机”,也称“微电脑”。
由大规模集成电路组成的、体积较小的电子计算机。
由微处理机(核心)、存储片、输入和输出片、系统总线等组成。
特点是体积小、灵活性大、价格便宜、使用方便。
微型计算机系统:
简称“微机系统”。
由微型计算机、显示器、输入输出设备、电源及控制面板等组成的计算机系统。
配有操作系统、高级语言和多种工具性软件等。
1.2CPU在内部结构上由哪几部分组成?
CPU应该具备哪些主要功能?
【解】CPU在内部结构上由运算器、控制器、寄存器阵列和内部总线等各部分构成,其主要功能是完成各种算数及逻辑运算,并实现对整个微型计算机控制,为此,其内部又必须具备传递和暂存数据的功能。
1.3微型计算机采用总线结构有什么优点?
【解】
1简化了系统结构,便于系统设计制造;
2大大减少了连线数目,便于布线,减小体积,提高系统的可靠性;
3便于接口设计,所有与总线连接的设备均采用类似的接口;
4便于系统的扩充、更新与灵活配置,易于实现系统的模块化;
5便于设备的软件设计,所有接口的软件就是对不同的口地址进行操作;
6便于故障诊断和维修,同时也降低了成本。
总线的逻辑电路有些是三态的,即输出电平有三种状态:
逻辑“0”,逻辑“1”和“高阻”态。
1.4计算机总线有哪些,分别是什么?
【解】总线按其信号线上传输的信息性质可分为三组:
1数据总线,一般情况下是双向总线;
2地址总线,单向总线,是微处理器或其他主设备发出的地址信号线;
3控制总线,微处理器与存储器或接口等之间
1.5数据总线和地址总线在结构上有什么不同之处?
如果一个系统的数据和地址合用一套总线或者合用部分总线,那么要靠什么来区分地址和数据?
【解】数据总线(DB为双向结构,数据在CPU与存储器或I/O接口之间的传送是双向的,(数据既可以读也可以写),其宽度通常与微处理器的字长相同。
而地址总线(AB是CPU向存储器或I/O接口传送地址的信号线,只需单向传输,它的位数决定了CPU可以直接寻址
的范围。
8086CPU为了减少芯片的引脚数量,采用数据与地址线复用,既作数据总线也作为地址总线。
它们主要靠信号的时序来区分。
通常在读写数据时,总是先输出地址(指定要读或写数据的单元),然后再读或写数据。
第2部分80X86微处理器
2.1IA-32结构微处理器直至Pentium4,有哪几种?
【解】80386、80486、Pentium、PentiumPro、PentiumII、PentiumIII、Pentium4。
2.2IA-32结构微处理器有哪几种操作模式?
【解】IA-32结构支持3种操作模式:
保护模式、实地址模式和系统管理模式。
操作模式确定哪些指令和结构我是可以访问的。
2.3IA-32结构微处理器的地址空间如何形成?
【解】由段寄存器确定的段基地址与由各种寻址方式确定的有效地址相加形成了线性地址。
若未启用分页机制,线性地址即为物理地址;若启用分页机制,则它把线性地址转换为物理地址。
2.4基本程序执行寄存器是由哪些寄存器组成?
【解】基本程序执行寄存器由以下寄存器组成:
(1)通用寄存器。
这8个寄存器能用于存放操作数和指针。
(2)段寄存器。
这些寄存器最多能保持6个段先择子。
(3)EFLAGS程序状态和控制)寄存器。
EFLAG寄存器报告正在执行的程序的状态并允许有限地(应用程序级)控制处理器。
(4)EIP(指令指针)寄存器。
EIP寄存器包含下一条要执行的釜底抽薪32位指针。
2.5实地址方式的存储器是如何组织的?
地址如何形成?
【解】IA-32结构微处理器中的实地址方式是为了与8086(8088)CPU兼容而设置的。
所以IA-32结构微处理器的实地址方式是从存储器组织来看与8086(8088)CPU的存储器组织是
一样的。
8086微处理器有20条地址引线,它的直接寻址能力为220=1MB所以,在一个由8086组成的系统中,可以有多达1MB勺存储器。
这1MB逻辑上可以组织成一个线性矩阵。
地址范围为00000H~FFFFRH但是,在8086内部的AIU能进行16位运算,有关地址的寄存器如SP、IP,以及BP、SI、DI等也都是16位的,因而8086对地址的运算也只能是16位。
这就是说,对于8986来说,各种寻址方式,寻找操作数的范围最多只能是64KB所以,整个1MB存储
器以64KB为范围若干段。
在寻址一个具体物理单元时,必须要由一个基地址再加上各种寻址方式确定的16位偏移量来形成实际的20位物理地址。
段基地址就是由8088向处理器段寄存器中的16位数自动左移4位,然后再与16位偏移量相加,形成20位物理地址。
2.6通用寄存器起什么作用?
【解】通用寄存器主要用于:
(1)逻辑和算术操作的操作数。
(2)用于地址计算的操作数。
(3)内存指针。
2.78086的基本程序执行寄存器是由哪些寄存器组成?
【解】基本程序执行寄存器是由八个通用寄存器、四个段寄存器、标志寄存器FLAG和IP寄
存器组成。
2.88086的存储器是如何组织的?
地址如何形成?
【解】8086的存储器采用分段机制。
实际存储单元地址由段基址左移四位加上偏移地址构成
20位的物理地址所组成。
2.9指令地址如何形成?
【解】由段寄存器CS确定的段基地址与由指令指针确定的偏移理相加形成指令地址。
2.108086微处理器的总线接口部件有哪些功能?
请一一说明。
【解】总线接口单元(BIU)负责与存储器接口;执行单元(EU执行各种操作。
BIU主要由段寄存器、指令指针、加法器(形成20位地址)和预取的指令流队列等组成。
2.118086微处理器的总线接口有哪几部分组成?
【解】8086微处理器中的总线接口单元(BIU)负责CPU与存储器之间的信息传送。
由
(1)4个段地址寄存器。
即CSDSESSS。
(2)16位的指令指针寄存器IP。
(3)20位的地址加法器。
(4)6字节的指令队列。
具体地说,BIU既负责从内存的指定部分取出指令,送至指令队列中的排队(8086的指令队列有6个字节,而8088的指令队列只有4个字节);也负责传送执行指令时所需的操作数。
执行单元(EU负责执行指令规定的操作。
2.12段寄存器CS=1200H指令指针寄存器IP=FF00H,此时,指令的物理地址为多少?
【解】指令的物理地址=12000H+FF00H=21F00H
2.138086微处理器的执行部件有什么功能?
由哪几部分组成?
【解】8086微处理器的执行部件负责指令的执行。
它主要由算术逻辑单元、标志寄存器和通用寄存器等部分组成。
2.14状态标志和控制标志有何不同?
程序中是怎样利用这两类标志的?
8086微处理器的状态标志和控制标志分别有哪些?
【解】状态标志反映算术和逻辑运算的结果,主要用于各种条件。
控制标志实现一些控制作用。
EFLAG资存器有下面6个状态标志。
(1)进位标志C(CarryFlag)
当结果的最高位(字节操作时的D7或字操作时的D15双字操作的D31)产生一个进位或借位,则C=1,否则为0。
这个标志主要用于我字节数的加、减法运算。
移位和循环指令也能够把存储器或寄存器中的最高位(左移时)或最低位(右移时)放入标志C中。
2)辅助进位标志A(AuxitiaryCarryFlag)
在字节操作时,则由低半字节(一个字节的低4位)向高半字节有进位或借位,则A=1,否则为0。
这个标志用于十进制算术运算指令中。
(3)溢出标志O(OverflowFlag)在算术运算中,带符号数的运算结果超出了8位、16位或32位带符号数所能表达的范围,即在字节运算时大于+127或小于-128,在字运算时大于+32767或小于-32768,在双字运算时大于+231-1或小于-231,则此标志置位,否则复位。
一个任先的溢出中数据指令,在溢出情况下能产生中断。
(4)符号标志S(SignFlag)
符号标志值与运算结果的最高位相同。
即结果的最高位(字操作时为D15)为1,则S=1;
否则,S=0。
由于在IA-32结构微处理器中,符号数是用补码表示的,所以S表示了结果的符号,0=正,
1=负。
(5)奇偶标志P(ParityFlag)
若操作结果中“1”的个数为偶数,则P=1,否则P=0b这个标志可用于检查在数据传送过程中是否发生错误。
(6)零标志Z(ZeroFlag)
若运算的结果为0,则Z=1,否则Z=0
3个控制标志,
TF—陷阱标志位(单步标志位、跟踪标志)。
当该位置1时,将使8086/8088进入单步工作方式,通常用于程序的调试。
IF—中断允许标志位,若该位置1,则处理器可以响应可屏蔽中断,否则就不能响应可屏蔽中断。
DF—方向标志位,若该位置1,则串操作指令的地址修改为自动减量方向,反之,为自动增量方向。
2.15如果一个堆栈从地址1250:
:
0000H开始,它的最后一个字的偏移地址为0100H,SP的内容为0052H,问:
(1)栈顶地址是什么?
(2)栈底地址是什么?
(3)在SS中的段地址是什么?
(4)存入数据2345H后,SP的内容是什么?
【解】①.栈顶地址1250:
0052,SP指向栈顶地址。
2.栈底地址1250:
0100,栈底地址为高地址。
3.SS中的段地址为1250,SS中的段地址为堆栈段地址。
4.存入2345H后,SP内容为0050H—次入栈操作,SP=SP-2
2.168086微处理器是怎样解决地址线和数据线的复用问题的?
ALE信号何时有效?
【解】采用分时复用的方法。
ALE在T1时刻有效,其他时间段均无效。
第3部分80X86微处理器的指令系统
3.1分别指出下列指令中的源操作数和目的操作数的寻址方式。
(1)MOVSI,300
(2)MOVC,XDATA[DI]
(3)ADDAX,[BX][SI]
(4)ANDAX,CX
(5)MOV[BP],AX
(6)PUSHF
【解】
(1)源操作数为立即寻址,目的操作数为寄存器寻址。
(2)源操作数为变址寄存器加位移量寻址,目的操作数为寄存器寻址。
(3)源操作数为基址加变址寻址,目的操作数为寄存器寻址。
(4)源操作数和目的操作数都为寄存器寻址。
(5)源操作数为寄存器址,目的操作数为寄存器间接寻址。
(6)为堆栈操作。
3.28086汇编语言指令的寻址方式有哪几类?
哪种寻址方式的执行速度最快?
【解】寻址方式分为:
立即寻址方式、寄存器操作数寻址方式和存储器操作数寻址方式。
其
中,寄存器操作数寻址方式的执行速度最快。
3.3试述指令MOVAX,2000H和MOVAX,DS:
[2000H]的区别。
【解】前一条指令是立即数寻址,即把立即数2000H传送至寄存器AX后一条指令是直接寻址,是把数据(DS段中的地址为2000H单元的内容传送至寄存器AX
3.4堆栈操作指令时要注意什么问题?
传送指令和交换指令在涉及内存操作数时应该分别要注意什么问题?
【解】使用堆栈指令可以把内存单元作为一个操作数(从内存到内存)。
但堆栈固定在堆栈段,且只能由SP指向。
且堆栈操作要修改堆栈指针。
MOV旨令不能实现内存单元间的数据传送。
XCHG旨令是交换,有一个操作数必须是寄存器。
3.5断下列指令书写是否正确。
(1)MOYAL,BX
(2)MOYAL,CL
(3)INC[BX]
(4)MOV5,AL
(5)MOV[BX],[SI]
(6)MOVBL,0F5H
(7)MOVDX,2000H
(8)POPCS
(9)PUSHCS
【解】
(1)不正确,AL与BL数据宽度不同。
(2)正确。
(3)不正确,因为不明确是增量字节还是字。
(4)不正确,立即数不能作为目的操作数。
(5)不正确,因为不明确要传送的是字节还是字。
(6)正确。
(7)正确。
(8)不正确,CS不能作为POP旨令的操作数。
(9)不正确,CS不能作为PUSH旨令的操作数。
3.6写出以下旨令中内存操作数的所在地址。
(1)MOVAL,[BX+10]
(2)MOV[BP+10],AX
(3)INCBYTEPTR[SI+5]
(4)MOVDL,ES:
[BX+SI]
(5)MOVBX,[BP+DI+2]
【解】
(1)数据段BX+10单元
(2)堆栈段BP+10单元
(3)数据段SI+5字节单元
(4)附加段(ES段)BX+SI单元
(5)堆栈段BP+DI+2单元
3.7两种方法写出从80H端口读入信息的指令。
再用两种方法写出从40H口输出100H的指
令。
【解】
(1)INAL,80H
(2)MOVDX,80H
INAL,DX
(3)MOVAL,100H
OUT40H,AL
(4)MOVAL,100H
MOVDX,40H
OUTDX,AL
3.8假如:
AL=20HBL=10H当执行CMPALBL后,问:
(1)AL、BL中的内容是两个无符号数,比较结果如何?
影响哪几个标志位?
(2)AL、BL中的内容是两个有符号数,结果又如何,影响哪几个标志位?
【解】
(1)AL=20H,BL=10H,O=0,S=0,Z=0,A=0,P=0,C=0。
(2)因为两个都是符号正数,其结果与
(1)相同。
3.9设堆栈指针SP的初始值为1000H,AX=2000HBX=3000H试问:
(1)执行指令PUSHAX后SP=>
(2)再执行PUSHBX及POPAX后SP=?
AX=?
、BX=?
【解】
(1)SP=OFFEH。
.
(2)SP=OFFE;HAX=3000H;BX=3000H。
3.10要想完成把[3000H]送[2000H]中,用指令:
MOV[2000H],[3000H]是否正确?
如果不正确,应用什么方法?
【解】不正确。
正确的方法为:
MOVAL,[3000H]
MOV[2000H],AL
3.11若要使ALX10,有哪几种方法,试编写出各自的程序段。
【解】
(1)使用乘法指令:
MOVBL,10;乘数
MULBL;AL*BL,结果存入AX
(2)使用移位指令:
SHLAL,1;AL*2
MOVBL,AL;保留一份
SHLAL,2;AL*2*2*2
ADDAL,BL;AL*(8+2)
(3)使用加法指令:
ADDAL,AL
MOVBL,AL
ADDAL,AL
ADDAL,AL
ADDAL,BL
3.12用两种方法写出从80H端口读入信息的指令。
再用两种方法写出从40H口输出100H的指令。
【解】
(1)INAL,80H
(2)MOVDX,80H
INAL,DX
(3)MOVAL,100H
OUT40H,AL
(4)MOVAL,100H
MOVDX,40H
OUTDX,AL
3.138086汇编语言指令的寻址方式有哪几类?
用哪一种寻址方式的指令执行速度最快?
【解】寻址方式分为:
立即数寻址方式、寄存器操作数寻址方式和存储器操作数寻址方式。
其中,寄存器操作数寻址方式的指令执行速度最快。
3.14普通移位指令和循环移位指令(带CF的和不带CF的两类)在执行操作时,有什么差别?
在编制乘、除法程序时,为什么常用移位指令来代替乘、除法指令?
试编写一个程序段,实现将BX中的数乘以10,结果仍放在BX中的操作。
【解】这两种指令的区别在于是否把标志位(CF)的值放入循环中。
作移一位相当于乘2,右移一位相当于除2。
故左移或右移可实现乘或除2的幂。
而移位指令比乘法和除法指令要快得多。
要实现BX中的数乘10,可以用乘(2+8)实现,乘2即左移1位,乘8即左移3位,把左移1位和左移3位的数相加就行。
SHL
BX
,1
MOV
AX
,BX
SHL
BX
,2
ADD
BX
,AX
3.15用串操作指令设计实现如下功能的程序段:
首先将100H个数从2170H处搬到1000H处;
然后,从中检索出相等于AL中字符的单元,并将此单元的值换成空格符。
【解】
MOVSI,
2170H
MOV
DI,
1000H
MOV
CX,
100H
REPMOVSDI,
SI
NEXT:
SCASB
JZNI
LOOPNEXT
NI:
DECDI
MOVDI,20H
JMPNEXT
3.16在使用条件转移指令时,要特别注意它们均匀为相对转移指令,请解释“相对转移”的含义。
如果要向较远的地方进行条件转移,那么,程序中应该怎样设置?
【解】相对转移即为相对于指令指针的转移,通常偏移量是8位数,这是短(short)转移;它可以规定16位偏移量,这就是段内(near)转移。
3.17用寄存器间接寻址方式时,BX、BP、SI、DI分别针对什么情况来使用?
这四个寄存器组合间接寻址时,地址时怎样计算的?
举例进行说明。
【解】在寄存器间接寻址方式下,BX和BP作为间接寄存器使用,而SI、DI作为变址寄存器使用。
除BP间接默认的段为堆栈段,其他的都默认为数据段。
它们都可以单独使用,或加上偏移量后组合使用。
如:
[BX+n]
[BP+n]
[SI+n]
[DI+n]
[BX+SI+n]
[BX+DI+n]
[BP+SI+n]
[BP+DI+n]
3.18下面这些指令中哪些是正确的?
哪些是错误的?
如果是错误的,请说明原因。
(1)XCHGCS,AX
(2)MOV[BX],[1000]
(3)XCHGBX,IP
(4)PUSHCS
(5)POPCS
(6)INBX,DX
(7)MOVBYTE[BX],1000(8)MOVCS,[1000]
【解】
(1)错误,CS不能交换。
(2)错误,MOV旨令不能在内存间传送。
(3)错误,IP不能交换。
(4)错误,CS可以作为PUSH旨令的操作数。
(5)错误,CS可以作为POP指令的操作数。
(6)错误,IN指令的目的操作数是累加器。
(7)错误,目的操作数是字节单元。
(8)错误,CS不能作为MOV旨令的目的操作数。
3.19字节扩展指令和字扩展指令用在什么场合?
【解】主要用于字节相除和字相除之前,把被除数扩展为两倍宽度的操作数。
3.20使用堆栈操作指令时要注意什么问题?
传送指令和交换指令在涉及内存操作数时分别要注意什么问题?
【解】使用堆栈指令可以把内存单元作为一个操作数(从内存到内存)。
但堆栈固定在堆栈段且只能由SP指向。
且堆栈操作要修改堆栈指针。
MOV旨令不能实现内存单元间的数据传送。
XCHG旨令是交换,有一个操作数必须是寄存器。
3.21在执行中断指令时,堆栈的内容有什么变化?
中断处理子程序的入口地址是怎样得的?
【解】在执行中断指令后,处理器先推入标志寄存器,在推入断点后的指令指针和CS值。
中
断处理器的入口地址是由中断向量和中断向量表(描述符)表得到的。
3.22在执行中断返回指令IRET和普通子程序返回指令RET寸,具体操作内容有什么不同?
【解】IFET除了弹出中断要返回的指令的地址(CS和IP)外,还要恢复中断前的标志寄存器。
3.23什么叫BCD码?
什么叫组合的BCD码?
什么叫非组合的BCD码?
8086汇编语言在对BCD码的加、减、乘、除运算时,采用什么方法?
【解】BCD码为十进制编码的二进制数。
组合的BCD数是把两位BCD加在一个字节中,高位的在高4位。
非组合的BCD码是把一位BCD数放在一个字节的低4位高4位为0。
8086在BCD加、减和乘法运算以后用BCD调整指令把结果调整为正确的BCD数。
在BCD除法之前先用BCD调整指令再做除法。
3.24用普通运算指令执行BCD码运算时,为什么要进行十进制调整?
具体讲,在进行BCD码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整指令?
【解】因为8086指令把操作数作为二进制数进行二进制运算,要得到正确的BCD结果,需要进行调整。
在加、减、乘法指令之后加上BCD调整指令,而在除法指令之前先用BCD调整指令再用除法指令。
第4四部分汇编语言程序设计
4.1在下列程序运行后,给相应的寄存器及存储单元填入运行的结果:
MOVAL,10H
MOVCX,1000H
MOVBX,2000H
MOV[CX],AL
XCHGCX,BX
MOVDL,01H
XCHGCX,BX
MOV[BX],DL
HLT
【解】寄存器及存储单元的内容如下:
AL=10H
BL=00H
BH=20H
CL=00H
CH=10H
DL=01H
DH=10H
(1000H)=10H
(2000H)=01H
4.2自1000单元开始有一个100个数的数据块,若要把它传送到自2000H开始的存储区中去,可以采用以下3种方法实现,试分别编制程序以实现数据块的传送。
(1)不用数据块传送指令;
(2)用单个传送的数据块传送指令;
(3)用数据块成组传送指令。
【解】
(1)LEASI,1000H
LEADI,2000H
MOVCX,100
L1:
MOVAX,[SI]
MOV[DI],AX
LOOPL1
HLT
(2)LEASI,I000H
LEADI,2000H
MOVCX,100
CLD
L1:
MOVSB
LOOPL1
HLT
(3)LEASI,1000H
LEADI,2000H
MOVCX,100
CLD
REPMOVSB
HLT
4.3编写一个程序,把自1000H单元开始的100个数传送至1050H开始的储存中
解】LEASI,1000H
LEA
DI,
1050H
ADD
SI,
63H
ADD
DI,
63H
MOV
CX,
100
STD
REPMOVSB
HLT
4.4在自0500H单元开始,存有100个数。
要求把他传送到1000H开始的存储区中,但在传送过程中要检查数的值,遇到第一个零就停止传送。
【解】LEASI,0500H
LEADI,1000H
MOVCX,100
N1