循环程序设计.ppt





《循环程序设计.ppt》由会员分享,可在线阅读,更多相关《循环程序设计.ppt(89页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、循环程序设计现在学习的是第1页,共89页1 1、如何计算转移指令的目标地址、如何计算转移指令的目标地址?2 2、分支程序的结构特点和如何编分支程序的结构特点和如何编写分支程序?写分支程序?现在学习的是第2页,共89页第第5 5章章 循环程序设计循环程序设计现在学习的是第3页,共89页本章学习目标本章学习目标n 循环程序的一般结构循环程序的一般结构n 循环指令循环指令n 计数型循环与条件型循环计数型循环与条件型循环n 单重循环程序设计方法单重循环程序设计方法n 多重循环程序设计方法多重循环程序设计方法通过本章学习,应掌握以下内容:现在学习的是第4页,共89页5.1 5.1 循环程序的一般结构循环
2、程序的一般结构5.2 5.2 循环指令循环指令5.3 5.3 循环程序设计方法循环程序设计方法现在学习的是第5页,共89页5.1 5.1 循环程序循环程序 的一般结构的一般结构现在学习的是第6页,共89页 顺序程序是按指令的先后顺序依次执顺序程序是按指令的先后顺序依次执行,每条指令只执行一次;分支程序是行,每条指令只执行一次;分支程序是根据判断条件的真假,选择其中的一个根据判断条件的真假,选择其中的一个分支段程序执行;循环程序是根据需要分支段程序执行;循环程序是根据需要重复执行一段程序多次。重复执行一段程序多次。现在学习的是第7页,共89页 循环程序结构分循环程序结构分计数型循环和条件型循计数
3、型循环和条件型循环。环。循环程序由循环程序由3 3部分组成部分组成:(1 1)循环初始化循环初始化:为循环做准备工作为循环做准备工作 (2 2)循环体循环体:重复执行部分重复执行部分 (3 3)循环控制循环控制:按循环结束条件判断是按循环结束条件判断是否继续循环否继续循环 现在学习的是第8页,共89页两种循环结构流程图两种循环结构流程图:CX循环次数循环体CX循环次数-1(CX)=0NY退出循环图5-1 计数型循环结构图5-2 条件型循环结构循环初始化部分循环体(工作部分和修改循环条件)循环结束条件NY退出循环现在学习的是第9页,共89页 实际应用,实际应用,可将循环控制部分放在循可将循环控制
4、部分放在循环体之前,形成环体之前,形成“先判断、后循环先判断、后循环”的的结构,也可以将循环控制部分放在循环结构,也可以将循环控制部分放在循环体之后,形成体之后,形成“先循环、后判断先循环、后判断”的结的结构形式。构形式。下面分别举例说明计数型循环和下面分别举例说明计数型循环和条件型循环的控制方法。条件型循环的控制方法。现在学习的是第10页,共89页例例5-15-1 n n个个8 8位有符号数,存在位有符号数,存在BUFBUF为首址为首址的存储区中,试统计正数的个数。的存储区中,试统计正数的个数。分析分析:每个数均是每个数均是8 8位有符号二进制位有符号二进制数,应先分析数的正负,再使用符数,
5、应先分析数的正负,再使用符号数条件转移指令进行转移或正数号数条件转移指令进行转移或正数的统计。共有的统计。共有n n个元素,整个程序的个元素,整个程序的结构要重复判断结构要重复判断n n次,故可次,故可选用计数选用计数型循环程序。型循环程序。现在学习的是第11页,共89页 存储单元及寄存器分配如下存储单元及寄存器分配如下:BX:BUF BX:BUF存储区的地址指针,初值为存储区的地址指针,初值为BUFBUF的的偏移地址,每循环一次之后,其值加偏移地址,每循环一次之后,其值加1 1。CX:CX:循环计数器,初值为循环计数器,初值为BUFBUF存储区中元素存储区中元素的个数的个数n n,每循环一次
6、之后,其值减,每循环一次之后,其值减1 1。AX:AX:存放正数的个数,初值为零。存放正数的个数,初值为零。COUNT:COUNT:最终存放正数的个数。最终存放正数的个数。程序流程图如图程序流程图如图5-35-3所示。所示。现在学习的是第12页,共89页开始BXBUF的偏移地址CXBUF区中元素个数AX0(BX)0AX(AX)+1BX(BX)+1CX(CX)-1(CX)=0COUNT(AX)结束YYNN循环初始部分循环体部分循环控制部分图5-3 统计正数个数程序流程图现在学习的是第13页,共89页源程序如下源程序如下:STACK SEGMENT STACKSTACK SEGMENT STACK
7、 DB 200 DUP DB 200 DUP(0 0)STACK ENDSSTACK ENDSDATA SEGMENTDATA SEGMENTBUF DB 8BUF DB 8,1010,-5-5,100100,-7-7,2525,4040N =$N =$BUF BUF ;BUFBUF区中元素个数区中元素个数COUNT DW?COUNT DW?DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT ASSUME CS ASSUME CS:CODECODE,DSDS:DATADATA,SSSS:STACKSTACKBEGINBEGIN:MOV AXMOV AX,DAT
8、ADATA MOV DS MOV DS,AXAX现在学习的是第14页,共89页 LEA BXLEA BX,BUFBUF MOV CXMOV CX,N N ;循环初始部分;循环初始部分 MOV AXMOV AX,0 0AGAINAGAIN:CMP BYTE PTR BXCMP BYTE PTR BX,0 0 JLE NEXTJLE NEXT INC AXINC AX ;循环体部分;循环体部分NEXTNEXT:INC BXINC BX DEC CXDEC CX JNZ AGAIN JNZ AGAIN ;循环控制部分;循环控制部分 MOV COUNTMOV COUNT,AXAX ;正数个数送入;正数
9、个数送入COUNTCOUNT MOV AHMOV AH,4CH4CH INT 21H INT 21HCODE ENDSCODE ENDS END BEGIN END BEGIN 现在学习的是第15页,共89页 该程序的循环体重复执行了该程序的循环体重复执行了n n次,即次,即当(当(CXCX)=n=n,n-1n-1,1 1 时循环执行时循环执行,当(,当(CXCX)=0=0时循环结束,将正数个数时循环结束,将正数个数5 5送入字变量送入字变量COUNTCOUNT中。中。对于计数型循环,在进入循环体前要对于计数型循环,在进入循环体前要先要确定循环次数,每循环一次就修改先要确定循环次数,每循环一次
10、就修改一次计数值,计数值为零时就结束循环一次计数值,计数值为零时就结束循环。现在学习的是第16页,共89页 思考题思考题:(1 1)在循环初始部分,如果将负值送入循)在循环初始部分,如果将负值送入循环计数器环计数器CXCX,即,即:“MOV CXMOV CX,-n n”,应该如何,应该如何修改程序?修改程序?(2 2)若将)若将0 0送入循环计数器送入循环计数器CXCX中,即中,即:“MOV MOV CXCX,0 0”,应该如何修改程序?,应该如何修改程序?(3 3)如果要分别统计出正数、零、负数的)如果要分别统计出正数、零、负数的 个数,应如何设计程序?个数,应如何设计程序?现在学习的是第1
11、7页,共89页例例5-25-2 统计寄存器统计寄存器BXBX中中1 1码元的个数,将码元的个数,将结果存放在结果存放在COUNTCOUNT单元中。单元中。分析分析:统计统计BXBX中中1 1码元的个数码元的个数,须进行逐须进行逐位测试。先判断最高位是否为位测试。先判断最高位是否为1 1,然后用移,然后用移位方法位方法,把各位逐次移到最高位进行判断。把各位逐次移到最高位进行判断。循环的结束条件可用计数值循环的结束条件可用计数值1616来控制,即来控制,即可以用计数型循环来设计。可以用计数型循环来设计。但是但是,这种方法的缺点是无论这种方法的缺点是无论BXBX中有没有中有没有 1 1都必须循环都必
12、须循环1616次。次。现在学习的是第18页,共89页 若用条件控制法,即测试若用条件控制法,即测试BXBX的值是否为的值是否为0 0作为结束条件,可大大缩短循环次数。作为结束条件,可大大缩短循环次数。存储单元及寄存器分配如下存储单元及寄存器分配如下:BX:BX:要测试的寄存器要测试的寄存器 CX:CX:存放存放1 1的个数,初始值为的个数,初始值为0 0 COUNT:COUNT:最终存放最终存放1 1的个数的个数 程序流程图如图程序流程图如图5-45-4所示所示现在学习的是第19页,共89页开始(BX)=0(CX)0SF=0CX(CX)+1(BX)左移一位COUNT(CX)结束NYNY图5-4
13、 统计BX中1的个数程序流程现在学习的是第20页,共89页源程序如下源程序如下:STACKSTACK SEGMENT STACK SEGMENT STACK DB 200 DUP DB 200 DUP(0 0)STACKSTACK ENDS ENDSDATADATA SEGMENT SEGMENTCOUNT DW COUNT DW?DATADATA ENDS ENDSCODECODE SEGMENT SEGMENT ASSUME CS ASSUME CS:CODECODE,DSDS:DATADATA,SSSS:STACKSTACKBEGINBEGIN:MOV AXMOV AX,DATADATA
14、 MOV DS MOV DS,AXAX现在学习的是第21页,共89页 MOV CX MOV CX,0 0 ;CX0CX0NEXTNEXT:AND BX AND BX,BXBX ;BXBX相与运算相与运算 JZ EXITJZ EXIT ;(;(BXBX)=0=0,结束循环,结束循环 JNS NEXT1JNS NEXT1 ;SF=0SF=0(结果的最高位)(结果的最高位)转转NEXT1NEXT1 INC CX INC CX ;否则,;否则,CX CX(CXCX)+1+1NEXT1NEXT1:SHL BXSHL BX,1 1 ;(;(BXBX)左移)左移1 1位位 JMP NEXTJMP NEXT
15、;无条件转;无条件转NEXTNEXT继续循环继续循环EXITEXIT:MOV COUNT MOV COUNT,CXCX ;COUNT1COUNT1的个数的个数 MOV AH MOV AH,4CH4CH INT 21H INT 21HCODECODE ENDS ENDS END BEGIN END BEGIN现在学习的是第22页,共89页 程序运行中,若程序运行中,若BXBX的值全为的值全为0 0,则不必则不必循环,直接转循环,直接转EXITEXIT结束。若只有最高位为结束。若只有最高位为1 1,则执行,则执行“INC CXINC CX”后,左移一位,再转后,左移一位,再转NEXTNEXT处判断
16、,此时(处判断,此时(BXBX)=0=0转转EXITEXIT,仅需,仅需执行一次循环。只有最低位为执行一次循环。只有最低位为1 1时才需时才需1616次次循环,统计出循环,统计出BXBX中的个数。显然,用条件中的个数。显然,用条件控制循环效率最高。控制循环效率最高。返回本章目录现在学习的是第23页,共89页5.2 5.2 循环指令循环指令现在学习的是第24页,共89页 为了简化循环程序的设计,为了简化循环程序的设计,8086/80888086/8088指令系统专门设置了一组循环程序指令指令系统专门设置了一组循环程序指令:LOOPLOOP、LOOPZ/LOOPELOOPZ/LOOPE和和LOOP
17、NZ/LOOPNELOOPNZ/LOOPNE。这些循环指令在执行前,这些循环指令在执行前,必须预先将循必须预先将循环次数存放在环次数存放在CXCX寄存器中。寄存器中。另外这些循另外这些循环控制指令只能实现短转移。环控制指令只能实现短转移。现在学习的是第25页,共89页1.LOOP 1.LOOP 循环指令循环指令 格式格式:LOOP LOOP 标号标号 功能功能:CX CX(CXCX)-1-1 判断判断CXCX的值,若(的值,若(CXCX)0 0转移到标号处继续循环,否则转移到标号处继续循环,否则退出循环。退出循环。现在学习的是第26页,共89页例例5-35-3 计算计算1+2+3+1+2+3+
18、100+100,将结果存入字变量将结果存入字变量SUMSUM中。中。分析分析:这是一个典型的这是一个典型的计数型循环,计数型循环,用于求累用于求累加和。循环体执行次数为加和。循环体执行次数为100100。存储单元及寄存器分配如下存储单元及寄存器分配如下:AX:AX:存累加求和,初值为存累加求和,初值为0 0。CX:CX:存循环次数,初值存循环次数,初值100100,每次减,每次减1 1。SUM:SUM:存最终结果的字变量。存最终结果的字变量。现在学习的是第27页,共89页开始AX0CX100AX(AX)+(CX)CX(CX)1(CX)=0SUM(AX)结束NY图5-5 求累加和程序流程图现在学
19、习的是第28页,共89页源程序如下源程序如下:STACKSTACK SEGMENT STACK SEGMENT STACK DB 200 DUP DB 200 DUP(0 0)STACKSTACK ENDS ENDSDATADATA SEGMENT SEGMENTSUMSUM DW DW?DATADATA ENDS ENDSCODECODE SEGMENT SEGMENTASSUME CSASSUME CS:CODECODE,DSDS:DATADATA,SSSS:STACKSTACKBEGINBEGIN:MOV AXMOV AX,DATADATA MOV DS MOV DS,AXAX现在学习的
20、是第29页,共89页 MOV AXMOV AX,0 0 ;AXAX清零清零 MOV CXMOV CX,100100 ;CXCX循环次数循环次数100100NEXTNEXT:ADD AXADD AX,CXCX ;求累加和;求累加和 LOOP NEXTLOOP NEXT MOV SUM MOV SUM,AX AX ;将累加和送入;将累加和送入SUMSUM中中 MOV AHMOV AH,4CH4CH INT 21H INT 21HCODECODE ENDS ENDS END BEGIN END BEGIN 程序运行后,变量程序运行后,变量SUMSUM中保存的值中保存的值是是50505050。现在学习
21、的是第30页,共89页思考思考:(1 1)程序中)程序中“LOOP NEXTLOOP NEXT”语句可以用哪语句可以用哪两条语句来代替?两条语句来代替?(2 2)若要求从)若要求从1 1开始连续开始连续5050个奇数的和个奇数的和,应如何编程?,应如何编程?现在学习的是第31页,共89页2.LOOPZ/LOOPE2.LOOPZ/LOOPE为零或相等时循为零或相等时循 环指令环指令 格式格式:LOOPZ/LOOPE LOOPZ/LOOPE 标号标号 功能功能:CX CX(CXCX)-1-1 判断判断CXCX和和ZFZF的值,若(的值,若(CXCX)0 0且且ZF=1ZF=1转移到标号处继续循转移
22、到标号处继续循环,若(环,若(CXCX)=0=0或或ZF=0ZF=0则退出循则退出循环。环。现在学习的是第32页,共89页3.LOOPNZ/LOOPNE3.LOOPNZ/LOOPNE不为零或不相不为零或不相 等时循环指令等时循环指令 格式格式:LOOPNZ/LOOPNE LOOPNZ/LOOPNE 标号标号 功能功能:CX CX(CXCX)-1-1 判判CXCX和和ZFZF的值,若(的值,若(CXCX)0 0且且ZF ZF=0=0转移到标号处继续循环转移到标号处继续循环,若(若(CXCX)=0=0或或ZF=1ZF=1则退出循环。则退出循环。LOOPZ/LOOPELOOPZ/LOOPE和和LOO
23、PNZ/LOOPNELOOPNZ/LOOPNE指令提供指令提供了提前结束循环的可能性。了提前结束循环的可能性。现在学习的是第33页,共89页 例例5-45-4 以以BUFBUF为首址的存储区中存放有为首址的存储区中存放有N N个个字符。在字符串中查找第字符。在字符串中查找第1 1次出现次出现 “E E”的的字符。若找到将其偏移位置存入字符。若找到将其偏移位置存入FOUNDFOUND;否;否则显示则显示“NO FINDNO FIND!”。分析分析:在字符串中查找某字符,查找的方在字符串中查找某字符,查找的方法有多种,这里采用顺序查找法。若找到法有多种,这里采用顺序查找法。若找到将其偏移位置保存起
24、来,将其偏移位置保存起来,并结束程序;并结束程序;否则显示否则显示“NO FINDNO FIND!”。现在学习的是第34页,共89页 存储单元与寄存器分配如下存储单元与寄存器分配如下:BUF:BUF:存放字符串的存储区存放字符串的存储区SI:BUFSI:BUF存储区中字符的偏移位置,初存储区中字符的偏移位置,初 值为值为1 1,每次递增,每次递增1 1。AL:AL:保存要查找的字符保存要查找的字符CX:CX:存放循环次数,初值为字符串长存放循环次数,初值为字符串长 度,每次减度,每次减1 1。FOUND:FOUND:存查找成功时字符的偏移值存查找成功时字符的偏移值现在学习的是第35页,共89页
25、源程序如下源程序如下:STACK SEGMENT STACKSTACK SEGMENT STACK DB 200 DUP DB 200 DUP(0 0)STACK ENDSSTACK ENDSDATA SEGMENTDATA SEGMENTBUF DB BUF DB“H HE ELLOLLO,MY FRIENDMY FRIEND!”N =$-BUFN =$-BUFFOUND DW FOUND DW?NOFIND DB 0DHNOFIND DB 0DH,0AH0AH,“NO FINDNO FIND!$”DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT ASSU
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 循环 程序设计

限制150内