《分支程序設(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 NEXT1 : MOV AL , 00H NEXT2 : MOV DX , 03F 7H OUT DX , AL HLT 分支程序依據(jù)條件是真或假打算執(zhí)行與否 推斷的條件是各種指令
2、,如 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,0jns nonneg; 分支條件: AX 0neg 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
3、 bx,1 ;BX 最高位移入 CFjc one;CF 1 ,即最高位為 1 ,轉(zhuǎn)移mov dl, 0;CF 0 ,即最高位為 0 , DL 0 jmp two ; 肯定要跳過(guò)另一個(gè)分支體one: mov dl, 1 ;DL 1 two: mov ah,2int 21h ; 顯示mov dl, 0 ;DL 0 shl bx,1 ;BX 最高位移入 CFjnc two;CF 0 ,最高位為 0 ,轉(zhuǎn)移mov dl, 1;CF 1 ,最高位為 1 , DL 1 two: mov ah,2int 21h ; 顯示例 : 顯示 BX 最高位多分支程序設(shè)計(jì)多個(gè)條件對(duì)應(yīng)各自的分支語(yǔ)句體,哪個(gè)條件成立就轉(zhuǎn)入
4、相應(yīng)分支體執(zhí)行。多分支可以化解為雙分支或單分支結(jié)構(gòu)的組合例如:or ah,ah ; 等效于 cmp ah,0jz function0 ;ah 0 ,轉(zhuǎn)向 function0dec ah ; 等效于 cmp ah,1jz function1 ;ah 1 ,轉(zhuǎn)向 function1dec ah ; 等效于 cmp ah,2jz function2 ;ah 2 ,轉(zhuǎn)向 function2AH=0fuction0YNAH=1fuction1YNAH=2fuction2YN地址表形成多分支需要在數(shù)據(jù)段事先支配一個(gè)按挨次排列的轉(zhuǎn)移地址表,輸入的數(shù)字作為偏移量。由于只有 2 個(gè)字節(jié) 16 位偏移地址,所以偏
5、移量需要乘 2關(guān)鍵是要理解間接尋址方式 JMP 指令.datamsg db Input number(18):,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,disp4dw disp5,disp6,disp7,disp8; 取得各個(gè)標(biāo)號(hào)的偏移地址例 : 數(shù)據(jù)段start1: mov dx,offset msg ; 提示輸入數(shù)字mov ah,9int 21hmov ah,1 ; 等待按鍵int 21hcmp al,1 ; 數(shù)字 1 ?jb start1cmp al,8 ; 數(shù)字 8 ?ja start1and ax,000fh ; 將 ASCII 碼轉(zhuǎn)換成數(shù)字dec axshl ax,1 ; 等效于 add ax,axmov bx,axjmp tablebx; (段內(nèi))間接轉(zhuǎn)移: IP table+bxstart2: mov ah,9int 21h.exit 0disp1: mov dx,offset msg1 ; 處理程序 1jmp start2. 第 5 頁(yè) 共 5 頁(yè)