文档详情

第5章循环子程序结构程序设计

飞***
实名认证
店铺
PPT
1.07MB
约108页
文档ID:5739867
第5章循环子程序结构程序设计_第1页
1/108

第第 5章章 循环结构程序设计循环结构程序设计教学内教学内容容★★ 循环程序的基本结构循环程序的基本结构★★ 循环程序的设计实例循环程序的设计实例5.1 循环程序的基本结构循环程序的基本结构●循环程序设计循环程序设计对于程序中对于程序中 多次、有多次、有规律规律 执行的部分,我们通执行的部分,我们通常使用循环结构常使用循环结构 重复运行重复运行这些部分,使程序有较高这些部分,使程序有较高的运行效率和可读性循的运行效率和可读性循环程序允许嵌套环程序允许嵌套 ,其嵌套其嵌套深度原则上不受限制深度原则上不受限制 ,但但不允许交叉不允许交叉 如右图如右图外外 循环开始循环开始中循环开始中循环开始内循环开始内循环开始内循环结束内循环结束中循环结束中循环结束外循环结束外循环结束 循环结构主要由三部分组成循环结构主要由三部分组成 ,它们是:1. 循环体:循环体: 重复运行的部分,其中还包含了 工作工作部分部分 和 循环控制循环控制 部分工作部分进行相应的操作,而循环控制部分则保证在不满足循环条件时,跳出循环一、循环程序的结构形式:一、循环程序的结构形式: 2. 循环结束条件:循环结束条件: 在循环体中包括了在循环体中包括了 循环结束条件循环结束条件运算部分运算部分 。

每循环一次除了工作部分进行相应的操作每循环一次除了工作部分进行相应的操作外,循环条件部分还要通过运算,得出当前循环的状外,循环条件部分还要通过运算,得出当前循环的状态,以便在适当的条件下结束循环态,以便在适当的条件下结束循环3. 循环初值循环初值 (初始化)(初始化) :: 用于设置开始循环时,用于设置开始循环时, 循环循环体所处的初始状态体所处的初始状态 ,如循环变量初值,循环体中用到,如循环变量初值,循环体中用到的数据和地址指针等的数据和地址指针等初初 始始 化:化: 设置循环的设置循环的 初始状态初始状态循循 环环 体:体: 循环的循环的 工作部分工作部分 及及 修改部分修改部分控制条件:控制条件: 计数控制计数控制特征值控制特征值控制地址边界控制地址边界控制循环结构程序循环结构程序 的设计关键是的设计关键是 循环控制循环控制 部分部分循环控制可以在进入循环之前进行,也可以在循循环控制可以在进入循环之前进行,也可以在循环体后进行,于是形成两种结构:环体后进行,于是形成两种结构:l “先判断、后循环先判断、后循环 ”结构结构l “先循环、后判断先循环、后判断 ”结构结构循环结束的控制可以用循环次数,还可以用特定循环结束的控制可以用循环次数,还可以用特定条件等,于是又有:条件等,于是又有:l 计数控制循环计数控制循环l 条件控制循环条件控制循环DO-WHILE 结构 DO-UNTIL 结构控制条件控制条件初始化初始化循环体循环体YN控制条件控制条件初始化初始化循环体循环体YN“先执行,后判断先执行,后判断 ”“先判断,后执行先判断,后执行 ”用于循环用于循环次数固定次数固定用于循环用于循环次数不固次数不固定定 结束结束初始化初始化循环的初始状态循环的初始状态循环体循环体循环的工作部分循环的工作部分及修改部分及修改部分计数控制循环计数控制循环条件控制循环条件控制循环修改部分修改部分控制条件控制条件YN先循环后判断的循环结构先循环后判断的循环结构5.2 循环结构程序的设计方法循环结构程序的设计方法循环程序设计方法循环程序设计方法常用的循环程序的设计方法有常用的循环程序的设计方法有 计数法、寄存器终值法、计数法、寄存器终值法、条件控制法、开关控制法条件控制法、开关控制法 和和 逻辑控制法逻辑控制法 等。

等计数法计数法 适用于适用于 循环次数固定循环次数固定 的情况,有正计数和倒计数的情况,有正计数和倒计数两种 寄存器终值法寄存器终值法 中控制寄存器初值或终值,不是循环次中控制寄存器初值或终值,不是循环次数,每执行一次循环体,该寄存器的值按某种规律进行处理数,每执行一次循环体,该寄存器的值按某种规律进行处理,直到该寄存器的值达到条件退出循环,一般用于,直到该寄存器的值达到条件退出循环,一般用于 循环次数循环次数不固定不固定 的程序 条件控制法条件控制法 是在是在 循环次数未知循环次数未知 的情况下,对的情况下,对控制条件比较,若满足要求则退出循环,否则继续循环控制条件比较,若满足要求则退出循环,否则继续循环计数控制循环计数控制循环 计数控制循环计数控制循环 利用利用 循环次数循环次数 作为控制条件作为控制条件易于采用循环指令易于采用循环指令 LOOP和和 JCXZ实现实现l 初始化:将循环次数或最大循环次数置入初始化:将循环次数或最大循环次数置入 CXl 循环体循环体l 循环控制:用循环控制:用 LOOP指令对指令对 CX减减 1、并判断是、并判断是否为否为 0 计数控制循环先循环后判断例:例: 从从 10050H开始开始,连续存放有,连续存放有 两个两个8字节字节 数据数据 ,求这,求这两数之和,并将结两数之和,并将结果存放于这两数之果存放于这两数之后。

后开始开始初始化部分初始化部分循环体部分循环体部分修改部分修改部分循环控制循环控制结束结束NYSTART:: MOV AX,, 1000HMOV DS,, AXMOV SI,, 50HMOV DI,, 58HMOV BX,, 60HMOV CX,, 4CLCAA:: MOV AX,, [SI]ADC AX,, [DI]MOV [BX],, AXPUSHFADD SI,, 2ADD DI,, 2ADD BX,, 2POPFLOOP AAHLTDEC CXJNZ AA例:例: 从从 10050H开开始,存放有始,存放有 20个字个字数据数据 组,找出其中组,找出其中的的 最大值最大值 和和 最小值最小值分别存放在分别存放在 AX和和BX寄存器中寄存器中开始开始初始化初始化取取 第一个数第一个数 →→ AX和和 BX数组中的数与(数组中的数与( AX))和(和( BX)) 比较比较大大 数数 →→ AX小数小数 →→ BX比较完?比较完?结束结束YN首首 地址地址循环次数循环次数CF←0START:: MOV AX,, 1000HMOV DS,, AXMOV SI,, 0050HMOV CX,, 19CLCMOV AX,, [SI]MOV BX,, AXAA:: ADD SI,, 2CMP BX,, [SI]JLE BBMOV BX,, [SI]JMP SHORT NEXTBB: CMP AX, [SI]JGE NEXTMOV AX, [SI]NEXT: LOOP AAHLT初始化初始化BX≤[SI]AX≥[SI]初始化:循环次数=元素个数- 1循环体:逐个比较求最大、小值循环控制:比较完所有数据 BX1234例:例: 把把 BX 中的二进制数以十六进制的形式中的二进制数以十六进制的形式显示在屏幕上。

显示在屏幕上 …… …… mov ch, 4rotate: mov cl, 4rol bx, clmov al, bland al, 0fhadd al, 30h ; ’0’~’9’ ASCII 30H~39Hcmp al, 3ahjl printitadd al, 7h ; ’A’~’F’ ASCII 41H~46Hprintit: mov dl, almov ah, 2int 21hdec chjnz rotate……条件控制循环条件控制循环条件控制循环需要利用特定条件判断循环是否结条件控制循环需要利用特定条件判断循环是否结束束 .条件控制循环用条件转移指令判断循环条件条件控制循环用条件转移指令判断循环条件 .转移指令可以指定目的标号来改变程序的运行顺转移指令可以指定目的标号来改变程序的运行顺序,如果目的标号指向一个重复执行的语句体的序,如果目的标号指向一个重复执行的语句体的开始或结束,便构成了循环控制结构开始或结束,便构成了循环控制结构 .例例 显示以显示以 0结尾的字符串结尾的字符串;数据段;数据段string db 'Let us have a try !',0 ;; 代码段代码段mov bx,offset stringagain: mov dl,[bx]cmp dl,0 jz done ;为;为 0结束结束mov ah,2 ;; 不为不为 0,显示,显示int 21hinc bx ;; 指向下一个字符指向下一个字符jmp againdone: …………条件控制循环条件控制循环先判断后循环先判断后循环例例 记录某个字存储单元数据中记录某个字存储单元数据中 1的个数的个数;数据段数据段number dw 1110111111100100B ;代码段代码段mov bx,numberxor dl,dl ;; 循环初值:循环初值: DL←0again: test bx,0ffffh ;; 也可以用也可以用 cmp bx,0jz done;; 全部是全部是 0就可以退出循环,减少循环次数就可以退出循环,减少循环次数shl bx,1 ;; 用指令用指令 shr bx,1也可以也可以adc dl,0;; 利用利用 ADC指令加指令加 CF的特点进行计数的特点进行计数jmp again条件控制循环先判断后循环多重循环程序设计多重循环程序设计在一个循环程序中循环体内还包含一个或多个循环结构,称为 多重循环程序多重循环程序 。

其设计方法与单循环程序是一致的●注意:注意:A、 分清各重循环的控制条件及其程序实现,相互之间不能混淆B、 从外循环再次进入内循环时,初始条件必须重新设置冒泡法冒泡法“冒泡法冒泡法 ”是一种排序算法,不是最优的算法,但它是一种排序算法,不是最优的算法,但它易于理解和实现易于理解和实现冒泡法从第一个元素开始,依次对相邻的两个元素冒泡法从第一个元素开始,依次对相邻的两个元素进行比较,使前一个元素不大于后一个元素;将所进行比较,使前一个元素不大于后一个元素;将所有元素比较完之后,最大的元素排到了最后;然后有元素比较完之后,最大的元素排到了最后;然后,除掉最后一个元素之外的元素依上述方法再进行,除掉最后一个元素之外的元素依上述方法再进行比较,得到次大的元素排在后面;如此重复,直至比较,得到次大的元素排在后面;如此重复,直至完成就实现元素从小到大的排序完成就实现元素从小到大的排序这需要一个双重循环程序结构这需要一个双重循环程序结构 图示冒泡法的排序过程冒泡法的排序过程序号序号 数数 比比 较较 遍遍 数数1 2 3 41 322 853 164 155 8321615885161583285158163285815163285例:例: 将首地址为将首地址为 a 的字数组从大到小排序的字数组从大到小排序(( 起泡排序算法,多重循环)起泡排序算法,多重循环)10030789915-16645189256100789930156645189256-1100997830664518925615-1100997866451892563015-1100997866189256453015-1100997818925666453015-1100991892567866453015-1100189256997866453015-1189256100997866453015-1256189100997866453015。

下载提示
相似文档
正为您匹配相似的精品文档