《微计算机原理(第2版)第四章课后习题答案--潘名莲-马争-丁庆生-编著.docx》由会员分享,可在线阅读,更多相关《微计算机原理(第2版)第四章课后习题答案--潘名莲-马争-丁庆生-编著.docx(16页珍藏版)》请在优知文库上搜索。
1、第四章汇编语言程序设计4-1汇编语言程序设计的几个步骤是:解:编写汇编语言程序的过程根本上与编写高级语言程序的过程是相同的。(1)从实际问题抽象出数学模型;(2)确定解决该数学模型的方法,选择最正确算法;(3)画出流程图,根据算法把解决问题的思路和方法用图形表示出来;(4)分配内存工作单元和存放器;(5)根据流程图编制程序;(6)上机调试,检测和排错。4-2计算以下表达式的值(A1=5OH,B1=20,Gl=2)。(1) A1*JOO+B1(2)AlMODG1+B1(3)(Al+2)*Bl-24)B1/3MOD5(2) (5)(AI+3)*(BlMODGl)(6)AlGTGl(7)BlAND7
2、(8)BlSHL2+G1SHR1解:(1)502020(3)1038(4)1(5)0(6)OFFFFH(7)04H(8)51H4-3数据段定义如下,设该段从03000H开始。DSEGSEGMENTARRAYlDB2DUP(0,I,?)ARRAY2DW100DUP(?)FHZEQU20HARRAY3DB10DUP(0,1,4DUP(2),5)DSEGENDS试用分析运算符OFFSET、SEGLENGTH.TYPE、SIZE求出ARRY1、ARRY2.ARRY3的段、偏移量和类型,以及它们的LENGTHSIZE解:变量名OFFSETSEGTYPELENGTHSIZEARRYl00300H122(2
3、1)ARRY206H0300H2100200(1002)ARRY3206=0CEH0300H1IO10(10l)4-4(略)4-5以下语句汇编后,变量CON1,CoN2和CoN3的内容分别是多少?Nl=IOCONl00CON2FF00CON3FFN2=5N3=3CONlDB(NIANDN2ORN3)GEOFHC0N2DW(N2ANDN1XORN3)LEOFHC0N3DB(NIMODN3)LT(N2SHR1)解:如下图4-6设有一个已定义的数据段如下:DATASEGMENTVARlDB99VAR2DB99,ADRDWVARI,VAR2DATAENDS假设要使ADR+2的字单元中存放内容为“002
4、2H”,上述空白处应填入什么语句?解:ORG0020H4-7下述程序段执行后,存放器CX,Sl的内容是多少?ARRYDW20DUP(5)XORAX,AXMOVCX,LENGTHARRYMOVSI,SIZEARRY-TYPE解:(CX)=14H(SI)=26H4-8试定义一个结构,它应包括一个学生的以下信息:姓名、学号、及3门课程的成绩。然后给出3条机构预置语句,将3个学生的情况送入3个结构变量中。解:STUDSTRUC;定义一个结构,结构名为STUDNAMElDB;姓名字段NUMDB?;学号字段SCORDB3DUP(?);三门课程成绩字段STUDENDSDATASEGMENT;在数据段中通过三
5、个结构变量引用,并赋值STUDlSTUD;结构变量名STUDlSTUD2STUD;结构变量名STUD2STUD3STUD;结构变量名STUD3DATAENDS4-9试定义一条宏指令,它可以实现任一数据块的传送假设无地址重叠),其源地址、目的地址和块长度作为参数处理。解:根据要求,子程序的入口参数有:源数据区和目的数据区的首址以及数据块的大小(包含的字节数)。假设参数传递采用固定内存单元传递方式。SADR源数据区首地址;DADR目的数据区首地址;SLENG一一数据块长度。程序如下:SMOVEMACROSADR,DADR,SLENGASSUMECS;CODELDSSLSADRLESDLDADRMO
6、VCX,SLENGCLDCMPSI,DIJAMOVESTDADDSLCXDECSIADDDI,CXDECDIMOVE:MOVSBLOOPMOVERETENDM4-10设VARl和VAR2为字变量,LAB为标号,试判断以下指令的正误,并改正:(I)ADDVARlVA2(2)JNZVARl(3)SUBAL,VARl(4)JMPNEARLAB(5)JMPLABSI(6)MOVAL,VAR2解:(1)错,ADD的两个操作数不能同时为存储单元。改:MOVAX,VARlADDAX,VAR2错,JCC后面应该是标号,不应该是变量改:JNZLAB错,两个操作数不匹配改:SUBAX,VARl(4)错,缺少PTR
7、运算符改:JMPNEARPTRLAB(5)错,LAB与SI不能相加改:JMPFARPTRLAB或者JMPWORDPTRSI(6)错,操作数类型不匹配改:MOVAX,VAR24-11数据定义如下,问LI和L298等于多少?BlDB1,2,3,123B2DBO1.lEQU$Bl1.2EQUB2Bl解:Ll=$B1=70=7,L2=B2-Bl=6-0=64-12对于以下数据定义,指出以下指令的错误。AlDB?A2DB10KlEQU1024(I)MOVKl,AX(2) MOVAl,AX(3) MOVBX,AlMOVBX,1000(4) CMPAl,A2(5) KlEQU2048解:(I)KI为名称,表
8、示一立即数,不能做为目的操作数。(2)Al为字节型,类型不匹配(3)类型不匹配(4)源和目的操作数不能同为存储器操作数(5)对己经被EQU定义的Kl,在本程序段不能二次定义4-13试编程计算Z=5X+3Y+10.X,丫均放在数据段,其值由编程者自定。结果Z仍放在数据段。解:DATASEGMENTXDB10YDB5ZDW?DATAENDSSTACKSEGMENTPARASTACKSTACKSTACKCODEDW20HDUP(0)ENDSSEGMENTASSUMECS:CODE,DS:DATA,SS:STACKMAINPROCFARPUSHDSMOVAX,0PUSHAXSTART:MOVAX,DA
9、TAMOVDS,AXMOVAL,XMOVBL,YMULBL;X*5MOVDX,AX;转存至DXMOVAL,YMOVBL,3MULBL;Y*3,积在AX中ADDAL,OAHADDAX,DXMOVZ,AX;结果仍放数据段RETMAINENDPCODEENDSENDSTART4-14(略)4-15用查表法将存放于数据段中一个有序的十六进制数串(范围:OFH)翻译成ASSil码表仍放于数据段中.解:DATASEGMENTTABDB30H,31H,32H,36H,37HDB38H,39H,41H,45H,46HHEXDB6ASCDB?DATAENDSSTACKlSEGMENTPARAtATACK,DW2
10、OHDUP(O)STACKlENDSCODESEGMENTASSUMECSiCODE,DSiDATA,SS:STACKlBEGIN:MOVAX,DATAMOVDS,AXMOVBX,OFFSETTAB;设置ASCll码表的基地址在BX中XORAX,AXMOVAL,HEX;要查找的一位十六进制数在AL中ADDBX,AX;基址+偏移置即可计算出该十六进制数ASCII码存放地址MOVAUBX;该地址单元的内容即为要查找的ASCn码MOVASC,AL;存放ASCn码至ASC字节单元MOVAH,4CHINT21HCODEENDSENDBEGIN4-16试编写一程序,把X和Y中的大者存入BIG单元。假设X=
11、Y,那么把其中之一存入BIG单元。解:DATASEGMENTXDW1028YDW1446BIGDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,XMOVBX,YCMPAX,BXJGESTORE;取字数据X至AX;取字数据Y至BX;比拟(AX)和;假设(AX);假设(AX)(BX)(BX),那么转STc)RE处执行XCHGAX,BX(BX),那么(AX)(BX)STORE:MOVBIG,AXMOVAH,4CHINT21H;存结果至BlG字单元CODEENDSENDSTART4-17试编制一程序,比拟S
12、TRlNGI和STRlNG2所含字符是否完全相同,假设相同显示“MATCH,反之,那么显示“NOMATCH。试编写该程序。解:DATASTRlSTR2MYESDATACODESEGMENTDBCOMPUTDBCONPUTDBtMATCH,ODH,OAH,$ENDSSEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,6MovsiOffsetstri;设置字符串STRl的地址指针SlMOVDI,OFFSETSTR2;设置字符串STR2的地址指针DlCLDREPECMPSB;字符串一致时,重复比拟,在两字串中找不相同字符JNENO_SA
13、ME;假设有不相同字符,那么转至NO_SAME处执行,否那么顺序执行SAME:MOVDX,OFFSETMYESMOVAH,09H;显示字符串“MATCHINT21HJMPENDONO_SAME:MOVDX,OFFSETMNOENDO:MOVAH,09H;显示字符串“NOMATCH”INT21HMOVAH,4CHINT21HCODEENDSENDSTART4-18设数据段中有3个变量单元A、B和C中存放有3个数,假设3个数都不为0,那么求出此3个数之和存入SUM单元;假设有一个数为0,那么将其他两个单元也清零。试编写此程序。解:DATASEGMENTADB5BDB4CDB3SUMDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEGIN:MOVAX,DATAMOVDS,AXCMPA,0JEOKICMPB,OJEOKICMPC,0JNEOK2OKI:MOVA,0MOVB,0MOVC,0JMPOK3OK2:MOVAH,0MOVAL,AADDAL,BADDAL,