程序设计的基本方法.ppt
《程序设计的基本方法.ppt》由会员分享,可在线阅读,更多相关《程序设计的基本方法.ppt(51页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章 程序设计的基本方法 顺序、分支、循环程序和子程序的设计是汇编语言程序设计的基本内容。在此基础上还要掌握汇编语言程序设计的基本方法和技巧,包括递归子程序设计、多模块程序设计方法等。4.1 概述程序设计通常从两个方面入手,一是要认真分析问题的要求,选择好的解决方法;二是要针对选定的算法,编写高质量的程序。高质量的程序在满足设计要求、实现预定功能的基础上,还应尽可能实现以下几点:1)结构清晰、简明、易读、易调试;2)执行速度快;3)占用存储空间少。多读、多写、多上机调试各种程序!多读、多写、多上机调试各种程序!多读、多写、多上机调试各种程序!多读、多写、多上机调试各种程序!一、汇编语言程序设
2、计的一般步骤:分析问题,合适的解题方法;根据具体问题,确定输入输出数据的格式;分配存储区并给变量命名(包括分配寄存器);绘制程序流程图;根据流程图编写程序;静态检查、上机调试。二、程序流程图常用符号4.2 顺序程序设计顺序程序设计 例1 从键盘输入0至9中任一自然数x,求其立方值。分析:可以用乘法运算,也可以用查表实现。输入数据:1位自然数,用一字节单元存放;输出数据最大为729,用一个字单元存放。存储单元分配:字节变量X存放输入的自然数;字变量XXX存放X的立方值;立方表首址为TAB,表中共10项,每项占一个字。X与其立方值的对应关系:(TAB+2*X)=X的立方值绘制流程图。编写程序。4.
3、3 分支程序设计分支程序设计 在分支程序中,不同的条件往往是通过标志寄存器中条件标志的不同状态反映的。而程序的分支通过转移指令来实现,因此分支程序设计中一个重要问题是根据各标志的不同状态选用合适的转移指令。4.3.1 转移指令 转移指令共计19条,分为两类无条件转移指、条件转移指令(不影响任何标志位)一、一、一、一、条件转移指令条件转移指令条件转移指令条件转移指令 (1818条)条)条)条)基本格式为:J 标号(代表一种转移条件)条件转移指令根据检测标志位的状态来判断条件,若条件为真,则转至标号处执行程序,否则顺序往下执行程序。操作:(IP)(IP)+D(8位偏移量,-128127)条件转移指
4、令 分三类:(1)简单条件转移指令(10条,见P92 表4.1)根据单个标志的状态决定是否转移(2)无符号数条件转移指令(4条)用于检测无符号数的比较(3)有符号数条件转移指令(4条)用于检测带符号数的比较 4.3.1 4.3.1 转移指令转移指令转移指令转移指令 一、一、一、一、条件转移指令条件转移指令条件转移指令条件转移指令 (1818条)条)条)条)1.简单条件转移指令 在在在在IBM PCIBM PCIBM PCIBM PC中,标志中,标志中,标志中,标志CFCFCFCF、ZFZFZFZF、SFSFSFSF、OFOFOFOF、PFPFPFPF分别为分别为分别为分别为0 0 0 0或或或
5、或1 1 1 1,可以表示,可以表示,可以表示,可以表示10101010种状态,因而设置了种状态,因而设置了种状态,因而设置了种状态,因而设置了10101010条简单条件转换指条简单条件转换指条简单条件转换指条简单条件转换指令。令。令。令。JE/JZJNE/JNZJSJNSJOJNOJCJNCJP/JPEJNP/JPO 先执行影响标志位的指令(如算术运算、比较及位测试等指令),再执行适当的条件转移指令检测相应的标志位,根据条件实现转移。例:下列程序中X、Y均为字变量,X中存放着有符号数x.MOV Y,-1MOV AX,XCMP AX,0JEEXIT1ADD AX,1000HJOOVERFLOW
6、JNSEXIT1NEG AXEXIT1MOV Y,AXMOV AH,4CHINT21HOVERFLOW:MOV AH,4CHINT21H一、一、一、一、条件转移指令条件转移指令条件转移指令条件转移指令 (1818条)条)条)条)一、一、一、一、条件转移指令条件转移指令条件转移指令条件转移指令 (1818条)条)条)条)2.无符号数条件转移指令 该类指令往往跟在比较指令之后,视比较对象为无该类指令往往跟在比较指令之后,视比较对象为无该类指令往往跟在比较指令之后,视比较对象为无该类指令往往跟在比较指令之后,视比较对象为无符号数,设置了高于、高于或等于、低于、低于或等于符号数,设置了高于、高于或等于
7、、低于、低于或等于符号数,设置了高于、高于或等于、低于、低于或等于符号数,设置了高于、高于或等于、低于、低于或等于4 4 4 4条指令。条指令。条指令。条指令。1 1 1 1)JA/JNBEJA/JNBEJA/JNBEJA/JNBE:当当当当CF=0CF=0CF=0CF=0且且且且ZF=0ZF=0ZF=0ZF=0时转移。时转移。时转移。时转移。2 2 2 2)JAE/JNBJAE/JNBJAE/JNBJAE/JNB:当当当当CF=0CF=0CF=0CF=0或或或或ZF=1ZF=1ZF=1ZF=1时转移。时转移。时转移。时转移。3 3 3 3)JB/JNAEJB/JNAEJB/JNAEJB/JN
8、AE:当当当当CF=1CF=1CF=1CF=1且且且且ZF=0ZF=0ZF=0ZF=0时转移。时转移。时转移。时转移。4 4 4 4)JBE/JNAJBE/JNAJBE/JNAJBE/JNA:当当当当CF=1CF=1CF=1CF=1或或或或ZF=1ZF=1ZF=1ZF=1时转移。时转移。时转移。时转移。一、一、一、一、条件转移指令条件转移指令条件转移指令条件转移指令 (1818条)条)条)条)3.有符号数条件转移指令 该类指令往往跟在比较指令之后,视比较对象为有该类指令往往跟在比较指令之后,视比较对象为有该类指令往往跟在比较指令之后,视比较对象为有该类指令往往跟在比较指令之后,视比较对象为有符
9、号数,设置了大于、大于或等于、小于、小于或等于符号数,设置了大于、大于或等于、小于、小于或等于符号数,设置了大于、大于或等于、小于、小于或等于符号数,设置了大于、大于或等于、小于、小于或等于4 4 4 4条指令。条指令。条指令。条指令。1 1 1 1)JG/JNLEJG/JNLEJG/JNLEJG/JNLE:当当当当SF=OFSF=OFSF=OFSF=OF且且且且ZF=0ZF=0ZF=0ZF=0时转移。时转移。时转移。时转移。2 2 2 2)JGE/JNLJGE/JNLJGE/JNLJGE/JNL:当当当当SF=OFSF=OFSF=OFSF=OF或或或或ZF=1ZF=1ZF=1ZF=1时转移。
10、时转移。时转移。时转移。3 3 3 3)JL/JNGEJL/JNGEJL/JNGEJL/JNGE:当当当当SFSFSFSF不等于不等于不等于不等于OFOFOFOF且且且且ZF=0ZF=0ZF=0ZF=0时转移。时转移。时转移。时转移。4 4 4 4)JLE/JNGJLE/JNGJLE/JNGJLE/JNG:当当当当SFSFSFSF不等于不等于不等于不等于OFOFOFOF或或或或ZF=1ZF=1ZF=1ZF=1时转移。时转移。时转移。时转移。一、一、一、一、条件转移指令条件转移指令条件转移指令条件转移指令 (1818条)条)条)条)例1:MOVAL,-40HCMPAL,50HJGL1;比较JAL
11、1例例例例2 2 2 2:分析下述代码的功能分析下述代码的功能分析下述代码的功能分析下述代码的功能MOVSI,0L:MOV WORD PRT SI,0ADDSI,2CMPSI,OF000HJBEL 无条件转移指令不构成分支程序,但在分支程序中经常使用它将各分支的出口汇集到一起,特别是当条件转移指令的转移范围超过-128127个字节时,往往要借助无条件转移指令实现。例:JLL1.L1二、无二、无二、无二、无条件转移指令条件转移指令条件转移指令条件转移指令JGEL0JMPL1L0:.L1:无条件转移指令分为段内直接转移、段内间接转移、段间直接转移、段间间接转移。例:直接转移:JMPNEXT间接转移
12、:JMPWORD PTR BXJMPDWORD PTR BX二、无二、无二、无二、无条件转移指令条件转移指令条件转移指令条件转移指令分析问题,合适的解题方法;根据具体问题,确定输入输出数据的格式;分配存储区并给变量命名(包括分配寄存器);绘制程序流程图;根据流程图编写程序;静态检查、上机调试。4.3.2 4.3.2 分支程序设计举例分支程序设计举例分支程序设计举例分支程序设计举例 4.3.2 4.3.2 分支程序设计举例分支程序设计举例分支程序设计举例分支程序设计举例 例例1 编写计算下面函数值的程序(编写计算下面函数值的程序(x,y的值均在的值均在-128127之间)之间)输入数据为输入数据
13、为x,y,输出数据为,输出数据为a 4.3.2 4.3.2 分支程序设计举例分支程序设计举例分支程序设计举例分支程序设计举例 例例2 从键盘输入从键盘输入09中任一自然数中任一自然数x,求其立方值。若输入的字,求其立方值。若输入的字符不是符不是09中的某数字,显示中的某数字,显示“INPUT ERROR!”,表明输,表明输入错误。入错误。4.3.2 4.3.2 分支程序设计举例分支程序设计举例分支程序设计举例分支程序设计举例 选择合适的分支指令;选择合适的分支指令;要为每个分支安排出口;要为每个分支安排出口;应把各分支中的公共部分尽量提到分支前或分支后的公应把各分支中的公共部分尽量提到分支前或
14、分支后的公共程序段中,使程序简短、清晰;共程序段中,使程序简短、清晰;在分支比较多时,流程图中对每个分支判断的先后次序在分支比较多时,流程图中对每个分支判断的先后次序应尽量与问题提出的先后次序一致。程序也要与流程图应尽量与问题提出的先后次序一致。程序也要与流程图中各分支的先后次序一致;中各分支的先后次序一致;在调试分支程序时,要假定各种可能的输入数据,沿着在调试分支程序时,要假定各种可能的输入数据,沿着每一支路逐一检查,测试程序是否正确。每一支路逐一检查,测试程序是否正确。分支程序设计中的注意事项:分支程序设计中的注意事项:4.4 循环程序设计循环程序设计 在实际问题处理程序中,常常需要按照一
15、定规在实际问题处理程序中,常常需要按照一定规在实际问题处理程序中,常常需要按照一定规在实际问题处理程序中,常常需要按照一定规律,多次重复执行一串语句,这类程序叫做循环程律,多次重复执行一串语句,这类程序叫做循环程律,多次重复执行一串语句,这类程序叫做循环程律,多次重复执行一串语句,这类程序叫做循环程序序序序 。本节主要内容:本节主要内容:本节主要内容:本节主要内容:循环程序的结构和控制方法;循环程序的结构和控制方法;循环程序的结构和控制方法;循环程序的结构和控制方法;单重循环程序的设计;单重循环程序的设计;单重循环程序的设计;单重循环程序的设计;多重循环程序的设计。多重循环程序的设计。多重循环
16、程序的设计。多重循环程序的设计。4.4.1 循环程序的结构循环程序的结构 4.4.1 循环程序的结构循环程序的结构 例例例例1 1 已知有已知有已知有已知有n n个元素存放在以个元素存放在以个元素存放在以个元素存放在以BUFBUF为首址的字节存储区中,为首址的字节存储区中,为首址的字节存储区中,为首址的字节存储区中,试统计其中负元素的个数。试统计其中负元素的个数。试统计其中负元素的个数。试统计其中负元素的个数。存储单元及寄存器分配:存储单元及寄存器分配:存储单元及寄存器分配:存储单元及寄存器分配:BXBX:BUFBUF存储区地址指针;存储区地址指针;存储区地址指针;存储区地址指针;CXCX:循
17、环计数器(初值为元素个数:循环计数器(初值为元素个数:循环计数器(初值为元素个数:循环计数器(初值为元素个数n n)AXAX:记录负元素的个数;:记录负元素的个数;:记录负元素的个数;:记录负元素的个数;字变量字变量字变量字变量R R:存放负元素的个数。:存放负元素的个数。:存放负元素的个数。:存放负元素的个数。保证循环正常执行和结束的条件:正确地初始化循环控制计数和初始条件 正确地检测循环条件 必须保证能达到循环结束条件(例如在循环体内有修改循环控制值的指令)4.4.2 循环控制方法循环控制方法 一、一、一、一、计数控制计数控制计数控制计数控制当循环次数已知时,通常使用计数控制法,常用当循环
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基本 方法
限制150内