分支结构程序设计
所谓分支结构就是根据条件判断的结果分别执行不同的程序段。如果分支具有N种可能,则称其为N分支。一般N=2时称为简单分支,N>=3时称为多分支程序。
4.2.1简单分支程序设计
通常简单分支程序可用一条条件转移指令来实现,这是分支程序设计的最基本方法
例4.6:
设有单字节无符号数X、Y、Z,若X Y>255,则求X Z,否则求X-Z,运算结果放在F1中。
分析:因为X,Y均为无符号数,所以当X Y>255时则会产生进位即CF=1,所以可以用进位标志来判断。
程序段如下:
;…………数据段…………
DATA SEGMENT
X DB 128
Y DB 90
Z DB 50
F1 DB ?
DATA ENDS
;…………代码段…………
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
;
MOV AL,X
ADD AL,Y
JC P1
;
MOV AL,X
SUB AL,Z
JMP EXIT
;
P1:MOV AL,X
ADD AL,Z
;
EXIT:MOV F1,AL
;
HLT
CODE ENDS
END START
4.2.2多分支程序设计
1.简单分支组合法
用若干个简单分支的组合来实现多分支的方法称为简单分支组合法。
例4.7:
╭ - 1 当X<0
试计算符号函数的值Y=| 0 当X=0
╰ 1 当X>0
程序如下:
;…………数据段…………
DATA SEGMENT
X DB 6
Y DB ?
DATA ENDS
;…………代码段…………
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
;
MOV AL,X
CMP AL,0
;注意下面的分支
JG G1
JZ Z1
;
MOV AL,-1
JMP EXIT
;
G1:MOV AL,1
JMP EXIT
;
Z1:MOV AL,0
;
EXIT:MOV Y,AL
HLT
CODE ENDS
END START
2.跳转表法
跳转表是由一系列的转移地址(即各分支处理子程序的首地址)、跳转指令或关键字等构成,它们依次存放在内存的一个连续存区中。
例4.8:
查看变量M1中的值,如果是0则执行模块0(用标号L0表示的内容,下同),如果是1则执行模块1,依次类推,其中M1的值在0~7之间。
程序如下:
;…………数据段…………
DATA SEGMENT
MI DB 4
L DB L0,L1,L2,L3,L4,L5,L6,L7
DATA ENDS
;…………代码段…………
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
;
MOV BX,OFFSET L
MOV AL,M1
AND AL,07H
MOV AH,00H
ADD AX,AX
ADD BX,AX
JMP WORD PTR [BX] ;段内间接转移
;
…
;
L0:…
…
L1:…
…
…
L7:…
…
…
CODE ENDS
END START
数据段中变量L的值是L0、L1…L7,实际上就是程序段中的标号L0、L1…L7,也就是说,L其实是一个转移地址表。显然这里用的是段内间接转移,如果是段间转移,则应该将段地址与偏移地址一同存入地址表中:
L DD L0,L1,L2,L3,L4,L5,L6,L7