资源描述:
《第5章循环与分支程序设计ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第5章循环与分支程序设计学习目标:了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。§5.1循环程序设计一、循环程序的结构形式二、循环程序设计三、多重循环程序设计一、循环程序的结构形式结束初始化循环体修改部分控制条件YN先判断,后循环一、循环程序的结构形式结束初始化循环体修改部分控制条件YN先循环,后判断prognamsegmentassumecs:prognamstart
2、:movch,4rotate:movcl,4rolbx,clmoval,blandal,0fhaddal,30hcmpal,3ahjlprintitaddal,7hprintit:movdl,almovah,2int21hdecchjnzrotatemovah,4chint21hprognamendsendstart例5.2在ADDR单元存放着数Y的地址,试编制一程序把Y中1的个数存入COUNT单元中开始1的个数计数器←0循环次数计数器CX←16Y左移一次CF=11的个数计数器+1CX←CX-1=0COUNT←1的个数计数器结束NYNY循环次数固定,完全由循环计数器控制DATASE
3、GMENTYDW1234HADDRDWYCOUNTDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDL,0MOVBX,ADDRMOVAX,[BX]MOVCX,16REPEAT:SHLAX,1JNCNEXTINCDLNEXT:LOOPREPEATEXIT0:MOVCOUNT,DLMOVAH,4CHINT21HCODEENDSENDSTART例5.2开始1的个数计数器←0循环次数计数器CX←16Y左移一次CF=11的个数计数器+1CX←CX-1=0COUNT←1的个数计数器结束NYNYY=0NY
4、例5.2DATASEGMENTYDW1234HADDRDWYCOUNTDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDL,0MOVBX,ADDRMOVAX,[BX]MOVCX,16REPEAT:SHLAX,1JNCNEXTINCDLNEXT:LOOPREPEATEXIT0:MOVCOUNT,DLMOVAH,4CHINT21HCODEENDSENDSTARTCMPAX,0JZEXIT0例5.2JMPREPEAT例在附加段中,有一个首地址为LIST和未经排序的字数组。在数组的第一个字中,存放着
5、该数组的长度,数组的首地址已存放在DI寄存器中,AX寄存器中存放着一个数。要求编制一程序:在数组中查找该数,如果找到此数,则把它从数组中删除。循环程序设计del_ulprocnearcldpushdimovcx,es:[di]adddi,2repnescaswjedeletepopdijmpshortexitdelete:jcxzdec_cntnext_el:movbx,ex:[di]moves:[di-2],bxadddi,2loopnext_eldec_cnt:popdidecwordptres:[di]exit:retdel_upendp例5.4将正数N插入一个已升序排列的字
6、数组的正确位置。该数组的首地址和末地址分别为ARRAY_HEAD和ARRAY_END,其中所有的数均为正数。解法一:从数组的尾部开始比较N较大,则在比较对象后插入,结束循环N较小,则把比较对象及其后元素后移一个字循环结束的控制:执行插入操作后结束循环若N比所有元素都小,扫描整个数组后仍无法结束循环,将-1加在数组前可解决该问题23,37,49,5232ENDHEAD-1,23,37,49,5232,-1,开始(ARRAY_HEAD-2)←-1初始化变址寄存器SI将N放在K的位置K<=N修改地址K后移一个字单元结束YN例5.4Datareasegmentxdw?Array_headd
7、w3,5,15,23,37,49Array_enddw105ndw32DatareaendsProgramsegmentassumecs:program,ds:datareaStart:movax,datareamovds,axmovax,nmovarray_head-2,-1movsi,0Comp:cmparray_end[si],axjleinsertmovbx,array_end[si]movarray_end[si+2],bxsubsi,2jmpcompIns