在实际程序设计中,始终是顺序执行的情况很少,大部分情况下总要遇到比较、判断,并根据比较、判断的结果作出不同的处理,因此产生相应的分支程序。
1.分支结构的二要素
分支结构程序是具有判断及转移功能的程序,根据判断的结果决定程序执行的流向。因此,判断和转移构成了分支程序的两个要素。
①判断。根据运算结果对状态标志的影响,进行判断。因此,要能形成判断,必须在此之前有影响状态标志的指令执行,即形成条件后,才能进行判断。
②转移。由条件转移指令来实现,有时也可用无条件转移指令。一条转移指令只能构成两个分支,要构成多个分支,必须在分支上形成新的条件并进行判断,实现分支上的再转移。
2.利用比较、转移指令实现分支
这是一种最常用的方法。常用的比较判断指令有:CMP、CMPS、SCAS等。转移指令主要是条件转移指令。
例4-13 求两个无符号数差的绝对值,结果存放在D1单元中。
解题思路:首先对两个无符号数进行大小比较,用大数减去小数即得到两数差的绝对值。算法的具体描述参见图4-4给出的程序流程框图。
根据流程图,设计程序如下:
图4-4 例4-13的程序流程框图
(www.xing528.com)
例4-14 设在A、B、C字型变量中存放着3个数,若3个数均不为0,则求出它们的和(不考虑溢出)存入D单元。
解题思路:首先以寄存器BH为计数器统计A、B、C中0的个数,若BH为0(说明A、B、C三数均不为0),则求A、B、C之和;否则,程序结束。
例4-14 中,多处用到CMP语句实现对转移条件的判断。
3.利用跳转表实现分支
在一个存储区中,连续存放一系列跳转地址、跳转指令或关键字,组成一个决定程序分支的跳转表。利用跳转表可以实现多个分支。
例4-15 某工厂有n种产品的加工程序R0、R1、R2、…、Rn,分别存放在PR0、PR1、PR2、…、PRn(n<256)为首地址的内存区域中,而这n个首地址的偏移量连续存放在以BASE为地址的跳转表中。已知产品编号存放在NUM单元中,要求编写根据产品编号转至相应的处理程序的程序。
解题思路:根据要加工的产品编号i(i=0,1,2,…,n),通过查跳转表,获得对应加工程序存放的首地址PRi,转至该地址执行相应的处理程序即可。
跳转表如图4-5所示,PRi表示表中存放单元的偏移量:2*i,表地址=表首地址+偏移量。设计的程序如下:
图4-5 跳转表
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。