还剩7页未读,继续阅读
文本内容:
1、设在数据段中有XY两变量(字节单元),试编写程序段计算(只写有关程序功能的指令)Y=X当X=0丫=0当X0解:movalxcmpa;0jgeAlmoval0Al:movyal2在STR单元开始定义了一长度为LEN字节的字符串,统计出其中大写字母的个数并存放到LARGE字节单元中请编一完整的源程序DATASEGMENTSTRDBLENEQU$-STRLARGEDBDATAENDSCDEGMENTASSUMECS:CDDSATALARGPROCFARMOVAXDATAMOVDSAXLEASISTRMOVCXLENMOVBL0NT CMPBYTEPTR[SI]AJBNOLARGCMPBYTEPTR[SI]2JANOLARGINCBLNOLARG INCSILOOPNTMOVLARGEBLMOVAH4CHINT21HLARGENDPCDENDSENDLARG
3、已知DATl字节单元有一个数据,试编制一程序段将该数据的低4位变为1010B最高位(第7位)置1其余3位不变,结果送DAT2字节单元MOVALDATA1ANDAL70HADDAL8AHMOVDATA2AL
4、在N1和N2两数据区中,分别有10H个带符号数试编制一源程序,找出对应项中较小的数据,并将这些较小的数据存入N3数据区中(要求对应项比较时必须用CMPS指令)DATASEGMENTN1DBXXXXXX编程将ARRAY分成两个数组正数数组P_ARY和负数数组N_ARY并分别显示正数项个数和负数项个数要求源程序格式完整datasegmentarraydw12-134-2-345-6P_ARYdw10dupN_ARYdw10dup;以上是定义dataendscodesegmentassumecs:codeds:datastart:movaxdatamovdsaxleabxarrayleasiN_ARYleadiP_ARYmovex10again:empwordptr[bx]0jlokljgok2jmpok3okl:movax[bx.mov[di]axadddi2jmpok3ok2:movax[bx]mov[si]axaddsi2jmpok3ok3:addbx2decexjnzagainmovah4chint21hcodeendsendstart
16、XYZ三个字节存储单元中各有一个无符号数,其中有两个数据相等,找出不相等的哪个数,并存入W单元中,试编写完成上述功能的程序段(只编写有关代码部分,勿需书写源程序格式)movalxempalyjexyjnenxyxy:movalzmovwaljmpovernxy:empalzjexzjnenxzxz:movalymovwaljmpovernxz:movwalover:
17、在数据段偏移量为100H开始的存储空间内连续存放着10个字节型无符号二进制数,编写一段程序,求出该10个数之和,并将结果存放在寄存器AX中
18、试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来BEGIN:MOVAH1;从键盘输入一个字符的DOS调用INT2111CMPALa;输入字符〈a吗?JBSTOPCMPAL气;输入字符〉T吗?JASTOPSUBAL20H;转换为大写字母,用ANDAL11011111B也可MOVDLAL;显示一个字符的DOS调用MOVAH2INT21HJMPBEGINSTOP:RET已知有256个字节整数Al、A
2、A
3、……、A256存放在以NUMBER为首址的数据区中,编写一完整源程序将其中的负数去除后剩下的正数重新排序存放在以PLUS开始的数据区中DATASEGMENTNUMBERDB123252DUP0256PLUSDB256DUP0DATAENDSCODESEGMENTASSUMECS:CODEDS:DATASTART:MOVAX@DATAMOVDSAXMOVSIOFFSETNUMBERMOVDIOFFSETPLUSXNEXT:MOVAL[SI]CMPAL7FHJZnegativesMOVDS:[DI]ALINCDInegatives:INCSICMPSI255JZEXITSJMPXNEXTEXITS:MOVAH4CHINT2111CODEENDSENDSTARTN2DBXXXXXX••…N3DB10HDUP0DATAENDS解STACKSEGSEGMENTSTACKDB1024DUPOSTACKSEGENDSDATASEGMENTN1DB5Ah6Fh2Eh0D8h0E3h9ChODBh0B7h5Bh21h35h8Eh4Ah15h58h75hN2DB58hOFFh5Eh38h0C7hOAlh26h86h48h35h48h16hOBAhOFAhODFh0E9hN3DB10HDUP0DATAENDSCODESEGMENTASSUMECS:CODEDS:DATASS:STACKSEGCLDAGAIN:CMPSBYTEPTRN1BYTEPTRN2JLNILESMOVAL[Sl+lOh]MOV[BX][SI]ALJMPCMPAGAINNILES:MOVAL[si]MOV[BX][SI]ALCMPAGAIN:decexjnzagainMOVAH4CHINT21HCODEENDSENDSTART
5、加密移动字符串,设缓冲区SBUFF中有20个小写字母a将每个a加上它相对于缓冲区的位移量后传送到缓冲区DBUFFoSTACKSEGSEGMENTSTACKDB1024DUP0STACKSEGENDSDATASEGMENTSBUFFDB20DUPaDBUFFDB20DUP0DATAENDSCODESEGMENTASSUMECS:CODEDS:DATASS:STACKSEGSTART:MOVAXDATAMOVDSAXMOVCX20MOVSI0CLDAGAIN:LODSBMOVBXSIDECBXADDAXBXMOVdbuff[si-i]alLOOPAGAINDBUFFINT21HMOVAH4CHINT21HCODEENDSENDSTART
6、在BUF1和BUF2两个数据区中,各定义有10个带符号字数据,试编制一完整的源程序,求它们对应项的和,并将和数存入以SUM为首址的数据区中DATASEGMENTBUF1DW-562454-189-8……BUF2DW45-23124345-265……SUMDW10DUP0DATAENDSCODESEGMENTASSUMECS:CODEDS:DATABEGIN:MOVAXDATAMOVESAXMOVDSAXLEASIBUF1MOVBXOFFSETBUF2LEADISUMMOVCX10LI:MOVAX[SI]ROLAX1JCL2RORAX1L4:MOVDXAXMOVAX[BX]ROLAX1JCL3RORAX1L5:ADDAXDXMOV[DI]AXINCBXINCBXINCSIINCSIINCDIINCDILOOPLIJMPLASTL2:RORAX1NEGAXJMPL4L3:RORAX1NEGAXJMPL5LAST:MOVAH4CHINT21HCODEENDSENDBEGIN
7、试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来DATASSEGMENTMSGDB00〃H〃,〃$〃CRDB1310〃$〃TABIDB〃0123456789ABCDEF〃DATASENDSSTACKSSEGMENTSTACKSENDSCODESSEGMENTASSUMECS:CODESDS:DATASES:DATASSS:STACKSSTART:MOVAXDATASMOVDSAXMOVESAXMOVCX127MOVDL0MOVSIOFFSETTABIMOVDIOFFSETMSGAG:PUSHCXPUSHDXMOVAX0MOVALDLMOVBL1OHDIVBLMOVBX0MOVBLAHMOVDH[SI+BX]MOV[DI+1]DHMOVBLALMOVDH[SI+BX]MOV[DI]DHPUSHDXMOVDXOFFSETMSGMOVAH9INT21HPOPDXMOVAH2INT21HPUSHAXMOVDXOFFSETCRMOVAH9INT21HPOPDXPOPDXPOPCXINCDLLOOPAGMOVAH4CHINT21HCODESENDSENDSTART
8、汇编程序,以BUF为首地址的内容存单元中有1~15的平方表查表求X单元中数(广15之间)的平方值并送回X单元codesegmentassumecs:codeds:codeorglOOhstart:pushcspopdsleabxBUF;BX指向表首movalXdecal;偏移送ALxlat;查表movXal;平方值并送回X单元movah4chint21hBUFdb149162536496481100121144169196225Xdb8codeendsendstart
9、已知存储器中有一个首地址为ARRAY的100个字数组,现要求把数组中的每个数加1不考虑溢出的可能性,试编制完成此功能的程序段MOVBXOFFSETARRAYMOVAX1MOVCX100L00P1:ADD[BX]AXLOOPL00P
110、.编写一段程序,如果字节变量TESTONE和TESTTWO相等,则调用子程序,显示#;否则调用NOTSAME子程序,显不!datasegmentinfondbOdhOah5#$,infon2dbOdhOah’!$TESTONEdbOdhOah2$TESTTWOdbOdhOah1$dataendsstacksegmentstackdb200dupOstackendscodesegmentassumeds:datass:stackcs:codestart:movaxoffsetTESTONEmovbxoffsetTESTTWOempaxbxjek2jneklkl:callshowk2:callNOTSAMEexit:movah4chint21hshowprocnear;leadxinfonmovah9int21hretshowendpNOTSAMEprocnear;leadxinfon2;在屏幕上显示提示信息movah9int21hretNOTSAMEendpcodeendsendstart
11、已定义了两个整数变量A和B试编写程序完成下列功能A.若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中B.若两个数均为奇数,则将两数均加1后存回原变量C.若两个数均为偶数,则两个变量均不改变(要求各段定义完整,并画出程序流程图)datasegmentadb3bdb3dataendscodesegmentassumeds:datacs:codestart:movaxdatamovdsaxtesta1jznextltestb1jztjincaincbjmptjnextl:testb1jztjmovalaxchgalbmovaaltj movah4chint21hcodeendsendstart
12、假设DATAX和DATAX+2单元存放双字PDATAY和DATAY+2单元中存放双字Q编程计算2P-Q差在DXAX中若OF=1程序转OVERFLOW否则转NOOVER(只写与试题要求有关的指令语句)DATASEGMENTDATAXDW2321H3243HDATAYDW1233H4332HDATAENDSCODESEGMENTASSUMEDS:DATACS:CODESTART:MOVAXDATAMOVDSAXMOVDXDATAX+2MOVAXDATAXSHLAX1RCLDX1;求2PSUBAXDATAYSBBDXDATAY+2;求2P-QJOOVERFLOWNOFLOW:MOVAH0JMPEXITOVERFLOW:MOVAH1EXIT:MOVAX4C00HINT21HCODEENDSENDSTART
13、已知在数据区BUF1和BUF2分别存放20个字节数据编程检查两数据区中的数据是否相同若完全一致,则将标志单元FLAG置FFH否则置0并将第一次出现的不同数据的地址分别存放在ADDR1和ADDR2单元中要求源程序格式完整datasegmentxdwydwmsgdbcontinueYesorNo$,msgldbInputfirstnumber:$msg2dbInputsecondnumber:$msg3dbShangis:$dataendsdecihexsegmentassumecs:decihexds:datamainprocfarmovaxdatamovdsaxrepeat:leasixleadxmsglmovah9int21hcalldecibincallcrlfleasiyleadxmsg2movah9int21hcalldecibincallcrlfmovaxxcwddivwordptr[x+2]pushdxmovbxaxleadxmsg3movah9int21hcallbinidecmovdl.’movah2int21hpopaxmovex10mulexdivwordptr[x+2]movbxaxmovex1calldecdivcallcrlfleadxmsgmovah9int21hcallcrlfmovah1int21hempalYjzrepeat
14、设X、Y、Z、W为十六位有符号数编程计算:W-X+Y*Z/8-Y除法余数丢弃若ZF=1程序转EQ;否则转NOT_EQmovaxyimulz;计算y*z结果在dx和ax中addaxx;ax+xadcdx0;dx+ax与x相加产生的进位movbx8divbx;dxax除以8余数在dx中,商在ax中subaxy;商-y影响标志位ZFmovwax;存结果,mov指令不影响标志位jzeq;测试的是sub执行后的标志,zf=l转eqjmpnoteq;zf不为1转noteq
15、已知在以ARRAY为首地址的数据区中存放10个带符号字数据:ARRAYDW12-134-2-345-6。
个人认证
优秀文档
获得点赞 0