资源描述:
《第5章 循环程序与分支程序设计ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第5章循环与分支程序设计编制一个汇编语言程序的基本步骤:1)分析题意,确定算法;2)根据算法画出流程图;3)根据流程图编写程序;4)上机调试程序;程序的基本结构有四种1)顺序2)分支3)循环4)子程序5.1循环程序设计5.1循环程序的结构形式有两种:一是DO——WHILE结构二是DO——UNTIL结构循环初始状态循环控制条件循环体循环初始状态循环控制条件循环体NYNY5.1.2循环程序设计方法例5.1试编一程序把BX中的二进制数用十六进制数形式在屏幕上显示出来1.分析题意可知,要将BX中的二进制数以十六
2、进制数显示,必然有四位,只要从左到右将每四位二进制数转换成相应的十六进制数即可。2.画流程图如教材P.124图5.23.根据流程图编程序4.上机编辑、汇编、连接、运行初始化循环计数值BX左移一个数位加7把右边的数位转换成ASCIIA~F?显示一个字符计数到0?NYYNprognamsegment;definecodesegmentmainprocfar;mainpartofpgrogramassumecs:prognamstart:;startexecutingaddress;setupstackfor
3、returnpushdssubax,axpushax;mainpartofprogrammovbx,0A1B2h;设待转换数据(bx)=A1B2hmovch,4;转换数据位数:4位16进制数rotate:movcl,4;循环移位次数:4位rolbx,cl;循环左移moval,bl;取低8位到转换器andal,0fh;分离待转换数据addal,30h;转换成ASCIIcmpal,3ah;大于3ah吗?jlprint;小于,则说明是0至9的数据addal,7h;是A到F,再加7print:movdl,al;
4、准备显示,将ASCII字符转存DLmovah,2;功能号int21h;系统调用decch;转换完4位了?jnzrotate;未完继续ret;returntoDSmainendp;endofmainpartofprogramprognamends;endofcodesegmentendstart;endassembly例5.2在ADDR单元中存放着数Y的地址,试编制一程序把Y中1的个数存入COUNT单元中开始计数器清0Y=0?Y<0?计数器加1Y左移一位存计数值到COUNT单元结束YYNNxorcx,cx
5、movbx,addrmovax,[bx]repeat:testax,0ffffhjzexitjnsshiftinccxshift:shlax,1jmprepeatexit:movcount,cxret例5.3在附加段中有一个首地址为LIST和未经排序的字数组,其首字为数组长度,数组的首地址放在DI中,AX中放有一数,要求查找数组,将数组中与AX值相同的数从数组中删除开始在数组中查(AX)找到(AX)?是末元素?后移一个字修改数组长度结束YYNN数组结束否?NYcldpushdimovcx,es:[di]
6、adddi,2repnescaswjedeletepopdijmpshortexitdelete:jcxzdec_cntnext_el:movbx,es:[di]moves:[di-2],bxadddi,2loopnext_eldec_cnt:popdidecwordptres:[di]exit:ret例5.4将正数N插入一个已整序的字数组的正确位置。该数组的首地址和末地址分别为array_head和array_end,其中所有数均为正数且已按递增的次序排列。开始(Array_head-2)<--1K<
7、=N?K前移一个字插入N结束YN初始化变址器SI修改地址movax,nmovarray_head-2,0ffffhmovsi,0compare:cmparray_end[si],axjleinsertmovbx,array_end[si]movarray_end[si+2],bxsubsi,2jmpshortcompareinsert:movarray_end[si+2],axret例5.5设有数组X和Y。X数组中有X1,…,X10;Y数组中有Y1,…,Y10。试设计程序计算Z1=X1+Y1Z2=X2+
8、Y2Z3=X3-Y3Z4=X4-Y4Z5=X5-Y5Z6=X6+Y6Z7=X7-Y7Z8=X8-Y8Z9=X9+Y9Z10=X10+Y10开始初始化循环计数值测试逻辑尺的第i位Xi+Yi结束=0=1i=0Xi-Yii=i+1Zi<-结果循环计数值=0?movbx,0movcx,10movdx,logic_rulenext:movax,x[bx]shrdx,1jcsubtractaddax,y[bx]jmpshortresultsubtrac