微机课后习题答案Word文档格式.docx
《微机课后习题答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《微机课后习题答案Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
行指令时所需的操作数。
执行单元(EU)负责执行指令规定的操作。
2、16段寄存器CS=120OH,指令指针寄存器IP=FFOOH,此时,指令的物理地址为
多少?
指令的物理地址=12000H+FFOOH=21FOOH
第3章作业答案
3、1分别指出下列指令中的源操作数与目的操作数的寻址方式。
(1)MOVSI,30O
(2)MOVCX,DATA[DI]
(3)ADDAX,[BX][SI]
(4)ANDAX,CX
(5)MOV[BP],AX
(6)PUSHF
(l)源操作数为立即寻址,目的操作数为寄存器寻址。
(2)源操作数为变址寄存器加位移量寻址,目的操作数为寄存器寻址。
(3)源操作数为基址加变址寻址,目的操作数为寄存器寻址。
(4)源操作数与目的操作数都为寄存器寻址。
(5)源操作数为寄存器寻址,目的操作数为寄存器间接寻址。
(6)为堆栈操作。
3、2试述指令MOVAX,2000H与MOVAX,DSz[2000H]的区别。
解:
前一条指令就是立即寻址,即把立即数2000H传送至寄存器AX。
后一条指令
就是直接寻址,就是把数据(DS)段中的地址为200OH单元的内容传送至寄存器AX。
3、3写出以下指令中内存操作数的所在地址。
(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、4判断下列指令书写就是否正确。
(1)MOVAL,BX
(2)MOVAL,CL
(3)INC[BX]
(4)MOV5,AL
(5)MOV[BX],[SI]
(6)M0VBL,OF5H
(7)MOVDX,2000H
(8)POPCS
(9)PUSHCS
(l)不正确,AL与BX数据宽度不同。
(2)正确。
(3)不正确,因为不明确就是增量字节还就是字。
(4)不正确,立即数不能作为目的操作数。
(5)不正确,因为不明确要传送的就是字节还就是字。
(6)正确。
(7)正确。
(8)不正确,CS不能作为:
pop指令的操作数。
(9)不正确,CS不能作为PUSH指令的操作数。
3、5设堆钱指针SP的初值为1000H,AX=2000H,BX=3000H,试问:
(1)执行指令PUSHAX后SP的值就是多少?
(2)再执行PUSHBX及POPAX后,SP、AX与BX的值各就是多少?
(1)SP=OFFEH。
(2)SP=OFFEH;
AX=3000H,BX=3000H。
3、6要想完成把[3000H]送[2000H]中,用指令:
MOM[200OH],[300OH]就是否正确?
如果不正确,应该用什么方法实现?
解:
不正确。
正确的方法就是:
MOVAL,[300OH]
MOV[2000H],AL
3、7假如想从200中减去AL中的内容,用SUB200,AL就是否正确?
如果不正确,应该
用什么方法?
MOVBL,200
SUBBL,AL
3、8试用两种方法写出从8OH端口读入信息的指令。
再用两种方法写出从4OH口输
出10OH的指令。
(1)INAL,80H
(2)MOVDX,8OH
INAL,DX
(3)MOV,AL,lOOH
OUT40H,AL
4)MOVAL,10OH
MOVDX,4OH
OUTDX,AL
3、9假如:
AL=20H,BL=1OH,当执行CMPAL,BL后,问:
(1)AL、BL中的内容就是两个无符号数,比较结果如何?
影响哪儿个标志位?
(2)AL、BL中的内容就是两个有符号数,结果又如何,影响哪几个标志位?
(l)AL=2OH,BL=1OH,O=0,S=0,Z=0,A=0,P=0,C=0。
(2)因为两个都就是符号正数,其结果与(l)相同。
3、10若要使AL×
10,有哪几种方法,试编写出各自的程序段?
(1)使用乘法指令:
MOVBL,10
MULBI,
(2)使用移位指令:
SHLAL,1
MOVBL,AL
SHLAL,2
ADDAL,BL
(3)使用加法指令:
ADDAL,AL
3、118086汇编语言指令的寻址方式有哪几类?
哪种寻址方式的指令执行速度最快?
寻址方式分为:
立即数寻址方式、寄存器操作数寻址方式与存储器操作数寻
址方式。
其中,寄存器操作数寻址方式的指令执行速度最快。
3、12在直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?
如
果要用某个段寄存器指出段地址,指令中应该如何表示?
默认的数据访问,操作数在DS段;
堆栈操作在SS段;
串操作源操作数(SI)在DS段,
目的操作数(DI)在ES段;
用BP作为指针在SS段。
如果要显式地指定段地址,则在操作数中规定段寄存器。
例如:
MOVAX,ES:
(BX+10H)
3、13在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,那么如何确定
段地址?
在寄存器间接寻址方式中,如果指令中没有具体指明段寄存器,段地址就是
隐含约定的,也就就是隐含地选择段寄存器。
如操作类型为指令,则指定代码段寄
存器CS,如操作类型为堆栈操作,则指定堆找段寄存器SS,…,如表3-1中所示。
当需要超越约定时,通常用段替代前缀加冒号"
:
"
来表示段超越,它允许程序设
计者偏离任何约定的段。
例如:
MOVES:
〔BX],AX
这时数据将从寄存器EAX传送至附加段中由EBX寻址的存储单元,而不就是传送
到数据段中。
3、14采用寄存器间接寻址方式时,BX、BP、SI、DI分别针对什么情况来使用?
这4个
寄存器组合间接寻址时,地址就是怎样计算的?
请举例说明。
在寄存器间接寻址方式下,BX与BP作为间址寄存器使用,而SI、DI作为
变址寄存器使用。
除BP间址默认的段为堆栈段,其她的都默认为数据段。
它们
都可以单独使用,或加上偏移量或组合使用。
如:
[BX+n]
LBP+n]
[SI+n]
[DI+n]
[BX+SI+n]
[BX+DI+n]
[BP+SI+n]
[BP+DI+n]
3、15设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所进行
的具体操作:
MOVBYTEPTR[BP],200
MOVWORDPTR[BX],2000
前一条指令就是把立即数(应就是字节)200,传送至堆栈段(BP的默认段〉偏移
量由BP规定的字节单元,地址为:
52000H+620OH=58200H
第二条指令就是把立即数、2000,传送至数据段(BX的默认段)偏移量由BX规定的
字单元,地址为:
21000H+1400H=22400H。
3、16使用堆钱操作指令时要注意什么问题?
传送指令与交换指令在涉及内存操作数
时应该分别要注意什么问题?
使用堆栈指令可以把内存单元作为一个操作数(从内存到内存)。
但堆栈
固定在堆栈段且只能由SP指向。
且堆栈操作要修改堆核指针。
MOV指令不能实
现内存单元间的数据传送。
XCHG指令就是交换,有一个操作数必须就是寄存器。
3、17下面这些指令中哪些就是正确的?
哪些就是错误的?
若就是错误的,请说明原因。
(1)XCHGCS,AX
(2)MOV[BX],[1000]
(3)XCHGBX,IP
(4)PUSHCS
(5)POPCS
(6)INBX,DX
(7)MOVBYTE[BX],100O
(8)MOVCS,[1000]
(l)错误,CS不能交换。
(2)错误,MOV指令不能在内存间传送。
(3)错误,IP不能交换。
(4)错误,CS可以作为PUSH指令的操作数。
(5)错误,CS可以作为POP指令的操作数。
(6)错误,IN指令的目的操作数就是累加器。
(7)错误,目的操作数就是字节单元。
(8〉错误,CS不能作为MOV指令的目的操作数。
3、18以下就是格雷码的编码表,
O0000
10001
20011
30010
40110
50111
60101
70100
81100
请用换码指令与其她指令设计一个程序段,以实现由格雷码向ASCII码的转换。
MOVBX,TABLE
MOVSI,ASCII_TAB
MOVAL,0
MOVCX,10
TRAN:
XLATTABLE
MOVDL,AL
ADDDL,30H
MOV[SI],DL
INCAL
LOOPTRAN
3、19使用乘法指令时,特别要注意先判断就是用有符号数乘法指令还就是用无符号数乘
法指令,这就是为什么?
因为有符号数与无符号数,其数的乘法就是一样的。
但结果的符号取决于两
个操作数的符号。
3、20字节扩展指令与字扩展指令一般用在什么场合?
举例说明。
主要用于字节相除与字相除之前,把被除数扩展为两倍宽度的操作数。
3、21什么叫BCD码?
什么叫组合的BCD码?
什么叫非组合的BCD码?
8086汇编语言在对
BCD码进行加、减、乘、除运算时,采用什么方法?
BCD码为十进制编码的二进制数。
组合的BCD数就是把两位BCD加在一个字节
中,高位的在高4位。
非组合的BCD码就是把一位BCD数放在一个字节的低4位,高4位
为0。
8086在BCD加、减与乘法运算以后用BCD调整指令把结果调整为正确的BCD
数。
在BCD除法之前先用BCD调整指令再做除法、
3、22用普通运算指令执行BCD码运算时,为什么要进行十进制调整?
具体地讲,在
进行BCD码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整指令?
因为8086指令把操作数作为二进制数进行二进制运算,要得到正确的BCD结果,需要进行调整。
在加、减、乘法指令之后加上BCD调整指令,而在除法指令之前先用BCD调整指令再用除法指令。
第4章作业答案
4、1在下列程序运行后,给相应的寄存器及存储单元填入运行的结果:
MOVAL,1OH
MOVCX,100OH
MOVBX,2000H
MOV[CX],AL
XCHGCX,BX
MOVDH,[BX]
MOVDL,01H
MOV[BX],DL
HLT
寄存器及存储单元的内容如下:
AL=1OH
BL=OOH
BH=2OH
CL=OOH
CH=1OH
DH=1OH
(10O0H)=lOH
(200OH)=0lH
2、要求同题4、1,程序如下:
MOVAL,50H
MOVBP,100OH
MOVBX,200OH
MOV[BP],AL
MOVDH,20H
MOV[BX],DH
MOVDL,OlH
MOVDL,[BX]
MOVCX,300OH
AL=5OH
BH=20H
CH=30H
DL=20H
DH=2OH
BP=100OH
(10OOH)=5OH
(20OOH)=20H
4、3自1000H单元开始有一个100个数的数据块,若要把它传送到自200OH开始的存
储区中去,可以采用以下3种方法实现,试分别编制程序以实现数据块的传送。
(l)不用数据块传送指令
(2)用单个传送的数据块传送指令
(3)用数据块成组传送指令。
(1)LEASI,1OOOH
LEADI,200OH
MOVCX,100
L1:
MOVAX,[SI]
MOV[DI],AX
LOOPLl
(2)LEASI,100OH
LEADI,2000H
MOVCX,100
CLD
MOVSB
LOOPL1
(3)LEASI,100OH
LEADI,200OH
MOVCX,100
REPMOVSB
4、4利用变址寄存器,编写一个程序,把自1000H单元开始的100个数传送到自1070H
开始的存储区中去。
LEASI,100OH
LEADI,1070H
4、5要求同题4、4,源地址为2050H,目的地址为2000H,数据块长度为50、
LEASI,205OH
LEADI,200OH
MOVCX,50
REPMOVSB
4、6编写一个程序,把自100OH单元开始的100个数传送'
至105OH开始的存储区中
(注意:
数据区有重叠)。
LEASI,100OH
LEADI,1050H
ADDSI,63H
ADDDI,63H
STD
4、7在自0500H单元开始,存有100个数。
要求把它传送到1000H开始的存储区中,
但在传送过程中要检查数的值,遇到第一个零就停止传送。
LEASI,050OH
LEADI,10OOH
N1:
MOVAL,[SI]
CMPAL,0
JZN2
MOV[DI],AL
INCSI
INCDI
LOOPN1
N2:
4、14若在0500H单元中有一个数
(1)利用加法指令把它乘2,且送回原存储单元(假定X×
2后仍为一个字节);
(2)X×
4;
(3)X×
10(假定X×
l0≤255)、
(1)LEABX,050OH
MOVAL,[BX]
ADDAL,AL
MOV[BX],AL
(2)LEABX,0500H
(3)LEABX,050OH
MOVAL,[BX]
ADDAL,AL
MOVDL,AL
ADDAL,AL
ADDAL,DL
第5章作业答案
5、1总线周期的含义就是什么?
8086/8088CPU的基本总线周期由几个时钟组成?
如果
一个CPU的时钟频率为8MHz,那么,它的一个时钟周期就是多少?
一个基本总线周期就是多
少?
如果主频为5MHz呢?
CPLI访问总线(从内存储器或I/0端口读/写字节或字)所需的时间称为总线周期。
8086/8088CPU的基本总线周期由4个时钟组成。
若CPU的时钟频率为8(5)MHz,时钟周期为1/8MHz=125(1/5MHz=2O)ns,基本总线周期为4×
125(200)ns=500(800)ns
5、2在总线周期的TI、T2、T3、T4状态,CPU分别执行什么动作?
什么情况下需要插入
等待状态Tw?
Tw在哪儿插入?
怎样插入?
下面以存储器读为例进行说明。
在Tl周期:
输出地址信号、地址锁存允许信号、内存或I/O端口访问控制信号;
在T2周期:
CPIJ开始执行数据传送操作,此时,8086CPU内部的多路开关进行切换,将
地址/数据线AD15~AD0上的地址撤销,切换为数据总线,为读写数据作准备。
8288总线控制器发出数据总线允许信号与数据发送/接收控制信号DT/R允许数据收发器工作,使数据总线与8086CPU的数据线接通,并控制数据传送的方向。
同样,把地址/状态线A19/S6~A16/S3切换成与总线周期有关的状态信息,指示若干与周期有关的情况。
在T3周期:
开始的时钟下降沿上,8086CPU采样READY线。
如果READY信号有效(高电平),则在T3状态结束后进人TA状态。
在T4状态开始的时钟下降沿,把数据总线上的数据读入CPU或写到地址选中的单元。
在T4状态:
结束总线周期。
如果访问的就是慢速存储器或就是外设接口,则应该在Tl状态输出的地址,经过译码选中某个单元或设备后,立即驱动READY信号到低电平。
8086CPU在T3状态采样到READY信号无效,就会插入等待周期Tw,在Tw
状态CPU继续采样READY信号;
直至其变为有效后再进人T4状态,完成数据传送,结束总线周期。
在T4状态,8086CPU完成数据传送,状态信号S2~S0。
变为无操作的过渡状态。
在此期间,8086CPU结束总线周期,恢复各信号线的初态,准备执行下一个总线周期。
第7章作业答案
7、1外部设备为什么要通过接口电路与主机系统相连?
因为外部设备种类繁多,输入信息可能就是数字量、模拟量或开关量,而且输入速度、电平、功率与CPU差距很大。
所以,通常要通过接口电路与主机系统相连。
7、4CPU与输入输出设备之间传送的信息有哪几类?
CPU与输入输出设备之间传送的信息主要有3类。
(l)数据在微型计算机中,数据通常为8位、16位或32位。
(2)状态信息在输入时,有输入设备的信息就是否准备好;
在输出时有输出设备就是否有空,若输
出设备正在输出信息,则以忙指示等。
(3)控制信息例如,控制输入输出设备启动或停止等。
7、9设一个接口的输入端口地址为0100H,状态端口地址为0104H,状态端口中第5位
为1表示输入缓冲区中有一个字节准备好,可以输入。
设计具体程序以实现查询式
输入。
POLl:
INAL,0104H
ANDAL,20H
JZPOLl
INAL,0100H
第8章作业答案
8、1在中断响应过程中,8086CPU向8259A发出的两个RT互信号分别起什么作用?
CPU发出的第一个INTA脉冲告诉外部电路,其提出的中断请求已被响应,应准备将类型号发给CPU,8259A接到了这个INTA脉冲时,把中断的最高优先级请求置入中断状态寄存器(ISR)中,同时把IRR(中断请求寄存器)中的相应位复位。
CPU发出的第二个INTA脉冲告诉外部电路将中断的类型号放在数据总线上。
8、28086CPU最多可以有多少个中断类型?
按照产生中断的方法分为哪两大类?
8086CPU最多可以有256个中断类型。
按照产生中断的方法,可以分为内
部中断(软件中断)与外部(硬件中断)中断两大类。
8、9在编写中断处理子程序时,为什么要在子程序中保护许多寄存器?
因为在用户程序运行时,会在寄存器中有中间结果,当在中断服务程序中要
使用这些寄存器前要把这些寄存器的内容推至堆栈保存(称为保护现场)。
在从
中断服务程序返回至用户程序时把这些内容从堆找恢复至寄存器中(称为恢复现场)。
8、12若在一个系统中有5个中断源,其优先权排列为:
1、2、3、4、5,它们的中断服
务程序的入口地址分别为:
3000H、302OH、3050H、3080H、30AOH。
编写一个程序,
当有中断请求CPU响应时,能用查询方式转至申请中断的优先权最高的源的中断服
务程序。
若5个中断源的中断请求放在一中断状态寄存器中,按优先权分别放在状态的7
位(优先权最高)至位3中。
查询方法的程序段为:
INAL,STATUS
CMPAL,80H
JNEN1
JMP3000