首页 习题4

习题4

举报
开通vip

习题4习题4汇编语言程序设计主要内容:汇编语言程序设计。主要介绍汇编语言程序的设计方法与编程原理,重点掌握算术运算程序、字符串处理程序、码制转换程序、子程序设计程序、常用DOS和BIOS功能调用程序、汇编语言常用伪指令。4.1分析执行下列指令序列后的结果:1)MOVAX,1234HMOVBX,00FFHANDAX,BX【答】(AX)=0034H2)MOVAL,01010101BANDAL,00011111B;(AL)=00010101BORAL,11000000B;(AL)=11010101BXORAL,00001111...

习题4
习题4汇编语言程序设计主要 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 :汇编语言程序设计。主要介绍汇编语言程序的设计 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 与编程原理,重点掌握算术运算程序、字符串处理程序、码制转换程序、子程序设计程序、常用DOS和BIOS功能调用程序、汇编语言常用伪指令。4.1分析执行下列指令序列后的结果:1)MOVAX,1234HMOVBX,00FFHANDAX,BX【答】(AX)=0034H2)MOVAL,01010101BANDAL,00011111B;(AL)=00010101BORAL,11000000B;(AL)=11010101BXORAL,00001111B;(AL)=11011010BNOTAL【答】(AL)=00100101B3)MOVDL,05HMOVAX,0A00HMOVDS,AXMOVSI,0HMOVCX,0FHAGAIN:INCSICMP[SI],DLLOOPNEAGAINHLT本程序实现了什么功能?【答】在以0A001H开始的15个单元中查找05H。4)MOVAX,DSEGADDRMOVDS,AXMOVES,AXMOVSI,OFFSETB1ADDRMOVDI,OFFSETB2ADDRMOVCX,NCLDREPMOVSBHLT本程序实现了什么功能?【答】将B1ADDR中N个字节数据传送到B2ADDR。5)MOVAX,0HMOVDS,AXMOVES,AXMOVAL,05HMOVDI,0A000HMOVCX,0FHCLDAGAIN:SCASBLOOPNEAGAINHLT本程序实现了什么功能?【答】用重复前缀代替LOOPNZ,选择重复前缀。从地址0A000H开始的15个单元中查找字节型数据05h,选择重复前缀repnz4.2阅读程序:1).CLDLEADI,[0100H]MOVCX,0080HXORAX,AXREPSTOSW本程序实现了什么功能?【答】将CS中起始地址为0100h的256个字节单元清零。2).MOVAL,08HSALAL,01H;(AL)=00010000HMOVBL,ALMOVCL,02HSALAL,CL;(AL)=01000000HADDAL,BL;(AL)=01010000H本程序实现了什么功能?【答】(AL*2+AL*8)。4.3试分析下列程序完成什么功能?MOVDX,3F08HMOVAH,0A2HMOVCL,4SHLDX,CL;(DX)=F080HMOVBL,AHSHLBL,CL;(BL)=20HSHRBL,CL;(BL)=02HORDL,BL;(DL)=82H【答】将3f08h的’8’存放在dl的高四位,0a2h的’2’存放在dl的低四位。4.4已知程序段如下:MOVAX,1234HMOVCL,4ROLAX,CLDECAXMOVCX,4MULCX试问:(1)每条指令执行后,AX寄存器的内容是什么?(2)每条指令执行后,CF,SF及ZF的值分别是什么?(3)程序运行结束时,AX及DX寄存器的值为多少?【答】MOVAX,1234H;(AX)=1234HCF=SF=ZF=0MOVCL,4ROLAX,CL;(AX)=2341HCF=1,SF=ZF=0DECAX;(AX)=2340HCF=1,SF=ZF=0MOVCX,4;MULCX;(AX)=8000HCF=ZF=0,SF=1,DX=04.5试分析下列程序段:ADDAX,BXJNCL2SUBAX,BXJNCL3JMPSHORTL5如果AX、BX的内容给定如下:AXBX(1)14C6H80DCH(程序转向L2)(2)B568H54B7H(程序转向SHORTL5)问该程序在上述情况下执行后,程序转向何处?【答】(1)程序转向L2。(2)程序转向SHORTL5。4.6以下为某个数据段,试问各个变量分别占多少字节,该数据段共占多少字节?DATASEGMENTVAR1DW9;2字节VAR2DD10DUP(?),2;44字节VAR3DB2DUP(?,10DUP(?));22字节VAR4DB‘HOWAREYOU';11字节DATAENDS【答】该数据段共占79字节。4.7下列语句在存储器中分别为变量分配多少字节空间?并画出存储空间的分配图。VAR1DB10,2;2字节VAR2DW5DUP(?),0;12字节VAR3DB‘HOWAREYOU?',‘$';13字节VAR4DD-1,1,0;12字节Var1Var2Var3Var410??FFH2?U00H?O00H?Y00H?01H?E00H?R00H?A00H?00H?W00H0O00H0H00H$4.8编写一段程序,比较两个5字节的字符串OLDS和NEWS,若相同,在RESULT置0,否则置0FFH。【答】参考程序:OLDSDB1,2,3,4,5NEWSDB1,2,3,4,5RESULTDB?MOVSI,OFFSETOLDSMOVDI,OFFSETNEWSMOVCX,10CLDREPCMPSBJNZNOEQU;串不相等转MOVAL,0JMPOUTPTNOEQU:MOVAL,0FFHOUTPT:MOVRESULT,ALSTOP:JMPSTOP4.9编程求和Y=A1+A2+….+A100。其中Ai为字节变量。【答】参考程序:DATASEGMENTTABLEDW12,3,45,..YALDW?YAHDW?DATAENDS……….MIANPROCFARPUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVDX,0XORAX,AX;清AXMOVBX,OFFSETTABLEMOVCX,4CLCLP:ADDAX,[BX];求和JNCDONINCDXCLCDON:INCBXINCBX;指向下一个数LOOPLP;未加完,继续MOVYAL,AX;存和MOVYAH,DXMAINENDPCODEENDSENDSTART4.10内存中以FIRST和SECOND开始的单元中存放着4字节非组合BCD码,低位在前。编程序求这两个数的非组合的十进制和,并存到以THIRD开始的单元。【答】参考程序:1325+9839=?DATASEGMENTFIRSTDB05H,02H,03H,01H;SECONDDB09H,03H,08H,09H;THIRDDB20DUP(?)DATAENDSSTACKSEGMENTST1DB100DUP(‘SA’)TOP1EQUST1LENGTHST1STACKENDSCODESEGMENTASUMMECS:CODE,DS:DATA,SS:STACKMAINPROCFARSTART:MOVAX,DAT;初始化数据段MOVDS,AXMOVAX,STACK;初始化堆栈段MOVSS,AXMOVAX,TOP1MOVSP,AXMOVCX,4;计算4次MOVBX,OFFSETDAT1;取数据地址MOVSI,OFFSETDAT2;取数据地址MOVDI,OFFSETSUM;取结果地址MOVAH,00H;将暂存标志的AH清0DON1:MOVAL,[BX];取第一个数SAHF;将AH中的标志送标志寄存器ADCAL,[DI];与第二个数带进位加AAA;十进制校正LAHF;将标志寄存器内容送AHORAL,30H;计算值拼成ASCII码MOV[DI],AL;存结果的ASCII码INCBX;指向第一个数的下一位INCSI;指向第二个数的下一位INCDI;指向结果单元的下一位LOOPDON1;未计算完,继续ANDAH,01H;将最高位的进位标志送AHORAH,30H;最高位的进位位拼成ASCII码MOV[DI],AH;存结果的最高位MOVAH,02H;调用DOS的02H功能显示MOVCX,05H;显示数据的位数DON2:MOVDL,[DI];显示数据送DLINT21H;显示DECDI;显示数据所在存储单元加一LOOPDON2;未显示完,继续MOVAH,4CH;返回DOSINT21HRETMAINENDPCODEENDSENDSTART4.11试编程序,统计由40000H开始的16K个单元中所存放的字符“A“的个数,并将结果存放在DX中。【答】参考程序DATASEGMENTDATA1DB'DFASFAAAFDFAAFFFA'COUNTEQU$-DATA1DATAENDSSTACKSEGMENTSTADB100DUP(?)TOPEQULENGTHSTASTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVAX,TOPMOVSP,AXMOVCX,COUNTMOVDX,0LEASI,DATA1MOVBL,'A'NEXT:CMP[SI],BLJNZOTHERINCDXOTHER:INCSILOOPNEXTCODEENDSENDBEGIN4.12统计数据块中正数与负数的个数,并将正数与负数分别送到两个缓冲区。【答】参考程序:BLOCKDB-1,-3,5,6,-2,0,20,10PLUS_DDB8DUP(?);正数缓冲区MINUS_DDB8DUP(?);负数缓冲区PLUSDB0MINUSDB0MOVSI,OFFSETBLOCKMOVDI,OFFSETPLUS_DMOVBX,OFFSETMINUS_DMOVCX,8;数据个数送CXGOON:LODSB;AL←[SI]TESTAX,80HJNZJMIUS;为负数,转INCPLUS;正数个数加一STOSB;[DI]←AL,传正数JMPAGAINJMIUS:INCMINUS;负数个数加一XCHGBX,DISTOSB;送负数到缓冲区XCHGBX,DIAGAIN:DECCXJNZGOON4.13编写一个子程序将AX中的十六进制数,转换成ASCII码,存于ADR开始的四个单元中。提示:1)、AX中的数从左到右,转换成ASCII码,用循环左移ROL和AND指令,把提出的一个十六进制数置BL中;2)、0~9的ASCII码:30~39H,A~F的ASCII码:41H~46H。(先把每个数加30H,判断是否为数字0~9?若是A~F,再加07H,得字母的ASCII码。)【答】参考程序:DATASEGMENTADRDB4DUP(?)DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATASTART:MOVAX,7EC3H;假设ax中存放7ec3hLEASI,ADRMOVDL,4AGAIN:MOVBX,AXANDBX,000FHADDBL,30HCMPBL,'9'JGADUSTJMPSTOREADUST:ADDBL,07HSTORE:MOV[SI],BLINCSIMOVCL,4ROLAX,CLDECDLJNZAGAINMAINENDPCODEENDSENDSTART4.14编写一个子程序将AX中的2进制数,转换成10进制ASCII码,存于ADR开始的五个单元中。【答】参考程序:BINEQU5555H;假设二进制数为5555HDATASEGMENTADRDB4DUP(?)DATAENDSSTACKSEGMENTSTADB100DUP(?)TOPEQULENGTHSTASTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVAX,TOPMOVSP,AXMOVAX,BINLEABX,ADRMOVCX,10000DCALLBINTODECMOVCX,1000DCALLBINTODECMOVCX,100DCALLBINTODECMOVCX,10DCALLBINTODECMOVCX,01DCALLBINTODECMOVAX,04CH;返回DOSINT21HMAINENDP;十进制转二进制,完成一位运算,十进制存于ax中,结果存于bx所指向的地址中BINTODECPROCNEARMOVDX,0DIVCXADDAL,30HMOV[BX],ALMOVAX,DXINCBXRETBINTODECENDPCODEENDSENDSTART4.15编写一个子程序,对AL中的数据进行偶校验,并将经过校验的结果放回AL中。【答】参考程序:JIAOYANPROCFARMOVAL,1001110BORAL,ALJNPNEXTMOVAL,0JMPDONENEXT:MOVAL,1DONE:MOVAH,04CHINT21HJIAOYANENDP4.16从2000H单元开始的区域,存放100个字节的字符串,其中有几个$符号(ASCII码为24),找出第一个$符号,送AL中,地址送DI。【答】参考程序:SEARCHPROCFARMOVDI,2000HMOVCX,100MOVAL,24HCLDREPNZSCASBDECDIMOVAL,[DI]SEARCHENDP4.17用串操作指令实现:先将100H个数从2170H单元处搬到1000H单元处,然后从中检索等于AL中字符的单元,并将此单元换成空格字符。【答】参考程序:MAINPROCFARMOVAL,24HMOVSI,2170HMOVDI,1000HMOVCX,100HCLDREPMOVSBMOVDI,1000HMOVCX,100HCLDDO:REPNZSCASBCMPCX,0JZENDDECDIMOV[DI],20HINCDICMPCX,0JNZDOEND:HLTMAINENDPCODEENDSENDSTART4.18从60H个元素中寻找一个最大的值,并放到AL中,假设这60个元素放在DATA1开始的单元中。【答】参考程序:DATASEGMENTDATA1DB0,1,2,3,4,5,6,7,8,9;DATAENDSSTACKSEGMENTSTADB20DUP(?)TOPEQULENGTHSTASTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVAX,TOPMOVSP,AXMOVCX,10MOVAL,0LEABX,DATA1AGAIN:CMPAL,[BX]JGENEXT;大于等于转移MOVAL,[BX]NEXT:INCBXLOOPAGAINMOVAH,4CHINT21HCODEENDSENDSTART4.19排序程序设计:把 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 中元素按值的大小升序排列。要求显示排序前和排序后的数据。【答】参考程序:DATASEGMENTTABDB'8095554'N=$-TABOKDB0DH,0AH,'OK!$'DATAENDSSTACKSEGMENTSTADB20DUP(?)TOPEQULENGTHSTASTACENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTAR:MOVAX,DATAMOVDS,AX;初始化数据段MOVAX,STACKMOVSS,AXMOVAX,TOPMOVSP,AXCALLARRAYDO:MOVAH,4CHINT21H;返回DOSARRAYPROCNEARPUSHAXPUSHBXPUSHCXPUSHDXMOVDL,N-1;置外循环次数MOVDH,1;设有交换标志XORBX,BXUPPER:ORDH,DH;JZDISP;无交换,已排好序,退出MOVDH,0;无交换MOVCX,N-1SUBCX,BX;CX=CX-I内循环次数MOVSI,0;指向表首INNER:MOVAL,TAB[SI];字符送ALINCSI;指向下个字符CMPAL,TAB[SI];比较表中相邻字符JBEDON;小于XCHGAL,TAB[SI];否则交换,大字符下MOVTAB[SI-1],AL;小字符上浮MOVDH,1;有交换,DH=1DON:LOOPINNER;内循环结束?CX-1INCBX;一次内循环完成,加一DECDL;外循环次数减一CMPDL,0JNZUPPER;外循环次数非零,继续DISP:MOVDX,OFFSETTABMOVAH,09HINT21H;显示排好序的字符POPDXPOPCXPOPBXPOPAXRETARRAYENDPCODEENDSENDSTAR4.20编写一段程序,接收从键盘输入的10个数,输入回车符表示结束,然后将这些数加密后存于BUFF缓冲区中。加密表为:输入数字:0,1,2,3,4,5,6,7,8,9;密码数字:7,5,9,1,3,6,8,0,2,4。【答】参考程序:DATASEGMENTTABLEDB7,5,9,1,3,6,8,0,2,4;密码表str1DB0A,0Dh,’Pleaseinputthefourhexnumber:$’str2DB0Ah,0Dh,’Theresultis:$’BUFFDB10DUP(?),'$'存放转换数字的缓冲区DATAENDSSTACKSEGMENTSTADB20DUP(?)TOPEQULENGTHSTASTACKENDSCODESEGMENTMOVAX,STACKMOVSS,AXMOVDI,OFFSETBUFFLEABX,TABLEMOVCX,0DHLEADX,str1MOVAH,9INT21HRE1:MOVAH,1;从键盘输入INT21HCMPAL,0DHJZDONESUBAL,30HXLATADDAL,30HMOV[DI],ALINCDILOOPRE1DONE:MOV[DI],’$’LEADX,str1MOVAH,9INT21HMOVDX,OFFSETBUFFMOVAH,09HINT21HMOVAH,4CHINT21HCODEENDS4.21:编程序从键盘接收一个4位16进制数,转换为10进制数后,送显示。【答】算法:先将输入的十六进制数保存到BX中,BX中的数范围在+32767~-32768之间,先检查BX中的符号位,以决定输出“+”还是“-”;若是负数,应先求补,得到原码后即可与正数作统一处理。转换方法为将被转换的二进制数先除;以10000,商即为万位数,再将余数除以1000,商为千位数,依此类推,求出百、十位数,剩的为个位数。最后,将各个数加上30H,即成为对应字符。DATASEGMENTOUT_ASC_SUMdb6dup(?),'$'str1DB0A,0Dh,’Pleaseinputthefourhexnumber:$’str2DB0Ah,0Dh,’Theresultis:$’DATAENDSSTACKSEGMENTSTADB20DUP(?)TOPEQULENGTHSTASTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVAX,TOPMOVSP,AXMOVCX,4;输入4次MOVDX,CX;转换4次MOVBX,0;用BX保存输入数LEADX,str1MOVAH,9INT21HRE1:MOVAH,1;从键盘输入INT21HCALLZH;通过子程序转换SHLBX,CL;组合成十六进制数ADDBL,ALDECDXJNZRE1;循环输入四个数MOVAX,BXMOVOUT_ASC_SUM,'+'CMPAX,0JGEL4;不是负数,转移NEGAXMOVOUT_ASC_SUM,'-'L4:CWDMOVBX,10000DIVBXADDAL,30H;将万位转换为数字(商应在AX内,但因为商不大于9,所以有效部分在al内)MOVOUT_ASC_SUM+1,AL;保存万位数字MOVAX,DX;将余数置入AX内,以便当作被除数CWDMOVBX,1000DIVBXADDAL,30HMOVOUT_ASC_SUM+2,AL;保存千位数字MOVAX,DX;将余数置入AX内,以便当作被除数MOVBL,100DIVBLADDAL,30HMOVOUT_ASC_SUM+3,AL;保存百位数字MOVAL,AHCBWMOVBL,10DIVBLADDAL,30HMOVOUT_ASC_SUM+4,AL;保存十位数字ADDAH,30HMOVOUT_ASC_SUM+5,AH;保存个位数字LEADX,str2MOVAH,9INT21HMOVDX,OFFSETOUT_ASC_SUMMOVAH,09HINT21HMOVAH,4CHINT21HZHPROCCMPAL,'9';将ASCII码转换为16进制JBEA2;键入值≤’9’(’0’-‘9’)则减30HCMPAL,'a';键入值<’a’(‘A’-‘F’)则减37HJBA1SUBAL,20H;值在’a’-‘f’则先减20H,再减37HA1:SUBAL,7A2:SUBAL,30HRETZHENDPCODEENDSENDSTART
本文档为【习题4】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
老张师傅
20余年电工实际工作经验,目前在国企担任电工工程师
格式:doc
大小:128KB
软件:Word
页数:12
分类:管理学
上传时间:2023-03-22
浏览量:0