文档介绍:第4章分支程序设计
编制汇编语言程序的步骤:
(1) 分析题意,确定算法
(2) 根据算法画出程序框图
(3) 根据框图编写程序
(4) 上机调试程序
分支结构子程序结构
汇编程序的一般结构:
复合结构:多种程序结构的组合
…
顺序结构循环结构
分支程序涉及到的条件转移指令:
注意:只能使用段内直接寻址的8 位位移量
(1) 根据单个条件标志的设置情况转移
格式测试条件
JZ(JE) OPR ZF = 1
JNZ(JNE) OPR ZF = 0
JS OPR SF = 1
JNS OPR SF = 0
JO OPR OF = 1
JNO OPR OF = 0
JP OPR PF = 1
JNP OPR PF = 0
JC OPR CF = 1
JNC OPR CF = 0
(2) 比较两个无符号数,并根据比较结果转移
格式测试条件
< JB (JNAE,JC) OPR CF = 1
≥ JNB (JAE,JNC) OPR CF = 0
≤ JBE (JNA) OPR CF∨ZF = 1
> JNBE (JA) OPR CF∨ZF = 0
* 适用于地址或双精度数低位字的比较
(3) 比较两个带符号数,并根据比较结果转移
格式测试条件
< JL (JNGE) OPR SFOF = 1
≥ JNL (JGE) OPR SFOF = 0
≤ JLE (JNG) OPR (SFOF)∨ZF = 1
> JNLE (JG) OPR (SFOF)∨ZF = 0
* 适用于带符号数的比较
分支程序涉及到的无条件转移指令:无条件转移指令JMP(jump)功能:无条件地使程序转移到指定的目标地址
类型
段内转移
直接方式
间接方式
段间转移
直接方式
间接方式
格式: JMP 目标标号
功能: IP ← IP + disp
格式: JMP 字地址指针
功能: IP ← EA
格式: JMP 目标标号
功能: IP ← OFFSET 目标标号
CS← SEG 目标标号
格式: JMP 双地址指针
功能: IP ←[EA]
CS←[EA+2]
双分支结构程序
条件
满足
不满足
程序段1
JMP
程序段2
例1:将AL的最高位显示出来
SHL AL,1
JC NT1
MOV DL,30H
JMP NT2
NT1: MOV DL,31H
NT2: MOV AH,02H
INT 21H
双分支结构程序的典型结构一
分支结构程序设计
JMP
Y
N
CF=1
DL=0
DL=1
显示
开始
DOS功能调用:
功能号02H,用于从显示屏幕上输出单个字符
例:显示输出字符’A’
MOV DL, ’A’; 调用参数: 输出字符
MOV AH, 02 ; DOS功能号: 显示输出
INT 21H ; DOS调用
DOS功能调用:
功能号09H,用于从显示屏幕上输出字符串
例:puter’
STR DB ‘computer’,‘$’ ;在数据段定义
…
MOV DX,OFFSET STR ; 调用参数: 输出字符串
MOV AH,09H ; DOS功能号: 显示输出串
INT 21H ; DOS调用
满足
不满足
条件
程序段
双分支结构程序的典型结构二
例2:计算某个数的绝对值
CMP AX,0
JGE NT
NEG AX
NT: MOV RES,AX
Y
N
AX≥0
求补
送结果
开始
双分支结构程序设计举例
例3:设计字符比较程序,两个字符相同时,显示YES;否则显示NO。
DATA SEGMENT
D1 DB ‘A’
D2 DB ‘B’
RES1 DB ‘YES’, ’$ ’
RES2 DB ‘NO’, ’$ ’
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,D1
MOV BL,D2
CMP AL,BL
JNE NEXT1
LEA DX,RES1
JMP NEXT2
NEXT1: LEA DX,RES2
NEXT2: MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
N
Y
相同?
显示NO
显示YES
取数
开始
返回