【例4.3】编写计算下面函数值的程序:

设输入数据为X、输出数据Y,且皆为字节变量。程序流程图如图4.2所示。
程序如下:
DATA SEGMENT
X DB -10
Y DB ?
DATA ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START: MOV AX,DATA
MOV DS,AX
CMP X,0 ;与0进行比较
JGE A1 ;X≥0转A1
MOV Y,-1 ;X <0时,-1→Y
JMP EXIT
A1: JG A2 ;X>0转A2
MOV Y,0 ;X=0时,0→Y
JMP EXIT
A2: MOV Y,1 ;X>0,1→Y
EXIT: MOV AH,4CH
INT 21H
CODE ENDS
END START

【例4.4】试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。
设三个带符号数分别在三个字变量X、Y、Z中存储。程序流程图如图4.3所示

程序如下:
STAC SEGMENT STACK
DB 200 DUP(0)
STACK ENDS
DATA SEGMENT
X DW 00ABH
Y DW –5
Z DW 200
MAX DW ?
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START: MOV AX,DATA
MOV DS,AX
MOV AX,X
CMP AX,Y ;X>Y?
JG L1
MOV AX,Y ;Y>Z?
CMP AX,Z
JG EXIT
L2: MOV AX,Z
JMP EXIT
L1: CMP AX,Z ;X>Z?
JLE L2
EXIT: MOV MAX,AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
3.2 用跳转表实现多路分支
【例4.5】设某程序有8路分支,试根据给定的N值(1~8),将程序的执行转移到其中的一路分支。
程序流程如图4.4所示。

程序如下:
DATA SEGMENT
TAB DW P1,P2,P3,P4,P5,P6,P7,P8
N DB 5
DATA ENDS
STACK SEGMENT
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START: MOV AX,DATA
MOV DS,AX
┆
MOV AL,N
DEL AL
ADD AL,AL
MOV BM,AL
MOV BH,0
JMP TAB[BX]
P1: ……
┆
JMP EXIT
P2: ……
┆
JMP EXIT
P2: ……
┆
JMP EXIT
P3: ……
┆
JMP EXIT
┆
P8: ……
┆
EXIT: MOV AH,4CH
INT 21H
CODE ENDS
END START
上述程序中的无条件转移指令的转移地址采用的是变址寻址。同理,转移地址也可以用寄存器间接寻址或基址加变址寻址,读者可自行考虑。


