文档介绍:第3章
第3章: 分支程序设计
分支程序根据条件是真或假决定执行与否
判断的条件是各种指令执行后形成的状态标志,如CMP、TEST等
和无条件转移指令JMP可以实现分支控制
分支结构有
单分支结构
双分支结构
多分支结构
第3章:单分支结构
程序中某些语句仅在一些特定的情况下执行;
条件成立跳转,否则顺序执行分支语句体;
注意选择正确的条件转移指令和转移目标地址
实例:求绝对值
单分支
If …endif
第3章:计算AX中有符号数的绝对值
cmp ax,0
jge nonneg ;条件满足(AX≥0),转移
neg ax ;条件不满足,求补
nonneg: mov result,ax ;条件满足
;不恰当的分支
cmp ax,0
jl yesneg ;条件满足(AX<0),转移
jmp nonneg
yesneg: neg ax ;条件不满足,求补
nonneg: mov result,ax ;条件满足
第3章:双分支结构
条件成立跳转执行第2个分支语句体,否则顺序执行第1个分支语句体
注意第1个分支体后一定要有一个JMP指令跳到第2个分支体后
实例:显示BX的最高位
双分支结构
if…else…endif
第3章:显示BX的最高位
shl bx,1 ;BX最高位移入CF标志
jc one ;CF=1,即最高位为1,转移
mov dl,30h
;CF=0,即最高位为0:DL←30H=‘0’
jmp two ;一定要跳过另一个分支体
one: mov dl,31h ;DL← 31H=‘1’
two: mov ah,2
int 21h ;显示
可以用JNC替换JC
第3章:显示BX的最高位(另解一)
shl bx,1 ;BX最高位移入CF标志
jnc one ;CF=0,即最高位为0,转移
mov dl,31h
;CF=1,即最高位为1:DL←31H=‘1’
jmp two ;一定要跳过另一个分支体
one: mov dl,30h ;DL← 30H=‘0’
two: mov ah,2
int 21h ;显示
转换为单分支结构
第3章:显示BX的最高位(另解二:单分支)
mov dl,’0’;DL←30H=‘0’
shl bx,1 ;BX最高位移入CF标志
jnc two ;CF=0,即最高位为0,转移
mov dl,’1’
;CF=1,即最高位为1:DL←31H=‘1’
two: mov ah,2
int 21h ;显示
编写分支程序,需留心分支的开始和结束
第3章:显示BX的最高位(另解三:无分支)
mov dl,0
shl bx,1 ;BX最高位移入CF标志
adc dl,30h
;CF=0,DL←0+30h+0=30H=‘0’
;CF=1,DL←0+30h+1=31H=‘1’
mov ah,2
int 21h ;显示
第3章: 显示压缩BCD码,无前导0
;数据段
BCD db 04h
;代码段
mov dl,BCD
test dl,0ffh ;如果BCD码为0,显示0
jz zero ;双分支结构
test dl,0f0h ;如果BCD码高位为0,不显示0
jz one ;单分支结构