资源描述:
《汇编语言 廖建明主编 第六章习题答案.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第六章习题答案6.1C6.2D6.3D6.4C6.5B6.6错。在L0:MOVAL,0语句后面加上RET语句6.7段内调用:保存IP内容入栈;更新IP内容段间调用:保存CS,IP内容入栈;更新CS,IP内容6.8段内返回:从栈中弹出一个字的内容送入IP寄存器;SP=(SP)+n(如果带有操作数n)段间返回:从栈中弹出两个字的内容分别送入IP,CS;SP=(SP)+n(如果带有操作数n)6.9从栈中弹出两个字的内容分别送入IP,CS;SP=(SP)+46.10在需要和主程序共享寄存器的时候需要保护寄存器6.11寄存器传递参数;堆栈传递参
2、数;地址表传递参数6.12相同点:都进行一次程序跳转不同点:CALL会保存原地址IP入栈,而JMP不会6.13错误:子程序是FAR类型的,CALL时用的是NEAR6.14BX;(BX);SHIFT6.15图略6.16DATASEGMENTNDB5DATAENDSSTACKSEGMENTDW20HDUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AXMOVAL,NCALLFACT;调用阶乘子程序计算5!MOVRESULT,DXDEC
3、NMOVAL,NCALLFACT;调用阶乘子程序计算4!ADDRESULT,DXDECNMOVAL,NCALLFACT;调用阶乘子程序计算3!ADDRESULT,DXMOVAH,4CHINT21HFACTPROCNEAR;阶乘子程序MOVDX,1CMPAL,0JZDONEPUSHAXDECALCALLFACTPOPAXMULDLMOVDX,AXDONE:RETFACTENDPCODEENDSENDBEGIN6.17略6.18(1)寄存器传值MOVAX,DATAMOVDS,AXMOVSI,OFFSETNUMMOVCX,COUNTMOVD
4、X,0CALLFMOVAH,4CHINT21HFPROCLOP:MOVDI,OFFSETNUM20ADDDI,DXINCDXXORBL,BLMOVAX,[SI]LOP20:CMPAX,20JCSUB5SUBAX,20INTBLJMPLOP20SUB5:MOV[DI],BLXORBL,BLLOP5:CMPAX,5JCSUB2SUBAX,5INTBLJMPLOP5SUB2:ADDDI,COUNT;DI=DI+2*COUNTMOV[DI],BLXORBL,BLLOP2:CMPAX,2JCSUB1SUBAX,2INTBLJMPLOP2SUB1
5、:ADDDI,COUNTSHL1;DI=DI+2*COUNTMOV[DI],BLXORBL,BLLOP1:CMPAX,1JCDONESUBAX,1INTBLJMPLOP1DONE:ADDDI,COUNTADDDI,COUNTADDDI,COUNT;DI=DI+3*COUNTMOV[DI],BLADDSI,2LOOPLOPRETFENDPEODEENDS(2)堆栈传值BEGIN:MOVAX,DATAMOVDS,AXMOVSI,OFFSETNUMMOVDIOFFSETNUM20MOVCX,COUNTPUSHSIPUSHDIPUSHCXCA
6、LLFMOVAH,4CHINT21HFPROCPUSHAXPUSHBXPUSHCXPUSHSIPUSHDIMOVBP,SPMOVCX,12[BP]MOVDI,14[BP]MOVSI,16[BP]LOP:XORBL,BLMOVAX,[SI]LOP20:CMPAX,20JCSUB5SUBAX,20INCBLJMPLOP20SUB5:MOV[DI],BLXORBL,BLLOP5:CMPAX,5JCSUB2SUBAX,5INCBLJMPLOP5SUB2:MOV[DI+COUNT],BLXORBL,BLLOP2:CMPAX,2JCSUB1SUB
7、AX,2INCBLJMPLOP2SUB1:MOV[DI+COUNT+COUNT],BLXORBL,BLLOP1:CMPAX,1JCDONESUBAX,1INCBLJMPLOP1DONE:MOV[DI+COUNT+COUNT+COUNT],BLADDSI,2INTDILOOPLOPRETFENDPCODEENDSENDBEGIN