《微计算机原理(第2版)第三章课后习题答案--潘名莲-马争-丁庆生-编著.docx》由会员分享,可在线阅读,更多相关《微计算机原理(第2版)第三章课后习题答案--潘名莲-马争-丁庆生-编著.docx(18页珍藏版)》请在课桌文档上搜索。
1、第三章80x86指令系统3-1指令由操作码字段和操作数字段组成。8086的指令长度在包范围。 MOV CX, DISPBX(3) MOV SI, AX(5) AND AX, DX(6) MOV AX, BX+10H(8) MOV AX, BX+SI+20H(9) MOV BP, CX3-2分别指出以下指令中源操作数和目的操作数的寻址方式。假设是存储器寻址,使用表达式表示出EA=?PA=?源操作数寻址目的操作数寻址EAPA1)MOVSI.2100H立即数寻址存放潜(2)MOVCX,DlSPfBXJ存放器相对寻址存放器BX+SISP(DS)*16+(BX+DISP)(3)MOV(SI),AX存放器
2、寻址存放器间接SI(DS)*16+(SI)(4)ADCZX,BXlISiJ基址变址寻址存放器BX+SI(DS)*I6+(BX)+(SJ)(5)ANDAX,DX存放器寻址存放器(6)MOVAX,IBX+1OH存放器相对寻址存放器BX+DISP(DS)*16+(BX)+IOH(7)MOVAX.ESrBXl带段超越存放器寻址存放器IBX(ES)*I6+(BX)(8)MOVAX,BX+SI+20H相对基址变址寻址存放器BX+SI+20H(DS)*16+(BX)+(SI)+20H(9)MOV(BP,CX存放器寻址存放器间接IBP(SS)*16+(BP)(10)PUSHDS固定寻址存放器SPJ(SS)*1
3、6+(SP)(I)MOVSI,2100H(4)ADCZX,BXSIMOVAX,ES:BX(10)PUSHDS解:3-38086中一些存放器的内容和一些存储器单元的内容如图3-1所示,试指出以下各条指令执行后,AX中的内容。(I)MOVAX, 2023H(4) MOVAX, BX MOVAX, 1100HBX+SI(2) MOVAX, BX(5) MOVAX, 1100HBX(8) MOVLEA AX, SI(3) MOVAX, 1200H(6) MOV AX, BXSI解:(1) (AX) =2023H(5) (AX) =4C2AH(2) (AX) =OlOOH(6) (AX) =7856H(
4、3)(AX)=4C2AH(4)(AX)=3412H(7)(AX)=65B7H(8)(AX)=0002HM30100H12H30101H34H30102H56H30103H78H3I200H2AH312O1H4CH31202HB7H31203H65HCPUOlOOH0002H3000H图3/3-4(AX)=2040H,(DX)=380H,端口(PORT)=(80H)=IFH,(PORT+1)=45H,执行以下指令后,指出结果等于多少?解:(I)OUTDX,AL(0380H)=40H(2)OUTDX,AX(380H)=40H(381h)=20H(3)INAL,PORT(AL)=IFH(4)INAX
5、,80H(AX)=451FH(5)OUTPORTI,AL(PORT1)=40H(6)OUTPORTl,AX(PORT1)=2040H3-5:(SS)=OA2F0H,(SP)=OOCOH,(AX)=8B31H,(CX)=0F213,试画出以下指令执行到位置1和位置2时堆栈区和SP指针内容的变化示意图。图中应标出存储单元的实际地址PAoPUSHAXPUSHCX;位置1POPF;位置2解:(SS)=OA2F0H,指令顺序依次编号为、,示意图如下图:(SS)=0A2F0H0A2FBCH13H+(SP)4=00BCH(位置1)F2H0A2FBEH31H一(SP)-2=00BEH(3)(SP)+2=00B
6、CH+0002H=00BEH(ifi2)8BH0A2FC0H(SP)=OOCOH3-6识别以下指令的正确性,对错误的指令,说明出错的原因。(1)MOVDS,100(Il)OUTCX5AL(2)MOV1000H,23H(12)INAX,38OH(3)MOV1000H,L2000H(13)MOVCU33OOH(4)MOVDATA,1133H(14)MOVAX,2100HBP(5)MOV1020H,DX(15)MOVDS,ES(6)MOVAX,0100H+BX+BPJ(16)MOVIP,2000H(7)MOVCS,AX(17)PUSHCS(8)PUSHAL(18)POPCS(9)PUSHWORDPT
7、RS1(19)LDSCS,BX(10)IN解:AU80H(20)MOVGAMMA,CS(1),不能对段存放器送立即数(11),应输出到端口而不是通用存放器(2),(3),(4),存储单元类型不正确MOV不能实现两个存储单元间直接传送段名不能作目的操作数(12),(13),(14)用DX做间址存放器380H应存DX类型不匹配(5),立即数不能作目的操作数(15),两个段存放器间不能直接传送(6),基址存放器BX和BP只能使用其中一个(16),(17)IP不能直接用作目的操作数(7),CS不能用作目的操作数(18),CS不能做目的操作数(8),(9)(10)X堆栈操作作为字操作AL应改为AX,80
8、H为输入端口号不加方括号(19),(20),目的操作数应是通用存放器而不能是段存放器CS符号名不能作为目的操作数3-7存储器数据段中的数据如图3-3所示。阅读以下的两个程序段后,答复:1 .每个程序段的运行结果是什么?2 .两个程序段各占多少字节的内容,执行时间是多少?(1)LESSI,NUMl(2)MOVAX,SIMOVAX,NUMlADDAX,4SIADDAX,NUM2MOV8SI,AXMOVSUM,AXADDSL2MOVAX,NUM1+2MOVAX,SIADCAX,NUM2+2ADCAX,4SIMOVSUM+2,AXMOV8SI,AX解:1、运行结果如下:(2)0AC6863A0(1)0
9、AC6863A0H2、时钟周期字节数(1)LESSI,NUMl2+EA24MOVAX,SI103ADDAX,41SI9+EA24MOV8SI,AX103ADDSL2434MOVAX,SI103ADCAX,4SI9+EA24MOV8SIJ,AX1024(2)MOVAX,NUMl103ADDAX,NUM29+EA24MOVSUM,AX9+EA24MOVAX,NUM1+29+EA2-4ADCAX,NUM2+29+EA24MOVSUM+2,AX9+EA24MNUMl48HDS41H16H28HNUM258H22H52H84HSUM图3-33-8数据如图3-3所示,数据的低位在前,按以下要求编写程序段:
10、1 .完成NUMl和单元NUM2两个字数据相加,和存放在NUMl中。2 .完成NUMl单元开始的连续4个字节数据相加,和不超过一字节,存放SUM单元。3 .完成NUMl单元开始的连续8个字节数据相加,和16位数,放在SUM和SUM+1两个单元(用循环)。4 .完成NUMl和NUM2的双倍精度字数据相加,和放在NUM2开始的字单元中。解:1、CLC1.EASI,NUMIMOVAX,WORDPTRSIADDAX,WORDPTRNUM2MOVWORDPTRSI,AXMOVAX,WORDPTRSI+2JADCAX,WORDPTRNUM2+2MOVWORDPTRSI+2,AXHLT2、LEASI,NUM
11、lMOVAL,SIADDAL,1S1ADDAL,2SIADDAL,3S1MOVSUM,ALHLT3、 CLCCLD1.EASI,NUMlMOVAL,SIMOVMOVXORAGA:MOVADCINCDECJNZMOVHLTAH,OCX,7BH,BHBL,1SIAX,BXSICXAGASUM,AX4、LEA1.EAMOVADDMOVMOVADCMOVSI,NUMlDI,NUM2AX,SIAX,DIDILAXAX,2SIAX,2D12DIJ,AX3-9的BCD数如图3-3所示,低位在前,按以下要求编写计算BCD数据为组合型BCD)的程序段。1 .完成从NUMl单元开始的连续8个组合型BCD数相加,和
12、(超过一字节)放在SUM和SUM+1两个单元中。2 .完成NUMI单元和NUM2单元的两个BCD数相减,其差存入SUM单元,差二?,(CF)=?解:1、CLCCLD1.EASI,NUMIMOVCX,7MOVAH,OMOVAL,SIAGA:INCSIADCAL,SIDAA1.OOPAGAMOVSUM,ALMOVSUM+1,AHHLT2、CLCMOVAH,OMOVAL,NUMISUBAL,NUM2DASMOVSUM,AL差=OFOH=-IOH,CF=I3-10写出以下程序段完成的数学计算公式,并画出数据存放的示意图。MOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2SUBAX,ZSB
13、BDX,Z+2MOVW,AXMOVW+2,DX解:W=x+-z,数据存放如下图:XX+2YY+2ZZ+2WW+23-11数据如图3-3所示,低位在前,按以下要求编写程序段1.NUMl和NUM2两个数据相乘(均为无符号数),乘积放在SUM开始的单元。2. NUMl和NUM2两个字数据相乘(均为无符号数),乘积放在SUM开始的单元。3. NUMl单元的字节数据除以13(均为无符号数),商和余数依次放入SUM开始的两个字节单元。4. NUMl单元的字节数据除以NUM2字单元的字,商和余数依次放入SUM开始的两个字节单元。解:1 .为32位X32位,极为64位2 .MOVAX,NUMlIMULNUM2
14、;积在(DX)(AX)中MOVSUM,AXMOVSUM+2,DX3 .MOVAL,NUMICBWMOVCL,ODHDIVCLMOVSUM,ALMOVSUM+1,AH4 .MOVAX,NUMlCWDIDlVNUM2MOVSUM,AXMOVSUM+2,DX3-12(L略)3-13(AL)=0C4H,DATA单元中的内容为5AH,写出以下每条指令单独执行后的结果。1.ANDAL,DATA5.ANDAL,OFH2.ORAL,DATA6.ORAL,OlH3.XORAL,DATA7.XORAL,OFFH4.NOTDATA8.TESTAL,80H解;1.(AL)=O1000000B=40H5.(AL)=04
15、H2.(AL)=ODEH6.(AL)=0C5H3.(AL)=1001111OB=9EH7.(AL)=3BH4.(DATA)=0A5H8.(AL)=0C4H,OF=0,CF=03-14用移位循环指令,编写完成以下功能的程序段(结果放回原处)1.将无符号数83D分别乘2和处2.5 .将带符号数47D分别乘2和除2.6 .将图3-3中NUMI双字乘2和除2.7 .将图3-3中从NUMl开始的4个字乘2.解:1. MOVAL,53HSHLAL,IMOVAL,53HSHRAL,12. MOVAL,ODlHSALAL,IMOVAL,ODlHSARAL,13. MOVAX,NUMlMOVDX,NUMl+2S
16、HLAX,IRCLDX,1MOVAX,NUMIMOVDX,NUM1+2SARDX,1RCRAX,14. SALNUMl,1RCLNUM1+2,1RCLNUMI+4,1RCLNUMI+6,13-15编写完成以下功能的程序段,并指出运行后,其标志CF、ZF、SF和OF的状态是什么?1.BCD数58322 .无符号数3AH3AH3 .带符号数79-(-57)4 .带符号数一32+(42)解:1. MOVAL,58HSUBAL,32HDASCF=O,ZF=O,SF=O,OF=O2. MOVAL,3AHSUBAL,3AHCF=O,ZF=I,SF=O,OF=O3. X=79D,Y=57D那么【X】补=O1
17、00lnI,【丫】补=IIoOolIl所以X补一Y补=X补+卜丫补=10001000MOVAL,79MOVBL,-57SUBAL,BLCF=O,ZF=O,SF=LOF=I4. MOVAL,0F3HMOVBL,2AHADDAL,BL或者MOVAL,0F3HADDAL,2AHCF=O,ZF=O,SF=O,OF=O3-16用循环移位指令实现以下功能,设(AX)=0C3H1 .设(CL)=8,移位前、后AX内容不变2 .设(CL)=9,移位前、后AX内容不变3 .将AX中高4位和低4位交换位置4 .将AX中高4位放到低4位上,而高4位置O解:1. MOVCL,8ROLAL,CL(或者RORAL,CL)
18、2. MOVCL,9RCLAL,CL(或者RCRAL,CL)3. MOVBX,AXANDAX,OFFOHXCHGBH,BLMOVCL,4ROLBH,CLROLBL,CLANDBH,OFOHANDBL,OFHORAX,BX4. 本小题可以多种解法:解1:5. MOVBX,AXANDAX,OFFOHXCHGBH,BLMOVCL,4ROLBH,CLROLBL,CLANDBH,0ANDBL,OFHORAX,BX解2:MOVBX,AXXCHGAH,ALMOVCL,4RORAX,CLSHRAH,CLANDAL,OFHANDBL,OFOHORAL,BL3-17写出以下程序段执行后的结果:(AL)=?(DL)
19、=?完成的是什么功能?MOVCL,4MOVAL,87MOVDL,ALMOVAL,OFHORAL,30HSHRDL,CLORDL,30H解:完成与、或、移位等逻辑运算,运算结果:IAL)=37H;(DL)=35H3-18用乘法指令和用传送、移位、相加指令分别实现Y=IOX的运算,设X=12H,分别编写这两个程序段。解:(1) MOVAUXMOVCL,10NULCL(2) MOVAL,XSALAL,I;(AL)=2*XMOVBL,AL;(BL)=X*2SALAL,1;(AL)=4*XSALAL,1;(AL)=8*XADDAL,BL;(AL)=8*X+2*X=10*X3-19写出下面指令序列完成的数
20、学计算是什么?MOVCL,3SHLAX,CLSHLBL5CLSHLCX,CLSHLDH,CL解:将一多精度数(6字节)乘以83-20写出以下能代替重复串操作指令完成同样功能的指令序列。(1) REP(2) REP(3) REP(4) REP(5) REP 解:(1) LEA LEA MOV CLDAGA: MOV MOV INCMOVSWCMPSBSCASB1.ODSWSTOSBSI,AREAlDI,AREA2CX,NAX,DS:S1ES:DI,AXSIINCSIINCDIINCDIDECCXJNZAGARETLEASLVARl1.EADI,VAR2MOVCX,NCLDNEXT:CMPSBJN
21、ZFIN1.OOPNEXTRETMOVDl,OFFSETCOMMANDMOVAL,“MOVCX,NCLDNEXT:SCASBJZFOUNDLOOPNEXTRET(4)MOVSI,OFFSETBUFMOVCX,NCLDNEXT:LODSWMOVRES,AX1.OOPNEXTRETMOVDl,OFFSETBUFMOVCX,NCLDNEXT:STOSBDECCXJNZNEXTRET3-21欲将数据段中自AREAl中的100个字数据搬到附加段中以AREA2开始的区中,用下面的3种传送指令编写程序段:1.用MoV指令;2.用根本串传送指令;3.用重更串传送指令解:SLAREAlDI, AREA2CX,
22、100AX, SIES:DI, AXSISIDIDICXAGAIN1.LEALEAMOVCLDAGAIN:MOVMOVINCINCINCINCDECJNZRET2.MOVSI,OFFSETAREAlMOVDI,OFFSETAREA2MOVCX,100CLDAGAIN:MOVSAREA2,AREAlDECCXJNZAGAINRET3. MOVSI,OFFSETAREAlMOVDI,OFFSETAREAA2CLDMOVCX,100REPMOVSBRET3-22假定在数据段中字符串和未知字符串的定义如下:STR1NG1DBMESSAGEANDPROCCESS,STR1NG2DB20DUP(?)用串操
23、作指令编写完成以下功能的程序段(设DS和ES重叠);1 .从左到右把STR1NG1中的字符串搬到STRING2中;2 .从右到左把STR1NG1中的字符串搬到STRING2中;3 .搜索STRINGl字符串中是否有空格。如有,记下第一个空格的地址,并放入BX中;4 .比拟STRING1和STRING2字符串是否相同。解:1. MOVSI,OFFSETSTRINGIMOVDI,OFFSETSTRING2MOVCX,20洪20个字符CLD;从左到右就是增址方向,设置DF-OREPMOVSSTRING2,STRING12. MOVSI,OFFSETSTRINGI+13HMOVDI,OFFSETSTR
24、ING2+13HMOVCX,20STD;从右到左为减址方向,设置DF-OREPMOVSSTRING2+13H,STR1NG1+I3H3. MOvdi,OffsetstringiMOVCX,20MOVAL,20H;空格字符的ASCII码CLDREPNZSCASBJZFOUNDMOVDI,0JMPDONEFOUND;DECDI;因SCASB的功能是:(1)(AL)DI(2)DI*-D1+1MOVBX,DIDENE:HLT4.MOVSloffsetstringiMOVDI,OFFSETSTRING2MOVCLDCX,20REPZCMPSBJNZUMMATMOVAL,0JMPOUTPUTUMMAT:M
25、OVAL,OFFHOUTPUT:MOVRESULT,ALRET3-23下面两条短转移指令的转移地址ADDRI和ADDR2分别是多少(用十六进制表示)?1.0220EBOajmpaddri2.0230EBF7JMPADDR2解:1.e为当前IP与目的地址的距离。位移量e的计算公式:e=目的地址一IP源+2),即OAH=目的地址一(IP源+23)=ADDRl-0222H所以,ADDR1=0AH+0222H=022CH(正向转移)2.e=目的地址一(IP源+2)0F7H=ADDR2-0232H所以,ADDR2=0F7H+0232H=0229H(负向转移)3-24NEARJMP,SHORTJMP,LO
26、OP和条件转移指令的转移范围是多少?解:(1)NEARJMP:目标地址距JMP指令+32767-32768字节范围以内。(2) SHORTJMP:目标地址距JMP指令+127-128字节范围以内。(3) 1.OOP:所转去的目标地址在+I27-128字节范围以内,为LOOPSHoRT_LABEL(4)条件转移指令:目的地址OPRD为近标号,即转向的目标地址必须在转移指令的+127128字节范围以内。2-25设AX和CX中的内容为无符号数,BX和DX中的内容为带符号数,试用CMP指令和条件转移指令实现以下判断:1.假设(AX)超过(CX),那么转至BIGER。2.假设(BX)(DX),那么转至B
27、lGE。3.假设(CX)低于(AX),那么转至LESS。4.假设(DX)(BX),那么转至LESS。5.假设(AX)=(CX),那么转至EQUALo解:1.CMPAX,CXJABIGER2. CMPBX,DXJGBIGER3. CMPCX,AXJBLESS4. CMPDX,BXJLLESS5. CMPAX,CXJZEQUAL3-26(略)3-27试编写一个程序段,能完成以下数学表达式的功能-1(X-l)X=Io(-1X1)(Xl)解1:MOVAL,XCMPAU-IJLEANSICMPALJJLANS2JMPANS3ANSI:MOVSIlr1ANS2:MOVS2L0RETANS3:MOVS3L+
28、IDONE:RET解2:MOVAL,XCMPAL,OFFHJLELOONlCMPAL,1JGEL00N2MOVAUOMOVX,ALJMPNEXTLOON1:MOVAL,OFFHMOVX,ALJMPNEXTL00N2:MOVAL,IMOVX,ALNEXT:RET3-288086的中断机构中共允许辿级中断,其专用的中断有5个,分别为类型0类型43-29试比拟转移指令,调用指令和中断指令操作的异同处。解:这3种指令其共同处是改变了程序指令执行的顺序,从一条指令跳到另一条指令。其中,转移指令跳转后一般不会返回原指令的下一条指令;而调用指令在子程序执行完毕后会返回原指令的下一条指令继续执行;中断指令是在
29、CPU遇到中断产生后,停止当前指令的执行,在处理完中断效劳程序后,继续从执行中断前的指令处开始运行。3-30用DOS系统功能调用编写一个程序,能将3-17题中的结果在屏幕上显示出来。解:3-17题的结果是:(AL)=37H,(DL)=35H4,程序如下:MOVBL,ALMOVDL,DHMOVDH,DLMOVCL,4MOVCL,4SHRDL,CLSHRAL,CLORDL,30HORAL,30HMOVAH,02HMOVDL,ALINT21HMOVAH,02HMOVDL,OFHINT21HORDL,30HMOVAL,OFHMOVAH,02HORALJOHMOVAH,02HINT21HHLTINT21H3-31(略)3-32(略)3-33试写出80386/80486CPU执行以下指令后,AX=?,BX=?(1) MOVAX,0000MOVBXJ23HSHLDAX,BX,8(2) MOVAX,0000MOVBX,123HMOVCL,OCHSHRDAX,BX,CL解:(1)AX=OOl2H,BX1234H(2)AX=O123H,BX=1234H3-34试写出80386/80486CPU执行以下指令后,标志CF=?MOVEAX,96ABDC86HBTEAX,14H解:CF=O