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