分支转移程序设计
扫描二维码
随时随地手机看文章
分支转移程序的特点是程序中含有转移指令,转移指令又分为无条件转移和有条件转移,因此分支程序也可分为无条件分支转移程序和有条件分支转移程序。无条件分支转移程序很简单,这里不再讨论。有条件分支转移程序按结构类型来分,又分为单分支选择结构和多分支选择结构。
1.单分支选择结构
程序的判别仅有两个出口,两者选一,称为单分支选择结构,它在程序设计中的应用极为普遍。单分支转移程序设计一般根据运算结果的状态标志,用条件判跳指令来选择并转移。
求单字节有符号数的二进制补码。
正数补码是其本身,负数补码是其反码加1。因此,程序应首先判断被转换数的符号,负数进行转换,正数本身即为补码。
设二进制数放在累加器A中,其补码放回到A中,程序框图如图4-3所示。参考程序如下:
此外,单分支选择结构还有如图4-4、图4-5等所示的几种形式。
2.多分支选择结构
当程序的判别部分有两个以上的出口流向时,为多分支选择结构。它常有两种形式,如图4-6和图4-7所示。
指令系统提供了非常有用的两种多分支选择指令:
它们为分支转移结构程序的编写提供了方便。
间接转移指令“JMP @A+DPTR”由数据指针DPTR决定多分支转移程序的首地址,由累加器A的内容动态地选择对应的分支程序。
4条比较转移指令CJNE能对两个欲比较的单元内容进行比较。当不相等时,程序实现相对转移,并能指出其大小,以备进行第二次判断;若两者相等,则程序按顺序往下执行。
最简单的分支转移程序的设计一般常采用逐次比较法,就是把所有不同的情况一个一个地进行比较,发现符合就转向对应的处理程序。这种方法的缺点是程序太长,有n种可能的情况,就需有n个判断和转移。
求符号函数的值。符号函数定义如下:
X存放在40H单元,y存放在41H单元,程序框图如图4-6所示。
程序如下:
在实际应用中,经常遇到图4-7所示结构形式的分支转移程序设计,即在不少应用场合,需根据某一单元的内容是0,1,…,n分别转向处理程序0,处理程序1,…,处理程序n。一个典型的例子就是当单片机系统中的键盘按下时,会得到一个键值,根据不同的键值,跳向不同的键处理程序入口。此时,可用直接转移指令(LJMP或AJMP指令)组成一个转移表,然后把该单元的内容读入累加器A,转移表首地址放人DPTR中,再利用间接转移指令实现分支转移。
根据寄存器R2的内容,转向各个处理程序PRGX(X=O~72)。
程序如下:
R2中的分支转移参量乘3是由于长跳转指令LJMP要占3个单元。本例程序可位于64 KB程序存储器空间的任何区域。