第5章循环与分支程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第5章循环与分支程序设计
【课前思考】
1. 编制一个汇编语言程序分哪几步?
2. 循环程序有哪两种基本结构?由几部分组成?
3. 设计算法时对可能出现的边界情况如何考虑?
4. 如何设置逻辑尺?
5. 什么是起泡排序算法?
6. 如何理解数组排序算法中采用的折半查找法?
7. 如何使用跳跃表法实现CASE结构?
【学习目标】
了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
【学习指南】
掌握编程的四个步骤至关重要。通过多看举例,学会正确分析理解题意、选择合适的数据结构及算法、坚持先画框图、选取有效指令编程、最后应当掌握运用调试手段进行调试。
学习多重循环程序设计前应熟练掌握单层循环程序设计的各种实现方法及实现细节,如对可能出现的边界情况的处理等。
学习起泡排序算法、折半查找法、跳跃表法之前,应首先理解传统实现方法。
【难重点】
循环控制条件的选择。
考虑循环算法时注意可能出现的边界情况。
静态地预置逻辑尺。动态地修改标志位。
多重循环程序设计时应分别考虑各重循环的控制条件及其程序实现,相互之间不能混淆。另外,应该注意在每次通过外层循环再次进入内层循环时,初始条件必须重新设置。
起泡排序算法是多重循环程序设计中的一种常用方法。
数组排序算法中可以采用折半查找法来提高查找效率。
CASE结构可以使用跳跃表法实现。
【知识点】
编制一个汇编语言程序的一般步骤
5.1 循环程序设计
5.1.1 循环程序的基本结构
5.1.2 循环程序设计方法举例
循环控制条件
边界情况的处理
逻辑尺
5.1.3 多重循环程序设计举例
起泡排序算法
交换标志位
5.2 分支程序设计
5.2.1 分支程序的基本结构
5.2.2 分支程序设计方法举例——折半查找法
5.2.3 跳跃表法
一般说来,编制一个汇编语言程序的步
骤如下:
1)分析题意,确定算法。
2)根据算法,画出程序框图。
3)根据框图编写程序。
4)上机调试程序。
程序有顺序、循环、分支和子程序四种
结构形式。
顺序程序结构是指完全按顺序逐条执
行的指令序列,这在程序段中是大量存在
的,但作为完整的程序则很少见,我们不对
它们作专门讨论。
5.1 循环程序设计
5.1.1 循环程序的结构形式及组成
循环程序可以有两种结构形式,如图所
示。一种是DO_WHILE结构形式;另一种是
DO_UNTIL结构形式。
初始化:设置循环的初始状态;
循环体:循环的工作部分及修改部分;
控制条件:计数控制、特征值控制、地
址边界控制。
例5.1试编制一个程序,把BX寄存器中的二进制数以十六进制的形式显示在屏幕上。
解析:根据题目要求应将BX中的内容从左到右每4位一组显示出来,共显示4个十六进制数位。如果显示的数位是0~9,则把4位二进制数加上30H,转换成相应的ASCII码30H~39H;如果是A~F,则应加上37H(30H+7),转换成ASCII码41H~46H。显示字符可以使用DOS功能调用来实现。右图是程序框图(P162页)。
以binihex.asm为文件名,建立源程序如下:
; binihex.asm
prognam segment ; 定义代码段
main proc far
assume cs:prognam
start: ; 程序从此处开始执行
; 为正常返回DOS而设置堆栈push ds
sub ax,ax
push ax
; 下面是程序的主要部分
mov ch,4 ; 4组二进制数
rotate:
mov cl,4 ; 每组4个二进制位
rol bx,cl ; 把bx循环左移4位
mov al,bl ; 暂存bl到al中
and al,0fh ; 仅保留al的低4位
add al,30h ; 转换成ASCII码
cmp al,3ah ; 要显示的数大于9 ?
jl printit ; 如果数在0~9之间则显示
add al,7h ; 数在A~F之间则调整
printit:
mov dl,al ; 把要显示字符的ASCII码送dl
mov ah,2 ; 功能号2送ah
int 21h ; DOS功能调用
dec ch ; (ch)-1
jnz rotate ; 4组都处理完?否,循环处理下一组
ret ; 返回DOS
main endp ; 主程序main结束
prognam ends ; 代码段结束
end start ; 结束汇编
例5.2 从键盘接收十进制数并存入BX
prognam segment
main proc far
assume cs:prognam
start:
push ds
sub ax,ax
push ax
mov bx, 0
newchar:
mov ah, 1 ;键盘输入
int 21h
sub al, 30h
jl exit ;<0退出
cmp al, 9
jg exit ;>9退出
cbw