单分支程序(if then)
例
双字长数存放于dx和ax寄存器(高位于dx),求该数的绝对值(用16位指令)
算法分析:判断数正负,正数(首位为0),不需处理,负数(首位为1),对该数求补,即反码加一
code segment
assume cs:code
start:
test dx,8000h //测试数的正负
jz exit //不为负数则退出
not ax
not dx
add ax,1
adc dx,0
exit:
mov ah,4ch
int 21h
code ends
end start
复合分支程序
例
从键盘输入一位十六进制数,将其转换为十进制数显示输出
算法分析:
输入为数字(30h~39h),直接输出
为大写字母A~F(41h~46h)时,可减11h
a~f时(61h~66h),可减去31h得到30h~35h(0~5的ascii码),再输出2位十进制数字,
其他输入为非法输入,退出程序
code segment
assume cs:code
start:mov ah,1 //键盘输入
int 21h
cmp al,30h
jl exit
cmp al,39h
jle dig //输入为0~9
cmp al,41h
jl exit //非法输入
cmp al,46h
jle print //输入为A~F
cmp al,61h
jl exit //非法输入
cmp al,66h
jg exit //非法输入
sub al,31h
j