《分支程序設(shè)計(jì)》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《分支程序設(shè)計(jì)(5頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、本文格式為Word版,下載可任意編輯
分支程序設(shè)計(jì)
這種程序的思路是先推斷條件是否成立;若成立,轉(zhuǎn)到轉(zhuǎn)移指令指定的位置執(zhí)行
例:從接口 03F 0H 中取數(shù),若此數(shù) =90 ,則將 00H 送 03F 7H ,若此數(shù) 90 ,則將 FFH 送接口 03F 3H 。程序如下:
MOV DX , 03F 0H
IN AL , DX
CMP AL , 90
JNC NEXT1
MOV AL , 0FFH
JMP NEXT2
NEX
2、T1 :
MOV AL , 00H
NEXT2 :
MOV DX , 03F 7H
OUT DX , AL
HLT
分支程序依據(jù)條件是真或假打算執(zhí)行與否
推斷的條件是各種指令,如 CMP 、 TEST 等執(zhí)行后形成的狀態(tài)標(biāo)志
轉(zhuǎn)移指令 Jcc 和 JMP 可以實(shí)現(xiàn)分支掌握;還可以采納 MASM 6.x 供應(yīng)的條件控偽指令實(shí)現(xiàn)
單分支程序設(shè)計(jì)
條件成立跳轉(zhuǎn),否則挨次執(zhí)行分支語(yǔ)句體;留意選擇正確的條件轉(zhuǎn)移指令和轉(zhuǎn)移目標(biāo)地址
cmp ax,0
jns nonneg
; 分支條件: AX ≥ 0
neg
3、ax
; 條件不滿(mǎn)意,求補(bǔ)
nonneg: mov result,ax
; 條件滿(mǎn)意
例:計(jì)算 AX 的肯定值
雙分支程序設(shè)計(jì)
條件成立跳轉(zhuǎn)執(zhí)行第 2 個(gè)分支語(yǔ)句體,否則挨次執(zhí)行第 1 個(gè)分支語(yǔ)句體。留意第 1 個(gè)分支體后肯定要有一個(gè) JMP 指令跳到第 2 個(gè)分支體后
例 : 顯示 BX 最高位
shl bx,1 ;BX 最高位移入 CF
jc one
;CF = 1 ,即最高位為 1 ,轉(zhuǎn)移
mov dl,' 0'
;CF = 0 ,即最高位為 0 , DL ←' 0 '
jmp two ; 肯定要跳過(guò)另一個(gè)分支體
one: mov dl, ' 1 ' ;DL
4、←' 1 '
two: mov ah,2
int 21h ; 顯示
mov dl, ' 0 ' ;DL ←' 0 '
shl bx,1 ;BX 最高位移入 CF
jnc two
;CF = 0 ,最高位為 0 ,轉(zhuǎn)移
mov dl,' 1'
;CF = 1 ,最高位為 1 , DL ←' 1 '
two: mov ah,2
int 21h ; 顯示
例 : 顯示 BX 最高位
多分支程序設(shè)計(jì)
多個(gè)條件對(duì)應(yīng)各自的分支語(yǔ)句體,哪個(gè)條件成立就轉(zhuǎn)入相應(yīng)分支體執(zhí)行。多分支可以化解為雙分支或單分支結(jié)構(gòu)的組合例如:
or ah,ah ; 等效于 cmp ah,0
jz func
5、tion0 ;ah = 0 ,轉(zhuǎn)向 function0
dec ah ; 等效于 cmp ah,1
jz function1 ;ah = 1 ,轉(zhuǎn)向 function1
dec ah ; 等效于 cmp ah,2
jz function2 ;ah = 2 ,轉(zhuǎn)向 function2
AH=0
fuction0
Y
N
AH=1
fuction1
Y
N
AH=2
fuction2
Y
N
地址表形成多分支
需要在數(shù)據(jù)段事先支配一個(gè)按挨次排列的轉(zhuǎn)移地址表,輸入的數(shù)字作為偏移量。由于只有 2 個(gè)字節(jié) 16 位偏移地址,所以偏移量需要乘 2
關(guān)鍵是要理解間接尋址
6、方式 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
; 取得各個(gè)標(biāo)號(hào)的偏移地址
例 : 數(shù)據(jù)段
start1: mov dx,offset msg ; 提示輸入
7、數(shù)字
mov ah,9
int 21h
mov ah,1 ; 等待按鍵
int 21h
cmp al,'1' ; 數(shù)字 1 ?
jb start1
cmp al,'8' ; 數(shù)字 8 ?
ja start1
and ax,000fh ; 將 ASCII 碼轉(zhuǎn)換成數(shù)字
dec ax
shl ax,1 ; 等效于 add ax,ax
mov bx,ax
jmp table[bx]
; (段內(nèi))間接轉(zhuǎn)移: IP ← [table+bx]
start2: mov ah,9
int 21h
.exit 0
disp1: mov dx,offset msg1 ; 處理程序 1
jmp start2
..
第 5 頁(yè) 共 5 頁(yè)