当前位置:文档之家› 第5章 循环子程序结构程序设计

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

[题目]:建立学生名次表。 [要求 ]:以 grade为首地址的 10个字的数组中保存了学 生成绩,其中 grade+I 保存学号为 I+1 的学生的成绩。 要求建立一个10个字的rank数组,并根据grade中的 学生成绩将学生名次填入 rank数组中。其中 rank+I 的内容是学号为I+1的学生的名次。
图示
例:将首地址为 a 的字数组从大到小排序 (起泡排序算法,多重循环)
100 30 78 99 15 -1 66 45 189 256 100 78 99 30 15 66 45 189 256 -1 100 99 78 30 66 45 189 256 15 -1 100 99 78 66 45 189 256 30 15 -1 100 99 78 66 189 256 45 30 15 -1 100 99 78 189 256 66 45 30 15 -1 100 99 189 256 78 66 45 30 15 -1 100 189 256 99 78 66 45 30 15 -1 189 256 100 99 78 66 45 30 15 -1 256 189 100 99 78 66 45 30 15 -1
的最大值和最小值
分别,1000H MOV DS,AX MOV SI,0050H MOV CX,19 CLC MOV AX,[SI] MOV BX,AX AA:ADD SI,2 CMP BX,[SI] JLE BB BX≤[SI] MOV BX,[SI] JMP SHORT NEXT
条件控制循环
条件控制循环需要利用特定条件判断循环是否结 束. 条件控制循环用条件转移指令判断循环条件.
转移指令可以指定目的标号来改变程序的运行顺
序,如果目的标号指向一个重复执行的语句体的
开始或结束,便构成了循环控制结构.
例 显示以0结尾的字符串
string ;数据段 db 'Let us have a try !',0 ;代码段 mov bx,offset string mov dl,[bx] 条件控制循环 cmp dl,0 先判断后循环 jz done ;为0结束 mov ah,2 ;不为0,显示 int 21h inc bx ;指向下一个字符 jmp again ……
外循环开始 中循环开始 内循环开始 内循环结束
中循环结束 外循环结束
一、循环程序的结构形式:
循环结构主要由三部分组成,它们是: 1. 循环体:重复运行的部分,其中还包含了工作
部分和循环控制部分。工作部分进行相应的操作,
而循环控制部分则保证在不满足循环条件时,跳出
循环。
2. 循环结束条件:在循环体中包括了循环结束条件 运算部分。每循环一次除了工作部分进行相应的操作 外,循环条件部分还要通过运算,得出当前循环的状 态,以便在适当的条件下结束循环。 3. 循环初值(初始化):用于设臵开始循环时,循环
data SEGMENT RESULT DW ? data ENDS code SEGMENT ASSUME CS:code,DS:data START: MOV AX,data MOV DS,AX
例:把 BX 中的二进制数以十六进制的形式 显示在屏幕上。
BX
1
2 3
4
…… mov ch, 4 rotate: mov cl, 4 rol bx, cl mov al, bl and al, 0fh add al, 30h ; ’0’~’9’ ASCII 30H~39H cmp al, 3ah jl printit add al, 7h ; ’A’~’F’ ASCII 41H~46H printit: mov dl, al mov ah, 2 int 21h dec ch jnz rotate ……
第 5章
循环结构程序设计
教学内容
★循环程序的基本结构 ★循环程序的设计实例
5.1 循环程序的基本结构
●循环程序设计
对于程序中多次、有
规律执行的部分,我们通
常使用循环结构重复运行 这些部分,使程序有较高 的运行效率和可读性。循 环程序允许嵌套 , 其嵌套 深度原则上不受限制 , 但 不允许交叉。如右图
PUSHF ADD SI,2
ADD DI,2
ADD BX,2 POPF LOOP AA
HLT
DEC CX JNZ AA
例:从10050H开
首地址 循环次数 CF←0
开始 初始化
始,存放有20个字
数据组,找出其中
取第一个数→AX和BX 数组中的数与(AX) 和(BX)比较 大数→AX 小数→BX N 比较完? Y 结束









●特点:
1、每次冒出一个最小数。
2、最多(N-1)步;(外循环)
在每步中,第一步需( N-1 )次比较,以后逐步减
少。(内循环)
计数控制双重循环
a
dw
100,30,78,99,15,-1,66,45,189,256 …… mov dec mov mov mov cmp jge xchg mov
初始化 循环的初始状态
循环体
修改部分 Y 循环的工作部分 及修改部分
控制条件
计数控制循环 条件控制循环
N
结束
5.2 循环结构程序的设计方法
循环程序设计方法
常用的循环程序的设计方法有计数法、寄存器终值法、
条件控制法、开关控制法和逻辑控制法等。
计数法适用于循环次数固定的情况,有正计数和倒计数
两种。寄存器终值法中控制寄存器初值或终值,不是循环次
多重循环程序设计
在一个循环程序中循环体内还包含一个或多个
循环结构,称为多重循环程序。其设计方法与单循
环程序是一致的。 ●注意: A、分清各重循环的控制条件及其程序实现,相互之 间不能混淆。 B、从外循环再次进入内循环时,初始条件必须重新 设臵。
冒泡法
“冒泡法”是一种排序算法,不是最优的算法,但 它易于理解和实现 冒泡法从第一个元素开始,依次对相邻的两个元 素进行比较,使前一个元素不大于后一个元素; 将所有元素比较完之后,最大的元素排到了最后; 然后,除掉最后一个元素之外的元素依上述方法 再进行比较,得到次大的元素排在后面;如此重 复,直至完成就实现元素从小到大的排序 这需要一个双重循环程序结构
子程序设计
子程序的调用与返回
保存与恢复寄存器
子程序的参数传送
子程序的嵌套与递归
中断的相关概念
1 子程序的基本概念
若在一个程序中或多个程序
中多处用到同一个程序段(这些 程序段的功能、结构相同,只是 某些变量赋值不同),那么就可 以把这段程序单独存放,每当需 要执行这段程序时,就可以调用 该程序段,执行完后再返回原来 的程序去继续执行。
loop1:
loop2:
cx, 10 cx di, cx bx, 0 ax, a[bx] ax, a[bx+2] continue ax, a[bx+2] a[bx], ax
continue:
add loop mov loop ……
bx, 2 loop2 cx, di loop1
实验四 循环程序设计
可以简化源程序结构;
提高程序的可读性与可维护性; 有利于代码复用;
提高程序的设计效率。
●调用子程序的程序称为主程序或调用程序。 ◆主程序向子程序转移的过程叫子程序调用或 过程调用。(转子)CALL ◆子程序执行后返回主程序的过程称为子程序 返回或过程返回。(返主)RET ●子程序是模块化程序设计的重要组成部分。
初始化:循环次数=元素个数-1 循环体:逐个比较求最大、小值 循环控制:比较完所有数据
BB:CMP AX,[SI]
AX≥[SI]
JGE NEXT MOV AX,[SI]
NEXT:LOOP AA
HLT
例:编程计算1+2+3+…+50的和,结果送 RESULT单元 MOV AX,1 MOV RESULT,0 MOV CX,50 CLC NEXT: ADC RESULT,AX INC AX LOOP NEXT MOV AH,4CH INT 21H code ENDS END START
[提示]:
1、一个学生的名次等于成绩高于该学生的人数加1。
2、采用两重循环结构实现。 3 、由于使用的寄存器较多,现将寄存器的分配情况 说明如下:(供参考) AX—存放当前被测学生的成绩; BX—存放当前被测学生的相对地址指针。 CX—内循环计数值; DX—当前被测学生的名次计数值; SI— 内循环测试时的地址指针; DI— 外循环计数值;
数,每执行一次循环体,该寄存器的值按某种规律进行处理, 直到该寄存器的值达到条件退出循环,一般用于循环次数不 固定的程序。条件控制法是在循环次数未知的情况下,对控 制条件比较,若满足要求则退出循环,否则继续循环。
计数控制循环
计数控制循环利用循环次数作为控制条件
易于采用循环指令LOOP和JCXZ实现

“先循环、后判断”结构
循环结束的控制可以用循环次数,还可以用特定 条件等,于是又有:

计数控制循环 条件控制循环
初始化
用于循环次 数不固定
初始化
控制条件
Y
N
循环体
N
循环体
控制条件
Y
用于循环 次数固定
DO-WHILE 结构 “先判断,后执行”
DO-UNTIL 结构 “先执行,后判断”
先循环后判断的循环结构
again:
done:
例:编程统计BUF字单元中含1的个数,并将结果存入COUNT字 节单元中。 MOV AX,BUF
DATA BUF COUNT DATA STACK SEGMENT DW 2345H DB 0 ENDS SEGMENT STACK DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV CL,0 COPA: AND AX,AX JE EXIT SHL AX,1 JNC COPA INC CL JMP COPA EXIT: MOV COUNT,CL MOV AH,4CH INT 21H CODE ENDS END START
相关主题