第5章 程序控制结构及其程序设计

上传人:aa****6 文档编号:55183762 上传时间:2018-09-25 格式:PPT 页数:173 大小:779KB
返回 下载 相关 举报
第5章 程序控制结构及其程序设计_第1页
第1页 / 共173页
第5章 程序控制结构及其程序设计_第2页
第2页 / 共173页
第5章 程序控制结构及其程序设计_第3页
第3页 / 共173页
第5章 程序控制结构及其程序设计_第4页
第4页 / 共173页
第5章 程序控制结构及其程序设计_第5页
第5页 / 共173页
点击查看更多>>
资源描述

《第5章 程序控制结构及其程序设计》由会员分享,可在线阅读,更多相关《第5章 程序控制结构及其程序设计(173页珍藏版)》请在金锄头文库上搜索。

1、第5章 程序控制结构及其程序设计,5.1 汇编语言程序设计概述 5.2 顺序程序设计 5.3 分支程序设计 5.4 循环程序设计 5.5 在实模式下发挥80386及其后继机型的优势 习题5,5.1 汇编语言程序设计概述,5.1.1 汇编语言程序设计的基本步骤 编制汇编语言程序的基本步骤如下: (1) 分析问题,抽象出描述问题的数学模型。遇到一个题目,特别是一个较为复杂的题目,先要对其进行全面的分析,看它给出了什么条件,有什么特点,找出规律,归纳出数学模型。当然,也可能有些问题不用写出数学模型或写不出数学模型。,(2) 确定算法。有了数学模型,或虽然没有数学模型但已把题目分析清楚了,就选择一个合

2、适的算法和适当的数据结构。如果没有可供选用的现成的算法和结构,就需要针对具体问题设计一个算法或结构。 (3) 绘制流程图。流程图就是用图形的方式把解决问题的算法直观地描述出来。对于一个比较复杂的问题,画出流程图,这有助于对问题的理解以及有助于编写出正确的程序。当然,如果算法比较简单,也可不画流程图。,(4) 分配存储空间和工作单元。用汇编语言编写程序时,需要给程序中的变量指定内存单元地址或指定寄存器。 (5) 编写程序。要把题目中需要处理的数据合理地根据(2)、(3)、(4)步的工作,选用适合的指令,并按一定的语法规则编写相应的程序。 (6) 静态检查。静态检查就是用人工的方式检查程序是否有错

3、误,包括算法错误和语法错误等,如果有错误,及时改正过来。处理得好,静态检查能够发现和改正程序中的大部分错误。,(7) 上机调试运行。任何程序必须经过调试,才能检查出解题目的是否正确以及程序是否符合设计思想。在调试程序的过程中,应该善于利用机器提供的调试工具(如DEBUG)和有效的其他工具软件来进行工作,经过反复的“运行发现错误改正错误运行”,才能得到正确的程序。这一点对初学者特别重要,它将给汇编语言编程提供很大的帮助。 程序的编写和调试运行是学好汇编语言的重要手段。只有多编写程序和多调试运行程序,才能有效地提高编写和阅读程序的能力。,5.1.2 程序流程图 表示一个算法,可以用不同的方法。常用

4、的有自然语言、传统流程图、结构化流程图、伪代码和PAD图等。 1. 用自然语言表示算法 很多算法是用自然语言表示的,自然语言是指人们日常使用的语言。用自然语言表示算法通俗易懂,但文字冗长,容易出现“歧义性”。自然语言表示的含义往往不大严格,要根据上下文才能判断其正确的含义。假如有这样一句话:“王先生对刘先生说孩子考上了大学。”是王先生的孩子考上大学呢,还是刘先生的孩子考上大学呢? 光从这句话本身难以判断。此外,用自然语言描述包含分支和循环的算法很不方便。因此,除了很简单的问题以外,一般程序设计不用自然语言描述算法。,2. 流程图的组成 流程图是用一些图框表示各种操作。用图形表示算法,直观形象,

5、易于理解。美国国家标准化协会ANSI(American National Standard Institute)规定了一些常用的流程图图元(见图5.1),已被世界各国程序工作者普遍采用。 借助于流程图可以清晰地把程序思路表达出来,有助于编写正确的程序。流程图对于程序设计人员,特别是初学者是一种非常有用的工具。 流程图一般由6种成分组成,如图5.1所示。,图5.1 流程图的组成成分图,1) 执行框(矩形框) 图5.1中的方框,其作用是表示一段程序或一个模块的功能,对于结构化程序,一个执行框只有一个入口和一个出口。 2) 判别框(菱形框) 图5.1中的菱形框,其作用是对一个给定的条件进行判断,根据

6、给定的条件是否成立来决定如何执行其后的操作。它有一个入口,两个出口,如图5.2所示。,图5.2 流程图的绘制示意,3) 开始框和终止框 图5.1中的圆头方框表示程序的起始和终止。 4) 指向线 指向线表示程序执行的顺序。 5) 连接点 图5.1中小圆圈是连接点,用于将画在不同地方的流程线连接起来。如图5.2中有两个以为标志的连接点,它表示这两个点是互相连接在一起的。实际上它们是同一个点,只是当在纸张上画不下时才分开来画。用连接点,可以避免流程线的交叉或过长,使流程图清晰。,流程图是表示算法的较好工具。一个流程图包括以下几部分: (1) 表示相应操作的框; (2) 带箭头的流程线; (3) 框内

7、外必要的文字说明。 绘制流程线不要忘记画箭头,因为它是反映流程执行的先后次序的,如不画出箭头就难以判定各框的执行次序了。,用流程图表示算法直观、形象,能比较清楚地显示出各个框之间的逻辑关系。前一时期国内外计算机书刊都广泛使用这种流程图表示算法,但是,这种流程图占用篇幅较多,尤其当算法比较复杂时,画流程图既费时又不方便,在结构化程序设计方法推广之后,许多书刊已用N-S结构化流程图代替这种传统的流程图。但是每一个程序编制人员都应当熟练掌握传统流程图,做到会看会画。,3. 三种基本结构和改进的流程图 1) 传统流程图的弊端 传统的流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制。因此,使

8、用者可以不受限制地使流程随意地转来转去,使流程图变得毫无规律。阅读者要花很大精力去追踪流程,使人难以理解算法的逻辑。这种情况如图5.3所示。这种如同乱麻一样的算法称为BS型算法,意为就像一碗面条(A Bowl of Spaghetti),乱无头绪。,图5.3 杂乱流程示意,这种算法不好,难以阅读,也难以修改,可靠性和可维护性难以保证。如果我们写出的算法能限制流程的无规律任意转向,如同一本书那样,由各章各节顺序组成,那样,阅读起来就很方便,从头到尾顺序地看下去即可。而如果一本书不是由各章节顺序组成,各章节内各节毫无规律地乱排,阅读这种书就很困难。,为了提高算法的质量,使算法的设计和阅读更方便,必

9、须限制滥用箭头,即不允许无规律地使流程随意转向,只能顺序地进行下去。但是,算法上难免会包含一些分支和循环,而不可能全部由一个一个框顺序组成。为了解决这个问题,人们设想,规定出几种基本结构,然后由这些基本结构按一定规律组成一个算法结构(如同用一些基本预制构件来搭成房屋一样),整个算法的结构是由上而下地将各个基本结构顺序排列起来的。如果能做到这一点,算法的质量就能得到保证和提高。,2) 三种基本结构 1966年,BOHRA和JACOPINI提出了以下三种基本结构,用这三种基本结构作为表示一个良好算法的基本单元。 (1) 顺序结构。如图5.4所示,虚线框内是一个顺序结构。其中A和B两个框是顺序执行的

10、。即在执行完A框所指定的操作后,必然接着执行B框所指定的操作。顺序结构是最简单的一种基本结构。,图5.4 顺序结构图,(2) 选择结构(也称选取结构或分支结构)。如图5.5所示,虚线框内是一个选择结构。此结构中必包含一个判断框。根据给定的条件P是否成立而选择执行A框或B框。请注意,无论P条件是否成立,只能执行A框或B框之一,不可能既执行A框又执行B框。无论走哪一条路径,在执行完A或B之后,都经过b点,然后脱离本选择结构。A或B两个框中可以有一个是空的,即不执行任何操作。 (3) 循环结构(又称重复结构)。循环结构指反复执行某一部分的操作,有当型(WHILE型)循环、直到型(UNTIL型)循环和

11、计数型(FOR-NEXT)循环。,图5.5 选择结构图,4. 结构化程序设计的特点 三种基本循环结构的共同特点如下: (1) 只有一个入口。 (2) 只有一个出口。尽管一个菱形判断框有两个出口,但由它构成的一个选择结构仍只有一个出口。不要将菱形框的出口和选择结构的出口混淆。 (3) 各功能框均可执行。结构内的每一部分都有机会被执行到,也就是说,对每一个框而言,都应当有一条从入口到出口的路径通过它。,(4) 结构中无死循环。 实践证明,由以上三种基本结构顺序组成的算法结构,可以解决任何复杂的问题。由基本结构所构成的算法属于“结构化”的算法,它不存在无规律的转向,只在本结构内才允许存在分支、向前或

12、向后的跳转。 基本结构不一定只限于上面三种,只要具有上述四个特点的都可以作为基本结构。人们可以自己定义基本结构,并由这些基本结构组成结构化程序。,5.2 顺序程序设计,在顺序程序结构中,完全按顺序逐条执行指令序列,这种情况在程序中大量存在,但仅由顺序结构构成的作为完整的程序则很少见。顺序结构的程序是最简单的程序。,【例5-1】 将两个字节数据相加,并存放到一个结果单元中。 DATA SEGMENT AD1 DB 4CH ;定义第1个加数 AD2 DB 25H ;定义第2个加数 SUM DB ? ;定义结果单元 DATA ENDS CODE SEGMENT,ASSUME CS: CODE,DS:

13、 DATA START: MOV AX,DATA MOV DS,AX MOV AL,AD1 ;取出第1个加数 ADD AL,AD2 ;和第2个加数相加 MOV SUM,AL ;存放结果 MOV AH,4CH INT 21H ;返回DOS CODE ENDS END START,【例5-2】 两个32位数的乘法程序。 .386 DATA SEGMENT NUM1 DD 12345678H ;定义第1个乘数 NUM2 DD 5A4BEF06H ;定义第2个乘数 RESULT DD 2 DUP(?) ;定义结果单元 DATA ENDS CODE SEGMENT,ASSUME CS:CODE,DS:D

14、ATA START: MOV AX,DATA MOV DS,AX MOV EAX,NUM1 ;取出第1个乘数 MUL NUM2 ;和第2个乘数相乘,MOV RESULT,EAX ;存放结果的低4字节部分 MOV RESULT+4,EDX ;存放结果的高4字节部分 MOV AH,4CH ; INT 21H ;返回DOS CODE ENDS END START,【例5-3】 将一个字节压缩BCD码转换为两个ASCII码。 分析:一个字节的压缩BCD码就是用一个字节的二进制数表示两位十进制数,如十进制数96表示成压缩BCD码就是96H,转换成ASCII码就是把压缩BCD码表示的十进制数的高位和低位分

15、开,并以ASCII码表示,即转换成39H和36H。,DATA SEGMENT BCDBUF DB 96H ;定义1个字节的压缩BCD码 ASCBUF DB 2 DUP(?) ;定义2个字节的结果单元 DATA ENDS CODE SEGMENT ASSUME CS: CODE,DS: DATA,START: MOV AX,DATA MOV DS,AX MOV AL,BCDBUF ;取出BCD码 MOV BL,AL ;送BL暂存 MOV CL,4 SHR AL,CL ;高4位变成低4位,高4位补0(96H09H) ADD AL,30H ;变成ASCII码(39H),MOV ASCBUF,AL;存

16、储第1个ASCII码 AND BL,0FH ;屏蔽掉高4位,只保留低4位(96H06H) ADD BL,30H ;变成BCD码(36H) MOV ASCBUF+1,BL ;存储第2个码 MOV AH,4CH INT 21H CODE ENDS END START,【例5-4】 利用直接查表法完成将键盘输入的一位10进制数(09)转换成对应的平方值并存放在SQRBUF单元中。(用P单步调试) 分析:09的平方值分别为0、1、4、9、16、25、36、49、64、81。把平方值放在一起形成一个平方值表,根据输入的值和对应平方值所在单元地址之间的关系(表首地址加上输入的值),查出相应的平方值。,DATA SEGMENT SQUTAB DB0,1,4,9,16,25,36,49,64,81 SQUBUF DB ? DATA ENDS CODE SEGMENT ASSUME CS: CODE,DS: DATA START: MOV AX,DATA,MOV DS,AX MOV BX,OFFSET SQUTAB ;平方表首地址 MOV AH,1 INT 21H ;由键盘输入个数,得到其ASCII码 SUB AL,30H ;由ASCII码得到相应的数 XLAT ;查表 MOV SQUBUF,AL ;存储结果,

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

当前位置:首页 > 办公文档 > PPT模板库 > 教育/培训/课件

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