第5章程序控制结构及其程序设计优秀PPT.ppt
《第5章程序控制结构及其程序设计优秀PPT.ppt》由会员分享,可在线阅读,更多相关《第5章程序控制结构及其程序设计优秀PPT.ppt(121页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第5章程序控制结构章程序控制结构及其程序设计及其程序设计现在学习的是第1页,共121页5.1 汇编语言程序设计概述汇编语言程序设计概述 5.1.1 汇编语言程序设计的基本步骤 编制汇编语言程序的基本步骤如下:(1)分析问题,抽象出描述问题的数学模型。遇到一个题目,特别是一个较为复杂的题目,先要对其进行全面的分析,看它给出了什么条件,有什么特点,找出规律,归纳出数学模型。当然,也可能有些问题不用写出数学模型或写不出数学模型。现在学习的是第2页,共121页 (2)确定算法。有了数学模型,或虽然没有数学模型但已把题目分析清楚了,就选择一个合适的算法和适当的数据结构。如果没有可供选用的现成的算法和结
2、构,就需要针对具体问题设计一个算法或结构。(3)绘制流程图。流程图就是用图形的方式把解决问题的算法直观地描述出来。对于一个比较复杂的问题,画出流程图,这有助于对问题的理解以及有助于编写出正确的程序。当然,如果算法比较简单,也可不画流程图。现在学习的是第3页,共121页 (4)分配存储空间和工作单元。用汇编语言编写程序时,需要给程序中的变量指定内存单元地址或指定寄存器。(5)编写程序。要把题目中需要处理的数据合理地根据(2)、(3)、(4)步的工作,选用适合的指令,并按一定的语法规则编写相应的程序。(6)静态检查。静态检查就是用人工的方式检查程序是否有错误,包括算法错误和语法错误等,如果有错误,
3、及时改正过来。处理得好,静态检查能够发现和改正程序中的大部分错误。现在学习的是第4页,共121页 (7)上机调试运行。任何程序必须经过调试,才能检查出解题目的是否正确以及程序是否符合设计思想。在调试程序的过程中,应该善于利用机器提供的调试工具和有效的其他工具软件来进行工作,经过反复的“运行发现错误改正错误运行”,才能得到正确的程序。这一点对初学者特别重要,它将给汇编语言编程提供很大的帮助。程序的编写和调试运行是学好汇编语言的重要手段。只有多编写程序和多调试运行程序,才能有效地提高编写和阅读程序的能力。现在学习的是第5页,共121页 5.1.2 程序流程图 表示一个算法,可以用不同的方法。常用的
4、有自然语言、传统流程图和结构化流程图等。1.用自然语言表示算法 很多算法是用自然语言表示的,自然语言是指人们日常使用的语言。用自然语言表示算法通俗易懂,但文字冗长,容易出现“歧义性”。自然语言表示的含义往往不大严格,要根据上下文才能判断其正确的含义。假如有这样一句话:“王先生对刘先生说孩子考上了大学。”现在学习的是第6页,共121页 先生的孩子考上大学呢,还是刘先生的孩子考上大学呢?光从这句话本身难以判断。此外,用自然语言描述包含分支和循环的算法很不方便。因此,除了很简单的问题以外,一般程序设计不用自然语言描述算法。2.流程图的组成 流程图是用一些图框表示各种操作。用图形表示算法,直观形象,易
5、于理解。美国国家标准化协会ANSI(American National Standard Institute)规定了一些常用的流程图图元(见图5.1),已被世界各国程序工作者普遍采用。现在学习的是第7页,共121页 借助于流程图可以清晰地把程序思路表达出来,有助于编写正确的程序。流程图对于程序设计人员,特别是初学者是一种非常有用的工具。流程图一般由6种成分组成,如图5.1所示。现在学习的是第8页,共121页图5.1 流程图的组成成分图现在学习的是第9页,共121页 1)执行框(矩形框)图5.1中的方框,其作用是表示一段程序或一个模块的功能,对于结构化程序,一个执行框只有一个入口和一个出口。2)
6、判别框(菱形框)图5.1中的菱形框,其作用是对一个给定的条件进行判断,根据给定的条件是否成立来决定如何执行其后的操作。它有一个入口,两个出口,如图5.2所示。现在学习的是第10页,共121页图5.2 流程图的绘制示意 现在学习的是第11页,共121页 3)开始框和终止框 图5.1中的圆头方框表示程序的起始和终止。4)指向线 指向线表示程序执行的顺序。5)连接点 图5.1中小圆圈是连接点,用于将画在不同地方的流程线连接起来。如图5.2中有两个以为标志的连接点,它表示这两个点是互相连接在一起的。实际上它们是同一个点,只是当在纸张上画不下时才分开来画。用连接点,可以避免流程线的交叉或过长,使流程图清
7、晰。现在学习的是第12页,共121页 流程图是表示算法的较好工具。一个流程图包括以下几部分:(1)表示相应操作的框;(2)带箭头的流程线;(3)框内外必要的文字说明。绘制流程线不要忘记画箭头,因为它是反映流程执行的先后次序的,如不画出箭头就难以判定各框的执行次序了。现在学习的是第13页,共121页 用流程图表示算法直观、形象,能比较清楚地显示出各个框之间的逻辑关系。前一时期国内外计算机书刊都广泛使用这种流程图表示算法,但是,这种流程图占用篇幅较多,尤其当算法比较复杂时,画流程图既费时又不方便,在结构化程序设计方法推广之后,许多书刊已用N-S结构化流程图代替这种传统的流程图。但是每一个程序编制人
8、员都应当熟练掌握传统流程图,做到会看会画。现在学习的是第14页,共121页 3.三种基本结构和改进的流程图 1)传统流程图的弊端 传统的流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制。因此,使用者可以不受限制地使流程随意地转来转去,使流程图变得毫无规律。阅读者要花很大精力去追踪流程,使人难以理解算法的逻辑。这种情况如图5.3所示。这种如同乱麻一样的算法称为BS型算法,意为就像一碗面条(A Bowl of Spaghetti),乱无头绪。现在学习的是第15页,共121页图5.3 杂乱流程示意现在学习的是第16页,共121页图5.4 顺序结构图 现在学习的是第17页,共121页 为了
9、提高算法的质量,使算法的设计和阅读更方便,必须限制滥用箭头,即不允许无规律地使流程随意转向,只能顺序地进行下去。但是,算法上难免会包含一些分支和循环,而不可能全部由一个一个框顺序组成。为了解决这个问题,人们设想,规定出几种基本结构,然后由这些基本结构按一定规律组成一个算法结构(如同用一些基本预制构件来搭成房屋一样),整个算法的结构是由上而下地将各个基本结构顺序排列起来的。如果能做到这一点,算法的质量就能得到保证和提高。现在学习的是第18页,共121页 2)三种基本结构 1966年,BOHRA和JACOPINI提出了以下三种基本结构,用这三种基本结构作为表示一个良好算法的基本单元。(1)顺序结构
10、。如图5.4所示,虚线框内是一个顺序结构。其中A和B两个框是顺序执行的。即在执行完A框所指定的操作后,必然接着执行B框所指定的操作。顺序结构是最简单的一种基本结构。现在学习的是第19页,共121页 (2)选择结构(分支结构)。如图5.5所示,虚线框内是一个选择结构。此结构中必包含一个判断框。根据给定的条件P是否成立而选择执行A框或B框。请注意,无论P条件是否成立,只能执行A框或B框之一,不可能既执行A框又执行B框。无论走哪一条路径,在执行完A或B之后,都经过b点,然后脱离本选择结构。A或B两个框中可以有一个是空的,即不执行任何操作。(3)循环结构(又称重复结构)。循环结构指反复执行某一部分的操
11、作,有当型(WHILE型)循环、直到型(UNTIL型)循环和计数型(FOR-NEXT)循环。现在学习的是第20页,共121页图5.5 选择结构图 现在学习的是第21页,共121页 4.结构化程序设计的特点 三种基本循环结构的共同特点如下:(1)只有一个入口。(2)只有一个出口。尽管一个菱形判断框有两个出口,但由它构成的一个选择结构仍只有一个出口。不要将菱形框的出口和选择结构的出口混淆。(3)各功能框均可执行。结构内的每一部分都有机会被执行到,也就是说,对每一个框而言,都应当有一条从入口到出口的路径通过它。现在学习的是第22页,共121页 (4)结构中无死循环。实践证明,由以上三种基本结构顺序组
12、成的算法结构,可以解决任何复杂的问题。由基本结构所构成的算法属于“结构化”的算法,它不存在无规律的转向,只在本结构内才允许存在分支、向前或向后的跳转。基本结构不一定只限于上面三种,只要具有上述四个特点的都可以作为基本结构。人们可以自己定义基本结构,并由这些基本结构组成结构化程序。现在学习的是第23页,共121页5.2 顺序程序设计顺序程序设计 在顺序程序结构中,完全按顺序逐条执行指令序列,这种情况在程序中大量存在,但仅由顺序结构构成的作为完整的程序则很少见。顺序结构的程序是最简单的程序。现在学习的是第24页,共121页 【例5-1】将两个字节数据相加,并存放到一个结果单元中。DATASEGME
13、NT AD1DB4CH;定义第1个加数 AD2DB25H;定义第2个加数 SUMDB?;定义结果单元 DATAENDS CODESEGMENT现在学习的是第25页,共121页ASSUME CS:CODE,DS:DATASTART: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 ENDSTART现在学习的是第26页,共121页 【例5-2】将一个字节压缩BCD码转换为两个ASCII码。分析:一个字节的压缩BCD码就是用一
14、个字节的二进制数表示两位十进制数,如十进制数96表示成压缩BCD码就是96H,转换成ASCII码就是把压缩BCD码表示的十进制数的高位和低位分开,并以ASCII码表示,即转换成39H和36H。现在学习的是第27页,共121页DATASEGMENTBCDBUFDB96H;定义1个字节的压缩BCD码ASCBUF DB2DUP(?);定义2个字节的结果单元DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA现在学习的是第28页,共121页START:MOVAX,DATA MOVDS,AX MOV AL,BCDBUF ;取出BCD码 MOVBL,AL;送BL暂存 M
15、OVCL,4 SHRAL,CL ;高4位变成低4位,高4位补0(96H09H)ADDAL,30H ;变成ASCII码(39H)现在学习的是第29页,共121页MOVASCBUF,AL;存储第1个ASCII码ANDBL,0FH;屏蔽掉高4位,只保留低4位(96H06H)ADDBL,30H;变成BCD码(36H)MOVASCBUF+1,BL;存储第2个码MOVAH,4CHINT21HCODE ENDSENDSTART现在学习的是第30页,共121页 【例5-3】利用直接查表法完成将键盘输入的一位10进制数(09)转换成对应的平方值并存放在SQRBUF单元中。分析:09的平方值分别为0、1、4、9、
16、16、25、36、49、64、81。把平方值放在一起形成一个平方值表,根据输入的值和对应平方值所在单元地址之间的关系(表首地址加上输入的值),查出相应的平方值。现在学习的是第31页,共121页DATASEGMENTSQUTABDB0,1,4,9,16,25,36,49,64,81SQUBUFDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA现在学习的是第32页,共121页MOV DS,AXMOV BX,OFFSETSQUTAB ;平方表首地址MOV AH,1INT21H ;由键盘输入个数,得到其ASCII码SUBAL,30H;
17、由ASCII码得到相应的数XLAT;查表MOV SQUBUF,AL ;存储结果现在学习的是第33页,共121页MOVAH,4CHINT21HCODE ENDS END START现在学习的是第34页,共121页5.3 分支程序设计分支程序设计 5.3.1 分支程序的结构形式 分支程序结构可以有两种形式,如图5.6所示。不论哪一种形式,它们的共同特点是:运行方向是向前的,在某一种特定条件下,只能执行多个分支中的一个分支。现在学习的是第35页,共121页图5.6 分支程序的结构形式现在学习的是第36页,共121页 5.3.2 分支程序设计方法 程序的分支一般用条件转移指令来产生,利用条件转移指令不
18、影响条件码的特性,可以连续使用条件转移指令使程序产生多个不同的分支如下例。【例5-5】在附加段中,有一个按从小到大顺序排列的无符号数数组,其首地址存放在DI寄存器中,数组中的第一个单元存放着数组长度,在AX中有一个无符号数,要求在数组中查找(AX)。如找到,则使CF=0,并在SI中给出该元素在数组中的偏移地址;如未找到,则使CF=1。现在学习的是第37页,共121页 上述章节遇到的过多个表格查找的例子,大都使用顺序查找的方法。本例是一个已经排序的数组,可以采用折半查找法以提高查找效率。折半查找法先取有序数组的中间元素与查找值相比较。如相等则查找成功;如查找值大于中间元素,则再取高半部的中间元素
19、与查找值相比较。如查找值小于中间元素,则再取低半部的中间元素与查找值相比较。如此重复直到查找成功或最终未找到该数为止。现在学习的是第38页,共121页 折半查找法的效率高于顺序查找法,对于长度为N的表格,顺序查找法平均要作N2次比较,而折半查找法的平均比较次数为lb N。所以,如果数组长度为100,则顺序查找法平均要作50次比较,而折半查找法平均作7次比较就可以了。在一个长度为N的有序数组R中,查找元素K的折半查找算法可描述如下:现在学习的是第39页,共121页 (1)初始化被查找数组的首尾下标,LOWL,HIGHN。(2)若LOWHIGH,则查找失败,置CF1,退出程序。否则,计算中点:MI
20、D(LOW+HIGH)2。(3)K与中点元素RMID比较。若K=RMID则查找成功,程序结束;若KRMID,则转步骤(5)。(4)低半部分查找(Lower),HIGHMID-1,返回步骤(2),继续查找。现在学习的是第40页,共121页 (5)高半部分查找(Higher),LOWMID+1,返回步骤(2),继续查找。图5.7表示了折半查找算法的程序框图。给出的程序首先把查找值与数组的第一个元素和最后一个元素相比较,如果找到该数小于第一个元素或大于最后一个元素则结束查找,否则从SEARCH开始折半查找。SEARCH以前的工作在图5.7中未表示出来。折半查找算法的程序实现如程序清单所示。现在学习的
21、是第41页,共121页图5.7 折半查找算法的程序框图现在学习的是第42页,共121页例5-5折半查找算法程序。DSEGSEGMENTLOW_IDW?HIGH_IDW?DSEGENDSCSEGSEGMENTASSUME CS:CSEG,DS:DSEG,ES:DSEG现在学习的是第43页,共121页B_SRCHPROC NEARPUSH DS PUSH AXMOVAX,DSEGMOVDS,AXMOVES,AXPOPAXCMPAX,ES:DI+2JACHK_LAST现在学习的是第44页,共121页 LEASI,ES:DI+2 JEEXIT STC JMPEXIT CHK_LAST:MOVSI,ES
22、:DI SHLSI,1 ADDSI,DI CMPAX,ES:SI JBSEARCH JEEXIT现在学习的是第45页,共121页 STC JMPEXITSEARCH:MOVLOW_I,1 MOVBX,ES:DI MOVHIGH_I,BX MOVBX,DI MID:MOVCX,LOW_I MOVDX,HIGH_I CMPCX,DX JANO_MATCH现在学习的是第46页,共121页 ADDCX,DX SHRCX,1 MOV SI,CX SHLSI,1COMPARE:CMPAX,ES:BX+SI JEEXIT JAHIGHER DECCX MOVHIGH_I,CX JMPMID现在学习的是第47
23、页,共121页HIGHER:INCCX MOV LOW_I,CX JMPMIDNO_MATCH:STCEXIT:POPDS RET B_SRCH ENDPCSEG ENDS ENDB SRCH现在学习的是第48页,共121页 若数组元素如下:LIST DW 12,11,22,33,44,55,66,77,88,99,111,222,333 如果要查找的数为(AX)=55。数组长度为12,第一次比较的是数组的第六个元素。因5533,所以第三次用高半部折半查找,比较的是第四个元素44。因5544,所以第四次用高半部折半查找,比较的是第五个元素55。这样经过四次比较后,因查找成功而退出程序。现在学习
24、的是第49页,共121页 如果要查找的数为(AX)=57,则第一次比较的仍是第六个元素66。因5733,所以第三次用高半部折半查找,比较的是第四个元素44。因5744,所以第四次用高半部折半查找,比较的是第五个元素55,因 5755,再 用 高 半 部 折 半 查 找 时,因LOWHIGH而以查找失败退出程序。现在学习的是第50页,共121页 可以看出,在这个例子中,同样用CMP指令以及条件转移指令产生两个或多个程序分支。当然,由于多数运算型指令置条件码,所以在条件转移指令之前并不一定要使用CMP或TEST指令,只要保证使用条件转移指令时的条件码符合要求就可以了。以上多个例子都是既有分支结构又
25、包括循环结构,实际上,多数程序都是各种程序结构的组合。而且,循环结构可以看作分支结构的一种特例,它只是多次走一个分支,只在满足循环结束条件时,走另一个分支罢了。现在学习的是第51页,共121页 5.3.3 跳跃表法 分支程序的两种结构形式都可以用上面所述的方法来实现。此外,在实现CASE结构时,还可以使用跳跃表法,使程序能根据不同的条件转移到多个程序分支中去。下面举例说明。【例5-6】试根据AL寄存器中哪一位为1(从低位到高位)就把程序转移到8个不同的程序分支中去。现在学习的是第52页,共121页 下面列出了用变址寻址方式实现跳跃表法的程序,还可以使用寄存器间接和基址变址寻址方式来达到同一目的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 章程 控制 结构 及其 程序设计 优秀 PPT
限制150内