电工学习网

 找回密码
 立即注册

分支程序设计

2015-3-22 09:06| 编辑:电工学习网| 查看: 4817| 评论: 0


 这种程序的思路是先判断条件是否成立;若成立,转到转移指令指定的位置执行

例:从接口 03F 0H 中取数,若此数 >=90 ,则将 00H 送 03F 7H ,若此数 <90 ,则将 FFH 送接口 03F 3H 。程序如下:

MOV DX , 03F 0H

IN AL , DX

CMP AL , 90

JNC NEXT1

MOV AL , 0FFH

JMP NEXT2

NEXT1 :

MOV AL , 00H

NEXT2 :

MOV DX , 03F 7H

OUT DX , AL

HLT

分支程序根据条件是真或假决定执行与否
判断的条件是各种指令,如 CMP 、 TEST 等执行后形成的状态标志
转移指令 Jcc 和 JMP 可以实现分支控制;还可以采用 MASM 6.x 提供的条件控伪指令实现
单分支程序设计
条件成立跳转,否则顺序执行分支语句体;注意选择正确的条件转移指令和转移目标地址
cmp ax,0
jns nonneg
; 分支条件: AX ≥ 0
neg ax
; 条件不满足,求补
nonneg: mov result,ax
; 条件满足
例:计算 AX 的绝对值
双分支程序设计
条件成立跳转执行第 2 个分支语句体,否则顺序执行第 1 个分支语句体。注意第 1 个分支体后一定要有一个 JMP 指令跳到第 2 个分支体后
例 : 显示 BX 最高位
shl bx,1 ;BX 最高位移入 CF
jc one
;CF = 1 ,即最高位为 1 ,转移
mov dl,' 0'
;CF = 0 ,即最高位为 0 , DL ←' 0 '
jmp two ; 一定要跳过另一个分支体
one: mov dl, ' 1 ' ;DL ←' 1 '
two: mov ah,2
int 21h ; 显示
mov dl, ' 0 ' ;DL ←' 0 '
shl bx,1 ;BX 最高位移入 CF
jnc two
;CF = 0 ,最高位为 0 ,转移
mov dl,' 1'
;CF = 1 ,最高位为 1 , DL ←' 1 '
two: mov ah,2
int 21h ; 显示
例 : 显示 BX 最高位
多分支程序设计
多个条件对应各自的分支语句体,哪个条件成立就转入相应分支体执行。多分支可以化解为双分支或单分支结构的组合例如:
or ah,ah ; 等效于 cmp ah,0
jz function0 ;ah = 0 ,转向 function0
dec ah ; 等效于 cmp ah,1
jz function1 ;ah = 1 ,转向 function1
dec ah ; 等效于 cmp ah,2
jz function2 ;ah = 2 ,转向 function2
AH=0
fuction0
Y
N
AH=1
fuction1
Y
N
AH=2
fuction2
Y
N
地址表形成多分支
需要在数据段事先安排一个按顺序排列的转移地址表,输入的数字作为偏移量。因为只有 2 个字节 16 位偏移地址,所以偏移量需要乘 2
关键是要理解间接寻址方式 JMP 指令
.data
msg db 'Input number(1~8):',0dh,0ah,'$'
msg1 db 'Chapter 1 : ...',0dh,0ah,'$'
msg2 db 'Chapter 2 : ...',0dh,0ah,'$‘
...
msg8 db 'Chapter 8 : ... ',0dh,0ah,'$'
table dw disp1,disp2,disp3,disp4
dw disp5,disp6,disp7,disp8
; 取得各个标号的偏移地址
例 : 数据段
start1: mov dx,offset msg ; 提示输入数字
mov ah,9
int 21h
mov ah,1 ; 等待按键
int 21h
cmp al,'1' ; 数字 < 1 ?
jb start1
cmp al,'8' ; 数字 > 8 ?
ja start1
and ax,000fh ; 将 ASCII 码转换成数字
dec ax
shl ax,1 ; 等效于 add ax,ax
mov bx,ax
jmp table[bx]
; (段内)间接转移: IP ← [table+bx]
start2: mov ah,9
int 21h
.exit 0
disp1: mov dx,offset msg1 ; 处理程序 1
jmp start2
..

看过《分支程序设计》的人还看了以下文章:

发表评论

最新评论

电工学习网 ( )

GMT+8, 2021-12-6 20:45

Powered by © 2011-2021 www.diangon.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

返回顶部