《第四章程序流程控制语句及程序设计.ppt》由会员分享,可在线阅读,更多相关《第四章程序流程控制语句及程序设计.ppt(80页珍藏版)》请在优知文库上搜索。
1、第4章 程序设计方法1第4章 程序设计的基本方法4.1 程序设计方法概述程序设计方法概述4.2 顺序程序设计顺序程序设计4.3 分支程序设计分支程序设计 4.4 循环程序设计循环程序设计4.5 子程序设计子程序设计4.6 程序设计中的注意事项程序设计中的注意事项开始开始第4章 程序设计方法24.1 概述概述4.1.1 汇编语言程序设计的一般步骤汇编语言程序设计的一般步骤4.1.2 流程图流程图返回本章首页返回本章首页第4章 程序设计方法34.1.1 汇编语言程序设计的一般步骤汇编语言程序设计的一般步骤汇编语言程序设计一般有以下几个汇编语言程序设计一般有以下几个步骤步骤:1、分析问题,确定算法分
2、析问题,确定算法2、根据具体问题,确定输入输出数据的格式、根据具体问题,确定输入输出数据的格式3、分配存储区并给变量命名(包括寄存器)、分配存储区并给变量命名(包括寄存器)4、绘制流程图、绘制流程图5、根据流程图编制程序根据流程图编制程序6、调试程序、调试程序返回本节返回本节第4章 程序设计方法44.1.2 流程图流程图1流程图的概念流程图的概念流程图流程图是由特定的几何图形、指向线、文字说明是由特定的几何图形、指向线、文字说明来表示数据处理的步骤,形象描述逻辑控制结构来表示数据处理的步骤,形象描述逻辑控制结构以及数据流程的示意图。流程图具有简洁、明了、以及数据流程的示意图。流程图具有简洁、明
3、了、直观的特点。直观的特点。2流程图符号表示流程图符号表示(1)起止框:表示程序)起止框:表示程序的开始和结束。的开始和结束。起止框起止框第4章 程序设计方法5(2)判断框)判断框 (3)处理框)处理框 (4)调用框)调用框 (5)指向线)指向线 (6)连接框)连接框 返回本节返回本节第4章 程序设计方法64.2 顺序程序设计顺序程序设计顺序程序流程图顺序程序流程图组成:只有一个起始框、一个终止框和一至组成:只有一个起始框、一个终止框和一至几个处理说明框。几个处理说明框。【例【例4.1】从键盘上输入从键盘上输入0至至9中任一自然数中任一自然数x,求其立方值。,求其立方值。解题方法:解题方法:采
4、用构造一立方表,运行时查表实现。采用构造一立方表,运行时查表实现。输入输出输入输出数据格式:数据格式: 输入:输入:0-9任一自然数,字节单元存储任一自然数,字节单元存储 输出:输入数的立方数,字单元存储输出:输入数的立方数,字单元存储分配分配存储区:存储区: 字节变量字节变量X:存放键入自然数:存放键入自然数x 字变量字变量XXX:存放:存放x的立方值的立方值 变量变量TAB:假定立方表的首地址:假定立方表的首地址 (TAB+2*x)=x的立方值的立方值0的立方的立方1的立方的立方 9的立方的立方TAB第4章 程序设计方法7流程图:流程图:开始开始输入数字输入数字x将将x真值放入真值放入X查
5、表得查表得x立方放入立方放入XXX结束结束第4章 程序设计方法8STACK SEGMENT STACK DB 200 DUP(0)STACK ENDSDATA SEGMENT INPUT DB PLEASE INPUT X(09):$ TAB DW 0,1,8,27,64,125,216,343,512,729 X DB ? XXX DW ? DATA ENDS编程编程第4章 程序设计方法9CODESEGMENTASSUME DS:DATA,CS:CODE,SS:STACKBEGIN: MOV AX,DATA MOV DS,AX MOV DX,OFFSET INPUT MOV AH,9 INT
6、 21H MOV AH,1 INT 21H AND AL,0FH MOV X,AL显示输入提示符显示输入提示符接受键盘输入数字接受键盘输入数字x放入放入AL求求x的真值放入的真值放入X第4章 程序设计方法10 ADD AL,AL MOV BL,AL MOV BH,0 MOV AX,TABBX MOV XXX,AX MOV AH,4CH INT 21H CODE ENDS END BEGIN2*xBX查表查表TAB+BX放入放入XXX返回本章首页返回本章首页第4章 程序设计方法114.3 分支程序设计分支程序设计4.3.1 控制转移类指令控制转移类指令4.3.2 分支程序设计分支程序设计返回本章
7、首页返回本章首页第4章 程序设计方法124.3.1 控制转移类指令控制转移类指令1 1、条件转移指令、条件转移指令2 2、无条件转移指令、无条件转移指令返回本章首页返回本章首页无条件转移指令和条件转移指令区别无条件转移指令和条件转移指令区别:1、前者转移是无条件的,而后者有;、前者转移是无条件的,而后者有;2、前者转移范围不受限制,而后者只能在、前者转移范围不受限制,而后者只能在-128127个个字节范围内转移。字节范围内转移。第4章 程序设计方法13 简单条件转移指令简单条件转移指令 无符号数条件转移指令无符号数条件转移指令 有符号数条件转移指令有符号数条件转移指令 语句格式:语句格式: 标
8、号:标号: 操作符操作符 短标号短标号短标号短标号:即当前(:即当前(IPIP)到某标号(即转移的目的地址)到某标号(即转移的目的地址)的位移量在的位移量在-128-128127间。间。功能:功能:如果条件满足,则(如果条件满足,则(IPIP)位移量)位移量IPIP。 1 1、条件转移指令、条件转移指令返回本节返回本节第4章 程序设计方法14 共有共有10条指令,根据五个标志位条指令,根据五个标志位ZF、SF、OF、PF和和CF的两种状态(的两种状态(0或或1)分别进行转移。)分别进行转移。(1)JE/JZ;ZF=1则转移,测试前次操作结果是否等于则转移,测试前次操作结果是否等于0 JNE/J
9、NZ;ZF=0则转移,测试前次操作结果是否不等于则转移,测试前次操作结果是否不等于0(2)JS ;SF=1则转移,测试前次操作结果是否为负数则转移,测试前次操作结果是否为负数 JNS ;SF=0则转移,测试前次操作结果是否为正数则转移,测试前次操作结果是否为正数(3)JO ;OF=1则转移,测试前次操作结果是否有溢出则转移,测试前次操作结果是否有溢出 JNO ;OF=0则转移,测试前次操作结果是否没有溢出则转移,测试前次操作结果是否没有溢出(4)JC ;CF=1则转移则转移,测试前次操作结果是否有进(借)位测试前次操作结果是否有进(借)位 JNC ;CF=0则转移则转移,测试前次操作结果是否无
10、进(借)位测试前次操作结果是否无进(借)位简单条件转移指令简单条件转移指令第4章 程序设计方法15(5)JP ;PF=1则转移则转移,测试前次操作结果中测试前次操作结果中1的个数是否为偶数的个数是否为偶数 JNP ;PF=0则转移则转移,测试前次操作结果中测试前次操作结果中1的个数是否为奇数的个数是否为奇数例:例:下面程序段测试下面程序段测试AX的低四位是否全的低四位是否全0,如果均是如果均是0,那么使那么使CX=0,否则使否则使CX=-1。 MOV CX,-1 TEST AX,000FH JNZ NEXT MOV CX,0 NEXT: 第4章 程序设计方法16无符号数条件转移指令无符号数条件
11、转移指令 无符号数条件转移指令无符号数条件转移指令往往跟在比较指令之后,根据运往往跟在比较指令之后,根据运算结果设置的条件标志状态确定转移方向。这类指令视比较算结果设置的条件标志状态确定转移方向。这类指令视比较对象为无符号数。对象为无符号数。(1)JA /JNBE ;高于;高于/不低于且不等于转移。不低于且不等于转移。 转移条件转移条件:当:当CF=0且且ZF=0时转移。时转移。(2)JAE /JNB ;高于或等于;高于或等于/不低于转移。不低于转移。 转移条件转移条件:当:当CF=0或或ZF=1时转移。时转移。(3)JB /JNAE ;低于;低于/不高于且不等于转移。不高于且不等于转移。 转
12、移条件转移条件:当:当CF=1且且ZF=0时转移。时转移。(4)JBE /JNA ;低于或等于;低于或等于/不高于转移。不高于转移。 转移条件转移条件:当:当CF=1或或ZF=1时转移。时转移。第4章 程序设计方法17【例【例4.54.5】比较比较AXAX、BXBX中无符号数大小,将较大的数存放中无符号数大小,将较大的数存放AXAX寄存器。寄存器。 CMPCMPAXAX, BX BX ;(;(AXAX)()(BXBX) JAEJAENEXTNEXT ;若;若AX=BXAX=BX,转移,转移到到NEXTNEXT XCHG XCHGAXAX,BX BX ;若;若AXBXAX=BXAX=BX,转移到
13、,转移到NEXTNEXT XCHG XCHGAXAX,BXBX;若;若AXBXAXBX,交换,交换 NEXTNEXT:第4章 程序设计方法202、无条件转移指令、无条件转移指令用途用途:在分支语句中常用于将各分支出口重新汇集到一起。在分支语句中常用于将各分支出口重新汇集到一起。段内转移段内转移:指在同一代码段的范围内进行转移,只需要改指在同一代码段的范围内进行转移,只需要改变变IP寄存器的内容。寄存器的内容。(1)段内直接转移)段内直接转移格式格式: JMP 标号名标号名 ;该标号的属性为近标号该标号的属性为近标号例如例如:JMP NEXT;(2)段内间接转移)段内间接转移格式格式:JMP O
14、PD ;将将OPD的内容送的内容送IP寄存器寄存器例如例如: JMP WORD PTR 1234H;将字存储单元将字存储单元1234H中中的内容送的内容送IP寄存器寄存器第4章 程序设计方法21段间转移段间转移:指要转移到另一个代码段去执行程序,此时不指要转移到另一个代码段去执行程序,此时不仅需要改变仅需要改变IP寄存器中的内容,还要修改寄存器中的内容,还要修改CS段寄存器的内段寄存器的内容才能达到转移的目的,因此段间转移需要修改两个寄存器容才能达到转移的目的,因此段间转移需要修改两个寄存器中的内容。中的内容。(1)段间直接转移)段间直接转移格式格式:JMP 标号名标号名 ;该标号的属性为远标
15、号该标号的属性为远标号(2)段间间接转移)段间间接转移格式格式: JMP OPD;(OPD) IP,(OPD+2) CS例如例如:JMP DWORD PTR 1234H;将双字存储单元的低将双字存储单元的低字内容送字内容送IP寄存器,双字存储单元的高字内容送寄存器,双字存储单元的高字内容送CS寄存器寄存器 返回本节返回本节第4章 程序设计方法224.3.2 分支程序设计分支程序设计【例【例4.7】编写计算下面函数值的程序:编写计算下面函数值的程序: 1X0Y= 0X=0 -1X0设输入数据为设输入数据为X、输出数据、输出数据Y,且皆为字节变量。程序,且皆为字节变量。程序流程图如图流程图如图4.
16、2所示。所示。程序如下:程序如下:第4章 程序设计方法23图图4.2 分支运算分支运算程序流程图程序流程图第4章 程序设计方法24DATASEGMENTX DB -10Y DB ?DATAENDSSTACK SEGMENT STACK DB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATA第4章 程序设计方法25 MOVDS,AX CMPX,0;与;与0进行比较进行比较 JGEA1;X0转转A1 MOVY,-1;X 0时,时,-1Y JMPEXITA1: JGA2;X0转转A2 MOVY,0;X=0时,时,0Y JMPEXITA2: MOVY,1;X0,1Y EXIT: MOVAH,4CH INT21H CODE ENDS ENDSTART第4章 程序设计方法26【例【例4.8】试编一程序,求三个带符号字数据】试编一程序,求三个带符号字数据中的最大值,并将最大值存入中的最大值,并将最大值存入MAX字单元字单元中。设三个带符号数分别在三个字变量中。设三个带符号数分别在三个字变量X