2.6.3 分支程序设计
程序的分支通过转移指令来实现,因此转移指令的特点是改变程序执行顺序,本节先介绍转移指令。
1.转移指令
转移指令分无条件转移和条件转移两类。
(1)无条件转移指令
· 直接转移
指令格式:JMP 标号
无条件转移指令JMP使程序无条件转移到标号指向的指令继续执行。无条件转移可分为段内转移和段间转移,两种情况都有直接寻址和间接寻址两种方式。汇编程序汇编时,将根据由标号确定的位移量是否大于8位,自动产生相应的段内短转移或段内直接转移指令。
· 间接转移
指令格式:JMP WORD PTR OPR
对于段间间接转移方式,转移目的地址一般存放在数据段中,存放转移目的地址的单元地址OA由JMP指令的操作数(OPR)寻址方式确定,得到转移目的地址后,将转移目的地址的偏移地址部分送IP,段地址部分送CS,实现间接转移。
(2)条件转移指令
条件转移指令根据条件判断结果实现转移。条件转移指令有18条,基本格式为:
J×× 标号
其中标号是一个符号地址,××代表一种条件,条件转移指令通过检测PSW寄存器的条件码标志位状态确定是否转移,若条件码标志位的状态使条件为真,则转至标号处执行程序,否则顺序往下执行程序。
①一般条件转移指令
这类转移指令根据某一位标志位状态,检测条件是否为真,见表2-5。
表2-5 J××条件表
②用于无符号数的条件转移指令
先使用比较指令对两个无符号数A和B进行比较,比较指令执行的是减法运算A−B,系统将根据运算结果设置标志位,然后可用表2-6中的指令执行条件转移。
表2-6 无符号数条件转移
③ 用于带符号数的条件转移指令
先使用比较指令对两个带符号数进行比较,即进行A−B运算,由运算结果设置标志位,然后可用表2-7中的指令执行条件转移。
表2-7 符号数条件转移
条件转移前,一般应该先执行算术运算、比较操作、测试操作等影响标志位设置的指令,然后再根据需要执行适当的条件转移指令。如:
2.分支程序设计方法
分支程序设计方法可分为两类:
(1)用条件转移指令实现程序分支。
(2)联用跳转表和无条件转移指令实现程序分支。
第(1)类方法常用于通过条件检测实现两路分支,而第(2)类方法常用于实现多路分支。
第(1)类由条件检测实现程序分支。
下面举例说明使用条件转移指令实现程序分支的方法:
例2-41 求a、b、c三个符号数中的最大值,并存入max单元。
例2-42 将源数据区中的数据块传送到目的数据区中,如果源数据区与目的数据区位置没有重叠部分,则正向传送数据块(从起始地址开始按地址增量传送),否则反向传送数据块(从两个数据区的结束地址开始按地址减量传送)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。