微计算机原理第2版第三章课后习题答案潘名莲马争丁庆生编著备课讲稿Word文件下载.docx
《微计算机原理第2版第三章课后习题答案潘名莲马争丁庆生编著备课讲稿Word文件下载.docx》由会员分享,可在线阅读,更多相关《微计算机原理第2版第三章课后习题答案潘名莲马争丁庆生编著备课讲稿Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。
(7)MOVAX,1100H[BX+SI](8)MOVLEAAX,[SI]
(1)(AX)=2010H
(2)(AX)=0100H(3)(AX)=4C2AH(4)(AX)=3412H
(5)(AX)=4C2AH(6)(AX)=7856H(7)(AX)=65B7H(8)(AX)=0002H
M
30100H
12H
30101H
34H
30102H
56H
30103H
78H
……
31200H
2AH
31201H
4CH
31202H
B7H
31203H
65H
CPU
BX
0100H
SI
0002H
DS
3000H
图3-1
3-4已知(AX)=2040H,(DX)=380H,端口(PORT)=(80H)=1FH,(PORT+1)=45H,执行下列指令后,指出结果等于多少?
(1)OUTDX,AL(0380H)=40H
(2)OUTDX,AX(380H)=40H(381h)=20H
(3)INAL,PORT(AL)=1FH
(4)INAX,80H(AX)=451FH
(5)OUTPORT1,AL(PORT1)=40H
(6)OUTPORT1,AX(PORT1)=2040H
3-5已知:
(SS)=0A2F0H,(SP)=00C0H,(AX)=8B31H,(CX)=0F213,试画出下列指令执行到位置1和位置2时堆栈区和SP指针内容的变化示意图。
图中应标出存储单元的实际地址PA。
PUSHAX
PUSHCX;
位置1
POPF;
位置2
已知(SS)=0A2F0H,指令顺序依次编号为①、②、,示意图如图所示:
(SS)=0A2F0H
0A2FBCH
13H
←②(SP)-4=00BCH(位置1)
F2H
0A2FBEH
31H
←①(SP)-2=00BEH③(SP)+2=00BCH+0002H=00BEH(位置2)
8BH
0A2FC0H
(SP)=00C0H
3-6识别下列指令的正确性,对错误的指令,说明出错的原因。
(1)MOVDS,100
(2)MOV[1000H],23H
(3)MOV[1000H],[2000H]
(4)MOVDATA,1133H
(5)MOV1020H,DX
(6)MOVAX,[0100H+BX+BP]
(7)MOVCS,AX
(8)PUSHAL
(9)PUSHWORDPTR[SI]
(10)INAL,[80H]
(11)OUTCX,AL
(12)INAX,380H
(13)MOVCL,3300H
(14)MOVAX,2100H[BP]
(15)MOVDS,ES
(16)MOVIP,2000H
(17)PUSHCS
(18)POPCS
(19)LDSCS,[BX]
(20)MOVGAMMA,CS√
(1)×
,不能对段寄存器送立即数
(2)×
,存储单元类型不正确
(3)×
,MOV不能实现两个存储单元间
直接传送
(4)×
,段名不能作目的操作数
(5)×
,立即数不能作目的操作数
(6)×
,基址寄存器BX和BP只能使用其
中一个
(7)×
,CS不能用作目的操作数
(8)×
,堆栈操作作为字操作AL应改为
AX
(9)√
(10)×
,80H为输入端口号不加方括号
(11)×
,应输出到端口而不是通用寄存器
(12)×
,用DX做间址寄存器380H应存
DX
(13)×
,类型不匹配
(14)√
(15)×
,两个段寄存器间不能直接传送
(16)×
,IP不能直接用作目的操作数
(17)√
(18)×
,CS不能做目的操作数
(19)×
,目的操作数应是通用寄存器而不
能是段寄存器CS
(20)×
,符号名不能作为目的操作数
3-7已知存储器数据段中的数据如图3-3所示。
阅读下列的两个程序段后,回答:
1.每个程序段的运行结果是什么?
2.两个程序段各占多少字节的内容,执行时间是多少?
(1)LESSI,NUM1
MOVAX,[SI]
ADDAX,4[SI]
MOV8[SI],AX
ADDSI,2
ADCAX,4[SI]
(2)
MOVAX,NUM1
ADDAX,NUM2
MOVSUM,AX
MOVAX,NUM1+2
ADCAX,NUM2+2
MOVSUM+2,AX
1、运行结果如下:
(1)0AC6863A0H
(2)0AC6863A0
2、时钟周期字节数
(1)LESSI,NUM12+EA2~4
MOVAX,[SI]103
ADDAX,4[SI]9+EA2~4
NUM1
48H
41H
16H
28H
NUM2
58H
22H
52H
84H
SUM
MOV8[SI],AX103
ADDSI,243~4
MOVAX,[SI]103
ADCAX,4[SI]9+EA2~4
MOV8[SI],AX102~4
(2)MOVAX,NUM1103
ADDAX,NUM29+EA2~4
MOVSUM,AX9+EA2~4
MOVAX,NUM1+29+EA2~4
ADCAX,NUM2+29+EA2~4
MOVSUM+2,AX9+EA2~4
图3-3
3-8已知数据如图3-3所示,数据的低位在前,按下列要求编写程序段:
1.完成NUM1和单元NUM2两个字数据相加,和存放在NUM1中。
2.完成NUM1单元开始的连续4个字节数据相加,和不超过一字节,存放SUM单元。
3.完成NUM1单元开始的连续8个字节数据相加,和16位数,放在SUM和SUM+1两个单元(用循环)。
4.完成NUM1和NUM2的双倍精度字数据相加,和放在NUM2开始的字单元中。
1、CLC
LEASI,NUM1
MOVAX,WORDPTR[SI]
ADDAX,WORDPTRNUM2
MOVWORDPTR[SI],AX
MOVAX,WORDPTR[SI+2]
ADCAX,WORDPTRNUM2+2
MOVWORDPTR[SI+2],AX
HLT
2、LEASI,NUM1
MOVAL,[SI]
ADDAL,1[SI]
ADDAL,2[SI]
ADDAL,3[SI]
MOVSUM,AL
3、CLC
CLD
MOVAH,0
MOVCX,7
XORBH,BH
AGA:
MOVBL,1[SI]
ADCAX,BX
INCSI
DECCX
JNZAGA
4、LEASI,NUM1
LEADI,NUM2
ADDAX,[DI]
MOV[DI],AX
MOVAX,2[SI]
ADCAX,2[DI]
MOV2[DI],AX
3-9已知的BCD数如图3-3所示,低位在前,按下列要求编写计算BCD数据(为组合型BCD)的程序段。
1.完成从NUM1单元开始的连续8个组合型BCD数相加,和(超过一字节)放在SUM和SUM+1两个单元中。
2.完成NUM1单元和NUM2单元的两个BCD数相减,其差存入SUM单元,差=?
,
(CF)=?
1、CLC
AGA:
ADCAL,[SI]
DAA
LOOPAGA
MOVSUM+1,AH
2、CLC
MOVAH,0
MOVAL,NUM1
SUBAL,NUM2
DAS
MOVSUM,AL
差=0F0H=-10H,CF=1
3-10写出下列程序段完成的数学计算公式,并画出数据存放的示意图。
X
X+2
Y
Y+2
Z
Z+2
W
W+2
MOVAX,X
MOVDX,X+2
ADDAX,Y
ADCDX,Y+2
SUBAX,Z
SBBDX,Z+2
MOVW,AX
MOVW+2,DX
W=X+Y-Z,数据存放如图所示:
3-11已知数据如图3-3所示,低位在前,按下列要求编写程序段
1.NUM1和NUM2两个数据相乘(均为无符号数),乘积放在SUM开始的单元。
2.NUM1和NUM2两个字数据相乘(均为无符号数),乘积放在SUM开始的单元。
3.NUM1单元的字节数据除以13(均为无符号数),商和余数依次放入SUM开始的两个字节单元。
4.NUM1单元的字节数据除以NUM2字单元的字,商和余数依次放入SUM开始的两个字节单元。
1.为32位×
32位,极为64位
2.MOVAX,NUM1
IMULNUM2;
积在(DX)(AX)中
MOVSUM+2,DX
3.MOVAL,NUM1
CBW
MOVCL,0DH
DIVCL
4.MOVAX,NUM1
CWD
IDIVNUM2
3-12(L略)
3-13已知(AL)=0C4H,DATA单元中的内容为5AH,写出下列每条指令单独执行后的结果。
1.ANDAL,DATA
2.ORAL,DATA
3.XORAL,DATA
4.NOTDATA
5.ANDAL,0FH
6.ORAL,01H
7.XORAL,0FFH
8.TESTAL,80H
解;
1.(AL)=01000000B=40H
2.(AL)=0DEH
3.(AL)=10011110B=9EH
4.(DATA)=0A5H
5.(AL)=04H
6.(AL)=0C5H
7.(AL)=3BH
8.(AL)=0C4H,OF=0,CF=0
3-14用移位循环指令,编写完成以下功能的程序段(结果放回原处)
1.将无符号数83D分别乘2和处2.
2.将带符号数-47D分别乘2和除2.
3.将图3-3中NUM1双字乘2和除2.
4.将图3-3中从NUM1开始的4个字乘2.
1.MOVAL,53H
SHLAL,1
MOVAL,53H
SHRAL,1
2.MOVAL,0D1H
SALAL,1
MOVAL,0D1H
SARAL,1
3.MOVAX,NUM1
MOVDX,NUM1+2
SHLAX,1
RCLDX,1
MOVDX,NUM1+2
SARDX,1
RCRAX,1
4.SALNUM1,1
RCLNUM1+2,1
RCLNUM1+4,1
RCLNUM1+6,1
3-15编写完成以下功能的程序段,并指出运行后,其标志CF、ZF、SF和OF的状态是什么?
1.BCD数58—32
2.无符号数3AH—3AH
3.带符号数79—(—57)
4.带符号数—32+(42)
1.MOVAL,58H
SUBAL,32H
CF=0,ZF=0,SF=0,OF=0
2.MOVAL,3AH
SUBAL,3AH
CF=0,ZF=1,SF=0,OF=0
3.已知X=79D,Y=57D则【X】补=01001111,【Y】补=11000111
所以[X]补—[Y]补=[X]补+[-Y]补=10001000
MOVAL,79
MOVBL,-57
SUBAL,BL
CF=0,ZF=0,SF=1,OF=1
4.MOVAL,0F3H
MOVBL,2AH
ADDAL,BL
或者
MOVAL,0F3H
ADDAL,2AH
3-16用循环移位指令实现下列功能,设(AX)=0C3H
1.设(CL)=8,移位前、后AX内容不变
2.设(CL)=9,移位前、后AX内容不变
3.将AX中高4位和低4位交换位置
4.将AX中高4位放到低4位上,而高4位置0
1.MOVCL,8
ROLAL,CL(或者RORAL,CL)
2.MOVCL,9
RCLAL,CL(或者RCRAL,CL)
3.MOVBX,AX
ANDAX,0FF0H
XCHGBH,BL
MOVCL,4
ROLBH,CL
ROLBL,CL
ANDBH,0F0H
ANDBL,0FH
ORAX,BX
4.本小题可以多种解法:
解1:
5.MOVBX,AX
ANDBH,0
解2:
MOVBX,AX
XCHGAH,AL
MOVCL,4
RORAX,CL
SHRAH,CL
ANDAL,0FH
ANDBL,0FOH
ORAL,BL
3-17写出下列程序段执行后的结果:
(AL)=?
(DL)=?
完成的是什么功能?
MOVCL,4
MOVAL,87
MOVDL,AL
MOVAL,0FH
ORAL,30H
SHRDL,CL
ORDL,30H
完成与、或、移位等逻辑运算,运算结果:
(AL)=37H;
(DL)=35H
3-18用乘法指令和用传送、移位、相加指令分别实现Y=10X的运算,设X=12H,分别编写这两个程序段。
(1)MOVAL,X
MOVCL,10
NULCL
(2)MOVAL,X
SALAL,1;
(AL)=2*X
MOVBL,AL;
(BL)=X*2
SALAL,1;
(AL)=4*X
(AL)=8*X
ADDAL,BL;
(AL)=8*X+2*X=10*X
3-19写出下面指令序列完成的数学计算是什么?
MOVCL,3
SHLAX,CL
SHLBL,CL
SHLCX,CL
SHLDH,CL
将一多精度数(6字节)乘以8
3-20写出下列能代替重复串操作指令完成同样功能的指令序列。
(1)REPMOVSW
(2)REPCMPSB
(3)REPSCASB
(4)REPLODSW
(5)REPSTOSB
(1)LEASI,AREA1
LEADI,AREA2
MOVCX,N
MOVAX,DS:
[SI]
MOVES:
[DI],AX
INCDI
DECCX
JNZAGA
RET
(2)LEASI,VAR1
LEADI,VAR2
NEXT:
CMPSB
JNZFIN
LOOPNEXT
RET
(3)MOVDI,OFFSETCOMMAND
MOVAL,‘’
SCASB
JZFOUND
(4)MOVSI,OFFSETBUF
LODSW
MOVRES,AX
(5)MOVDI,OFFSETBUF
STOSB
JNZNEXT
RET
3-21欲将数据段中自AREA1中的100个字数据搬到附加段中以AREA2开始的区中,用下面的3种传送指令编写程序段:
1.用MOV指令;
2.用基本串传送指令;
3.用重复串传送指令
1.LEASI,AREA1
MOVCX,100
AGAIN:
INCDI
JNZAGAIN
2.MOVSI,OFFSETAREA1
MOVDI,OFFSETAREA2
MOVSAREA2,AREA1
3.MOVSI,OFFSETAREA1
MOVDI,OFFSETAREAA2
REPMOVSB
3-22假定在数据段中已知字符串和未知字符串的定义如下:
STRING1DB‘MESSAGEANDPROCCESS’
STRING2DB20DUP(?
)
用串操作指令编写完成下列功能的程序段(设DS和ES重叠);
1.从左到右把STRING1中的字符串搬到STRING2中;
2.从右到左把STRING1中的字符串搬到STRING2中;
3.搜索STRING1字符串中是否有空格。
如有,记下第一个空格的地址,并放入BX中;
4.比较STRING1和STRING2字符串是否相同。
1.MOVSI,OFFSETSTRING1
MOVDI,OFFSETSTRING2
MOVCX,20;
共20个字符
CLD;
从左到右就是增址方向,设置DF←0
REPMOVSSTRING2,STRING1
2.MOVSI,OFFSETSTRING1+13H
MOVDI,OFFSETSTRING2+13H
MOVCX,20
STD;
从右到左为减址方向,设置DF←0
REPMOVSSTRING2+13H,STRING1+13H
3.MOVDI,OFFSETSTRING1
MOVAL,20H;
空格字符的ASCII码
REPNZSCASB
MOVDI,0
JMPDONE
FOUND;
DECDI;
因SCASB的功能是:
(1)(AL)——[DI]
(2)DI←[DI]+1
MOVBX,DI
DENE:
HLT
4.MOVSI,OFFSETSTRING1
REPZCMPSB
JNZUMMAT
MOVAL,0
JMPOUTPUT
UMMAT:
MOVAL,0FFH
OUTPUT:
MOVRESULT,AL
3-23下面两条短转移指令的转移地址ADDR1和ADDR2分别是多少(用十六进制表示)?
1.0220EB0AJMPADDR1
2.0230EBF7JMPADD