《汇编语言程序设计习题解答.docx》由会员分享,可在线阅读,更多相关《汇编语言程序设计习题解答.docx(18页珍藏版)》请在优知文库上搜索。
1、汇编语言程序设计习题解答1.指出以下指令的错误:(I)MOVAH,BX(2)MOVBX,SI(3)MOVAX,SIDI(4)MOVMYDATBXSI,ES:AX(5)MOVBYTEPTRBX,1000(6)MOVBX,OFFSETMYDATSI(7)MOVCS,AX答:MOVAH,BXAH为八位,BX为16位(2) MOVBX,SI两个操作数不能都是存储单元(3) MOVAX,SIDI一个操作数中不能用两个变址存放器(4) MOVMYDATBXSI,E8:AXESES后应为一个变址存放器,表示偏移量(5) MOVBYTEPTRBX,1000BYTE说明时BX进行字节操作。而1000为字(6)
2、MOVBX,OFFSETMYDATSIOFFSET为取某个地址的偏移量,故后面不应用SI,而应是一个符号地址。(7) fOV是数据寻址,不应用程序段存放器CS.2.下面哪些指令是非法的?(假设0P1,0P2是已经用DB定义的变量)(I)CMP15,BX(2)CMP0Pl,25(3)CMPOPb0P2(4)CMPAX,OPl答:(1)CMP15,BX非法,两个操作数不能一个为字,一个为字节(2) CMPOPb25正确(3) CMPOPb0P2正确(4) CMPAX,OPl非法,两操作数不能一个为字,一个为字节3.假设以下指令中的所有标识符均为类型属性为字的变量,请指出以下指令中哪些是非法的?它们
3、的错误是什么?(I)MOVBP,AL(2)MOVW0RD_0PBX+4*3DI,SP(3)MOVWORD_OP1,WORDj)P2(4)MOVAX,WORD_OP1DX(5)MOVSAVE_WORD,DS(6)MOVSP,SS:DATA_WORDBXSI(7)MOVBXSI,2(8)MOVAX,WORD_OP1+WORD_OP2(9)MOVAX,WORD_OPl-WORDJ)P2+100(IO)MOVWORD_0Pl,WORD_OP1-WORD_OP2答:(1)MOVBP,AL非法,BP为16位AL为八位(2) MOVW0RD_0PBX+4*3DI,SP正确(3) MOVM)RDj)Pl,WO
4、RD_OP2非法,两个操作数不能都是变量(4) MOVAX,WORD_OP1DX非法,DX应改为BX,BP,SI或D或那么为存放器相对寻址。(5) MOVSAVEJtORD,DS非法,未指明数据段地址DS的偏移量(6) MOVSP,SS:DATA_WORDBXSI非法,SS与BX,SI不匹配,SS的偏移量用SP(7) MOVBXSI,2正确(8) MOVAX,WORD_OP1+WORD_OP2正确(9) MOVAX,WORD_OP1W0RD_0P2+100正确(10) MOVWORDj)P1,WORD_OP1W0RD_0P2非法4.假设VARl和VAR2为字变量,LAB为标号,试指出以下指令的
5、错误之处:(I)ADDVARI,VAR2(2)SUBAL,VARl(3)JMPLABSI(4)JNZVARl(5)JMPNEARLAB答:(1)ADDVARI,VAR2ADD指令中,目的操作数必须是存放器或存储单元。(2) SUBAL,VARlAL为8位的,而VAR为字变量16位(3) JMPLABSI格式不对,LAB处应为一偏移量,而不是标号。(4) JNZVARlJNZ为非零转移,应转移到某个程序段,故后面应为一个标号。(5) JMPNEARLAB段内直接转移,格式应为JMPNEARPTRLAB5.画图说明以下语句所分配的存储空间及初始化的数据值。BYTE-VARDBBYTE,12,-12
6、H,3DUP(0,?,2DUP(1,2),?)WORD-VARDW5DUP(0,1,2),?,-5,BY,TE,256H解答:(1)BYTE-VAR(2)WORD-VAR42BYTE12-12H6 .试列出各种方法,使汇编程序把5150H存入一人存储器字中。解答:(1)DW5150H;(2)DB50H,51H;(3)DBPQ7 .请设置一个数据段DATASG,其中定义以下字符变量或数据变量。FLDIB为字符串变量:ipersonalcomputer,;FLD2B为十进制数字节变量:32;FLD3B为十六进制数字节变量:20;FLD4B为二进制数字节变量:OlOIIO01;FLD5B为数字的AS
7、CII字符字节变量:32654;FLD6B为10个零的字节变量;FLD7B为零件名(ASeIl码)及其数量(十进制数)的表格:PART1 20PART2 50PART3 14FLDIw为十六进制数字变量:FFF0;FLD2W为二进制数字变量:OloIlO01;FLD3W为(7)中零件表的地址变量;FLD4W为包括5个十进制数的字变量:5,6,7,8,9;FLD5W为5个零的字变量;FLD6W为本段中字数据变量和字节数据变量之间的地址差。解答:DATASGSEGMENTFLDlBDBipersonalcomputer,FLD2BDB32D00590054014500OC02F4II000I:10
8、0200101200-02000-1-2FB1FF259-42045一541562021II2FLD3BDB14HFLD4BDB01011001BFLD5BDB32654FLD6BDBIODUP(0)FLD7BDBPARTl,20D,PART2,50D,PART3,14DFLDlWDWOFFFOHFLD2WDW01011001BFLD3WDWFLD7BFLD4WDW5,6,7,8,9FLD5WDW5DUP(0)FLD6WDWfldiw-fldibDATASGENDS8 .假设程序中的数据定义如下:PARTNODW?PNAMEDB16DUP(?)COUNTDD?PLENTHEQU$-PARNIO
9、问PLENTH的值为多少?它表示什么意义?解答:PLENTH代表着PARTNo至PLEMTH的地址差,也即三段数据的字节数PLENTH=22。9 .有符号定义语句如下:BUFFDB1,2,3,123EBUFFDB01.EQUEBUFF-BUFF问L的值为多少?解答:L=6.假设程序中的数据定义如下:1.NAMEDB30DUP(?)ADDRESSDB30DUP(?)CITYDB15DUP(?)CODE-LISTDB1,7,8,3,2(1)用一条MOVE指令将LNAME的偏移地址放入AXo(2)用一条指令将CODE-LIST的头两个字节的内容放入SIo(3)写一条伪操作使CODE-LENGTH的值
10、等于CODE-LIST域的实际长度。解答:(1)MOVEAX,OFFSETLNAME;(2)MOVESI,0701H;(3)DE-LENGTHEQULENGTHCODE-LISTo10 .试写出一个完整的数据段DATA_SEG,它把整数5赋与一个字节,并把整数-1,0,2,5和4放在10字数组DATAJIST的头5个单元中。然后写出完整的代码段,其功能为:把DATA,IST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。解答:DATA_SEGSEGMENT1.ENGTHDB5DATA_LISTDW-1,0,2,5t4,5DUP(?)MAXDW?MINDW?DATA_SEGENDSCO
11、DE_SEGSEGMENTASSUMECS:CODE_SEG,DS:DATA_SEGSTART:MOVAX,DATA_SEGMOVDS,AXMOVSI,OFFSETDATA_LISTMOVAX,SIMOVBX,SIMOVCX,LENGTHXORAX,AXXORBX,BXCLCAGAIN:CMPAX,SIJGNEXTlMOVAX,SINEXTkCMPBX,SIJNGNEXT2MOVBX,SINEXT2:JNZAGAINMOVNIAX,AXMOVMIN,BXCODEENDSENDSTART11 .给出等值语句如下:ALPHAEQU100BETAEQU25GAMMAEQU2以下表达式的值是多少?(1
12、)ALPHA*1OO+BETA(2)ALPHAMODGAMMA+BETA(3) (ALPHA+2)*BETA-2(4) (BETA3)M0D5(5) (ALPHA+3)*(BETAMODGAMMA)(6)ALPHAGEGAMMA(7)BETAAND7(8)GAMMAOR3解答:(1)=10025;(2)=19;(3)=2548;(4)=3;(5)=103;(6)=0;(7)=01H;(8)=03H13.对于下面的数据定义,三条指令分别汇编成什么?TABLEA DW10DUP(?)TABLEB DB10DUP(?)TABLECDB1234MOVEAX,LENGTHTABLEAMOVEBL,LEN
13、GTHTABLEBMOVECL,LENGTHTABLEC解答:MOVEAX,10MOVEBL,10MOVECL,114 .对于下面的数据定义,各条MoVE指令单独执行后,有关存放器的内容是什么?FLDBDBTABLEADW20DUP(?)TABLEBDBABCDMOVEAX,TYPEFLDBMOVEAX,TYPETABLEAMOVECX,LENGTHTABLEAMOVEDX,SIZETABLEAMOVECX,LENGTHTABLEB解答:AX=OOOlHAX=0002HCX=OO14HDX=0028HCX=OOOIHo15 .指出以下伪操作表达方式的错误,并改正之。(1)DATA_SEGSEG
14、(2)SEGMENTCODE(3)MYDATASEGMENT/DATAaIIENDS(4)MAIN_PROCPROCFARIIIENDMAIN_PROCMAIN_PROCENDP答:(1)DATA-SEGSEGMENT(2) CODESEGMENTPARA,CODE)(3) /DATA错。定义数据段应在代码段中用ASSUME。ENDS缺少MYDATA。(4)多余END,MAIN-PROC应删除。16 .按下面的要求写出程序的框架(1)数据段的位置从OEOOOH开始,数据段中定义一个100字节的数组,其类型属性既是字又是字节;(2)堆栈段从小段开始,段组名为STACK,(3)代码段中指定段存放器,指定主程序从100OH开始,给有关段存放器赋值;(4)程序结束。答