[工学]第5章 循环和分支程序设计

上传人:tia****nde 文档编号:70785093 上传时间:2019-01-18 格式:PPT 页数:55 大小:436.85KB
返回 下载 相关 举报
[工学]第5章 循环和分支程序设计_第1页
第1页 / 共55页
[工学]第5章 循环和分支程序设计_第2页
第2页 / 共55页
[工学]第5章 循环和分支程序设计_第3页
第3页 / 共55页
[工学]第5章 循环和分支程序设计_第4页
第4页 / 共55页
[工学]第5章 循环和分支程序设计_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《[工学]第5章 循环和分支程序设计》由会员分享,可在线阅读,更多相关《[工学]第5章 循环和分支程序设计(55页珍藏版)》请在金锄头文库上搜索。

1、第5章 循环与分支程序设计,5.1 概述 5.2 顺序程序设计 5.3 分支程序设计 5.4 循环程序设计,开 始,5.1 概述,5.1.1 汇编语言程序设计的一般步骤 5.1.2 流程图,返回本章首页,5.1.1 汇编语言程序设计的一般步骤,汇编语言程序设计一般有以下几个步骤: 1分析问题,确定算法 2绘制流程图 3根据流程图编制程序 4调试程序,返回本节,5.1.2 流程图,1流程图的概念 流程图是由特定的几何图形、指向线、文字说明来表示数据处理的步骤,形象描述逻辑控制结构以及数据流程的示意图。流程图具有简洁、明了、直观的特点。,2流程图符号表示 (1)起止框:表示程序的开始和结束。,起止

2、框,(2)判断框,(3)处理框,(4)调用框,(5)指向线,(6)连接框,返回本节,5.2 顺序程序设计,下面举例说明顺序程序的设计。 【例5.1】试编写一程序计算以下表达式的值。 =(v-(*+-540)/x 式中x、v均为有符号字数据。 设、的值存放在字变量、V中,结果存放在双字变量之中,程序的流程图如图5.1所示。,返回本章首页,图5.1 顺序运算程序流程图,源程序如下: DATA SEGMENT X DW 200 Y DW 100 Z DW 3000 V DW 10000 W DW 2 DUP(?) DATA ENDS STACK SEGMENT STACK DB 200 DUP(0)

3、 STACK ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK,START: MOV AX,DATA MOV DS,AX ;DATAAX MOV AX,X IMUL Y ;(X)*(Y)DX:AX MOV CX,AX MOV BX,DX ;(DX:AX)(BX:CX) MOV AX,Z CWD ;(Z)符号扩展 ADD CX,AX ADC BX,DX ;(BX:CX)+(DX:AX)(BX:CX) SUB CX,540 SBB BX,0 ;(BX:CX)-540(BX:CX) MOV AX,V,CWD ;(V)符号扩展 SUB AX,CX SB

4、B DX,BX ;(DX:AX)-(BX:CX)(DX:AX) IDIV X ;(DX:AX)/X MOV W,AX ;商W MOV W+2,DX ;余数DXW+2 MOV AH,4CH INT 21H CODE ENDS ;退出DOS 状态 END START,【例5.2】,【例5.2】已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。编写程序如下:,STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT TAB DB 80,85,86,71,7

5、9,96 DB 83,56,32,66,78。84 NO DB 10 ENGLIST DB? DATA ENDS CODE SEGMENT,ASSUME DS:DATA,SS:STACK,CS:CODE BEGIN: MOV AX,DATA MOV DS ,AX LEA BX,TAB MOV AL,NO DEL AL XLAT MOV ENGLISH,AL MOV AH,4CH INT 21H CODE ENDS END BEGIN,5.3 分支程序设计,5.3.1 用条件转移指令实现程序分支 5.3.2 用跳转表实现多路分支,返回本章首页,5.3.1 用条件转移指令实现程序分支,【例.3】编

6、写计算下面函数值的程序: 1 X0 Y= 0 X=0 -1 X 设输入数据为X、输出数据Y,且皆为字节变量。程序流程图如图5.2所示。 程序如下:,DATA SEGMENT X DB -10 Y DB ? DATA ENDS STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA,MOV DS,AX CMP X,0 ;与0进行比较 JGE A1 ;X0转A1 MOV Y,-1 ;X 0时,-1Y JMP EXIT A1: JG A2

7、;X0转A2 MOV Y,0 ;X=0时,0Y JMP EXIT A2: MOV Y,1 ;X0,1Y EXIT: MOV AH,4CH INT 21H CODE ENDS END START,MOV DS,AX CMP X,0 ;与0进行比较 JGE A1 ;X0转A1 MOV Y,-1 ;X 0时,-1Y JMP EXIT A1: JG A2 ;X0转A2 MOV Y,0 ;X=0时,0Y JMP EXIT A2: MOV Y,1 ;X0,1Y EXIT: MOV AH,4CH INT 21H CODE ENDS END START,图5.2 分支运算程序流程图,【例5.4】,【例5.4】

8、试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。 设三个带符号数分别在三个字变量X、Y、Z中存储。程序流程图如图5.3所示,图5.3 例5.4程序流程图,程序如下: STAC SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT X DW 00ABH Y DW 5 Z DW 200 MAX DW ? DATA ENDS CODE SEGMENT,ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX MOV AX,X CMP AX,Y ;XY? JG L1

9、 MOV AX,Y ;YZ? CMP AX,Z JG EXIT L2: MOV AX,Z JMP EXIT,L1: CMP AX,Z ;XZ? JLE L2 EXIT: MOV MAX,AX MOV AH,4CH INT 21H CODE ENDS END START,返回本节,5.3.2 用跳转表实现多路分支,【例5.5】设某程序有8路分支,试根据给定的N值(18),将程序的执行转移到其中的一路分支。 程序流程如图5.4所示。,图5.4 例5.5程序流程图,程序如下: DATA SEGMENT TAB DW P1,P2,P3,P4,P5,P6,P7,P8 N DB 5 DATA ENDS S

10、TACK SEGMENT DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE,START: MOV AX,DATA MOV DS,AX MOV AL,N DEL AL ADD AL,AL MOV BL,AL MOV BH,0 JMP TABBX,P1: JMP EXIT P2: JMP EXIT P2: JMP EXIT P3: ,JMP EXIT P8: EXIT: MOV AH,4CH INT 21H CODE ENDS END START 上述程序中的无条件转移指令的转移地址采用的是变址寻址。同理,转

11、移地址也可以用寄存器间接寻址或基址加变址寻址,读者可自行考虑。,返回本节,5.4 循环程序设计,5.4.1 循环程序的结构 5.4.2 单重循环程序设计 5.4.3 多重循环程序设计,返回本章首页,5.4.1 循环程序的结构,1初始化部分 2循环体部分 3循环控制部分,循环程序的常见结构形式如图5.5(a)、(b)所示。,返回本节,5.4.2 单重循环程序设计,1计数控制 2条件控制,1计数控制,【例5.7】已知有几个元素存放在以BUF为首址的字节存贮区中,试统计其中正元素的个数。 显然,每个元素为一个8位有符号二进制数,统计其中正元素的个数可用循环程序实现。其程序流程图如图5.6所示。,图5

12、.6 程序流程图,【例5.8】,【例5.8】试编写一程序,要求比较两个字符串STR1和STR所含字符是否相同,若相同则显示MATCH!,若不相同则显示NO MATCH!。(程序略) 其流程图如图5.7所示。,图5.7 程序流程图,【例5.9】试编一个程序将字单元BUF中所含1的个数存入COUNT单元中。 分析: 要测出BUF字单元所含1的个数,首先将BUF中的数送给寄存器AX,然后将AX寄存器逻辑左移一次,如果CF=1,则表明AX中的最高位为1,则计数器CL计数1次,如果CF=0,表明AX最高位为0,这样依次将最高位移入CF中去测试。移位之后,判断AX的值是否为0,如果为0则结束循环,不为0,

13、则继续循环。 其流程图如图5.8所示。,2条件控制,图5.8 例5.9流程图,程序如下: DATA SEGMENT BUF DW 0011110010101011B COUNT DB ? DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,START: MOV AX,DATA MOV DS,AX MOV AX,BUF MOV CL,0 ;计数器为0 LOPA: AND AX,AX JE EXIT ;(AX)=0,结束循环 SHL AX,1 ;AX 左移一位 JNC LOPA INC CL ;产生进位,(CL)+1CL JMP LOPA EXIT: MOV

14、 COUNT,CL MOV AH,4CH INT 21H CODE ENDS END START,返回本节,BIOS和DOS基本调用 调用方法: 1、将调用参数装入指定的寄存器中; 2、BIOS或DOS功能号装入AH; 3、如需子功能号,把它装入AL; 4、按中断号调用DOS或BIOS中断(INT); 5、检查或取得返回参数。,例:DOS调用:键盘输入,显示输出 MOV AH, 01 ;DOS功能号:键盘输入 INT 21H ;DOS调用 MOV CHAR, AL ;返回参数: (AL) MOV DL, A ;调用参数: 输出字符 MOV AH, 02 ; DOS功能号: 显示输出 INT 2

15、1H ; DOS调用,DOS显示功能调用中断 INT 21H,AH 功 能 调 用 参 数 2 显示一个字符(检验Ctrl-Break) DL = 字符 光标跟随字符移动 6 显示一个字符(不检验Ctrl-Break) DL = 字符 光标跟随字符移动 9 显示字符串 DS:DX=串地址 串必须以$结束, 光标跟随串移动,例:显示字符串 MESSAGE DB The sort operation is finished.,13,10,$ MOV AH,9 MOV DX,SEG MESSAGE MOV DS,DX MOV DX,OFFSET MESSAGE INT 21H,5.4.3 多重循环程序设计,【例5.10】在以BUF为首址的字存储区中存放有N个有符号数,现需将它们按大到小的顺序排列在BUF存储区中,试编写其程序。 我们采用冒泡排序算法从第一个数开始依次对相邻两个数进行比较,如次序对,则不交换两数位置;如次序不对则使这两个数交换位置。可以看出,第一遍需比较(N-1)次,此时,最小的数已经放到了最后;第二遍比较只需考虑剩下的(N-1)个数,即只需比较(N-2)次;第三遍只需比较(N-3)次,整个

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号