




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
3.7分支程序的設(shè)計分支程序就是根據(jù)條件的不同完成不同功能的程序。編寫分支程序要用到條件轉(zhuǎn)移指令。
執(zhí)行轉(zhuǎn)移/調(diào)用指令時,8086指令隊列寄存器原內(nèi)容(按順序取出的后續(xù)指令)被清除,轉(zhuǎn)向指令的地址(目標地址OPR)→CS、IP。CPU按CS、IP的指示,跳轉(zhuǎn)到目標地址去執(zhí)行。
3.7.1無條件轉(zhuǎn)移指令使程序無條件跳轉(zhuǎn)到目標地址(OPR)去執(zhí)行。一.段內(nèi)轉(zhuǎn)移轉(zhuǎn)移指令和待轉(zhuǎn)向指令在同一代碼段中,只改變IP的內(nèi)容。1.段內(nèi)直接轉(zhuǎn)移
格式:JMPOPR;OPR—待轉(zhuǎn)向指令標號
操作:IP←標號偏移地址說明:①標號偏移地址=JMP指令的下一條指令的偏移地址+位移量 位移量由匯編程序在匯編過程中,根據(jù)標號地址與JMP指令所在地址進行計算得到。例:
:
JMPSHORTNEXT; :
NEXT:MOVAL,05H;
:操作碼08H操作碼CS:0100H05H0101H0102H010AH010BHJMPSHORTNEXT8位位移量MOVAL,05H由計算機根據(jù)轉(zhuǎn)移的相對位置計算得到。②轉(zhuǎn)移范圍 短轉(zhuǎn)移(位移量為8位)—以JMP為中心的256個單元;
近轉(zhuǎn)移(位移量為16位)—以JMP為中心的64KB個單元。③短轉(zhuǎn)移和近轉(zhuǎn)移也可以分別表示為
JMPSHORTOPR JMPNEARPTROPR例: :
JMPNEARPTRNEXT; :
NEXT:MOVAL,05H;由計算機根據(jù)轉(zhuǎn)移的相對位置計算得到。操作碼07H操作碼CS:0100H05H0101H0102H010AH010BHJMPNEXT16位位移量MOVAL,05H00H2.段內(nèi)間接轉(zhuǎn)移
格式:JMPOPR ;OPR≡{R,M}
操作:IP←(EA)
說明:①有效地址EA由OPR的尋址方式確定;②轉(zhuǎn)移范圍為以JMP為中心的64KB。例:
BUFDW0301H … MOVBX,2C8FH JMPBUF … JMPNEXT … JMPBX … JMPWORDPTR[BX] NEXT:ADDAX,BX …;IP←NEXT偏移地址;IP←2C8FH;IP←0301H;IP←(2C8FH,2C90H)二.段間轉(zhuǎn)移轉(zhuǎn)移指令和待轉(zhuǎn)向指令不在同一代碼段中,同時改變CS、IP。
轉(zhuǎn)移范圍:1MB。
1.段間直接轉(zhuǎn)移指令中直接給出不在本代碼段中待轉(zhuǎn)向指令標號。格式:JMP
FARPTROPR; OPR待轉(zhuǎn)向指令的標號操作:CS←標號段地址,IP←標號偏移地址。例3.20
在C1代碼段有一條轉(zhuǎn)移到C2代碼段的無條件轉(zhuǎn)移指令,如下如示:
C1 SEGMENT … JMPFARPTRNEXT …
C1 ENDS
C2 SEGMENT … NEXT:MOVCL,AL …
C2 ENDS2.段間間接轉(zhuǎn)移待轉(zhuǎn)向指令的段地址、段內(nèi)偏移地址放在連續(xù)的4個內(nèi)存單元中(指令中給出訪問內(nèi)存單元的尋址方式—同操作數(shù)的尋址方式)。
格式:JMP
DWORDPTROPR;OPR≡{M}
操作:IP←(EA),CS←(EA+2)
例3.21
JMPDWORDPTR[BP][DI]
設(shè)SS=5000H,BP=1000H,DI=0050H,存放轉(zhuǎn)向地址的堆棧段中的存儲單元物理地址:
PA=50000H+1000H+0050H=51050H
此時轉(zhuǎn)向地址的存儲情況如圖3.6所示,JMP指令位于C1代碼段,轉(zhuǎn)移到C2代碼段,程序形式如下:
C1SEGMENT … 1000H:1300H JMPDWORDPTR[BP][DI] … C1ENDS
C2SEGMENT … 2000H:2500H MOVDL,AL …
C2ENDS存儲單元的內(nèi)容10000H1000H:1300H20000H2000H:2500H代碼段C1段首地址JMP指令MOV指令C2段首地址00H25H00H20H堆棧段偏移地址→IP=2500H段地址→CS=2000H51050H51050H0050H1000H5000HSSBPDI+3.7.2條件轉(zhuǎn)移指令
根據(jù)標志位來判斷測試條件:滿足條件則轉(zhuǎn)移到指令指定地址執(zhí)行(分支);否則順序執(zhí)行下一條指令。條件滿足否?是否轉(zhuǎn)向轉(zhuǎn)移地址執(zhí)行順序執(zhí)行格式:JXXOPR;OPR≡{標號}操作:當(dāng)條件XX滿足時則轉(zhuǎn)移到OPR執(zhí)行,否則順序執(zhí)行。注意:
屬于段內(nèi)直接短轉(zhuǎn)移指令,轉(zhuǎn)移范圍為256字節(jié)(IP-128~IP+127)。
JS OPR;結(jié)果為負轉(zhuǎn)移
JNS OPR;結(jié)果為正轉(zhuǎn)移JP/JPE OPR;結(jié)果中“1”的個數(shù)為偶轉(zhuǎn)移JNP/JPO OPR;結(jié)果中“1”的個數(shù)為奇轉(zhuǎn)移JO OPR;結(jié)果有溢出轉(zhuǎn)移JNO OPR;結(jié)果無溢出轉(zhuǎn)移JC OPR;結(jié)果有進位轉(zhuǎn)移JNC OPR;結(jié)果無進位轉(zhuǎn)移JZ/JE OPR;結(jié)果為零/相等轉(zhuǎn)移JNZ/JNE OPR;結(jié)果不為零/不相等轉(zhuǎn)移(1)單條件轉(zhuǎn)移指令JB/JNAEOPR;小于/不大于等于(CF=1)轉(zhuǎn)移JNB/JAE OPR;不小于/大于等于(CF=0)轉(zhuǎn)移JBE/JNA OPR;小于等于/不大于(CF∨ZF=1)轉(zhuǎn)移JNBE/JAOPR;不小于等于/大于(CF∨ZF=0)轉(zhuǎn)移B:Below——小于(低于)A:Above——大于(高于)E:Equal——等于(2)適合無符號數(shù)比較的條件轉(zhuǎn)移指令L:Less——小于G:Greater——大于E:Equal——等于JNL/JGE OPR;不小于/大于等于轉(zhuǎn)移JLE/JNG OPR;小于等于/不大于轉(zhuǎn)移JNLE/JG OPR;不小于等于/大于轉(zhuǎn)移(3)適合帶符號數(shù)比較的條件轉(zhuǎn)移指令JL/JNGEOPR;小于/不大于等于轉(zhuǎn)移SFOF=1SFOF=0((SFOF)∨ZF)=1((SFOF)∨ZF)=0注意:上述條件轉(zhuǎn)移指令通常是與算術(shù)、邏輯、移位等指令聯(lián)用的。且注意有符號和無符號的區(qū)別。如:若AL的內(nèi)容是一個無符號數(shù),那么
CMPAL,0;JANEXT;即當(dāng)AL>0時轉(zhuǎn)移若AL的內(nèi)容是一個有符號數(shù),那么
CMPAL,0;JGDONE;即當(dāng)AL>0時轉(zhuǎn)移3.7.3分支程序的結(jié)構(gòu)單分支結(jié)構(gòu)
判定條件是否分支程序段順序往下執(zhí)行多分支結(jié)構(gòu)判定條件程序段n條件1程序段2程序段1條件2條件n…分為:單分支結(jié)構(gòu)和多分支結(jié)構(gòu)兩種3.7.4分支程序設(shè)計舉例
例:比較兩個無符號數(shù)的大小,將大數(shù)存入MAX單元。
例3.23
檢查NN單元的數(shù)據(jù)是否為1位16進制數(shù),是則將其轉(zhuǎn)換為ASCII碼,否則置為0FFH。AL←NAL≥0?AL=AL+30HS存AL值ENDNYAL=AL+07HAL≤9?AL≤15?AL=0FFHYNNY×程序如下:ASTACKSEGMENTSTACKDW256DUP(?)TOPLABELWORDASTACKENDSDATASEGMENTNNDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA;SS:ASTACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AX
MOVSP,OFFSETTOP
MOVAL,NN;AL←NCMPAL,9;AL和9比較
JBEALOOP1;AL≤9,轉(zhuǎn)ALOOP1CMPAL,15;AL和15比較
JAALOOP2;AL>15,轉(zhuǎn)ALOOP2ADDAL,07H;AL←AL+07HALOOP1:ADDAL,30H;AL←AL+30HDONE:MOVAH,4CH;返回DOSINT21HALOOP2:MOVAL,0FFH;AL←0FFHJMPDONECODE:ENDSENDSTART例3.22
符號函數(shù)
1(x>0)y=0(x=0)
-1(x<0)開始x=?Y←0Y←1Y←-1結(jié)束>0<0=0開始x=0?Y←0Y←1Y←-1結(jié)束NNYx≥0?YASTACK SEGMENT STACK DW256DUP(?)
TOP LABELWORDASTACK ENDSDATA SEGMENTXX DBXYY DB?DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:ASTACKSTART:
MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX LEA SP,TOP
MOV AL,XX ;AL←X
CMP AL,0 ;X與0比較
JGE NEPA ;X≥0,轉(zhuǎn)NEPA
MOV YY,0FFH ;X<0,YY←-1 JMP STOP能否缺???為什么?NEPA: JENEPB ;X=0,轉(zhuǎn)NEPB MOV YY,1 ;X>0,YY←1 JMP STOPNEPB: MOV YY,0 ;X=0,YY←0STOP: MOV AH,4CH ;返回DOS INT 21HCODE ENDS
END START
例3.24從鍵盤接受一個字符送入AL,根據(jù)AL的數(shù)值進行跳轉(zhuǎn)AL←字符AL≤30H?BX=Li首址S轉(zhuǎn)移到Li執(zhí)行ENDYNAL邏輯左移1位AL≥39H?YNAL=AL-30HAH=0TAB+1+2+3+17+18L0L0L1L1L9L9設(shè)由鍵盤輸入‘0’~‘9’中的任一個到AL,則AL的內(nèi)容就為‘0’~‘9’中的任一個字符的ASCII值。然后根據(jù)ASCII值轉(zhuǎn)到L0、L1、……、L9程序段中。STACK SEGMENT STACK DW256DUP(?)
TOP LABELWORDSTACKENDSDATA SEGMENTTAB DWL0,L1,L2,L3,L4,L5,L6,L7,
L8,L9DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKSTART:
MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP,OFFSETTOPMOVAH,01H ;鍵入字符INT 21HCMPAL,30H ;AL和30H比較
JB DONE ;AL<30H,轉(zhuǎn)DONECMPAL,39H ;AL和39H比較JA DONE ;AL>39H,轉(zhuǎn)DONESUB AL,30HSHL AL,1 ;AX←2*iMOVAH,0LEA BX,TAB ;BX←TAB偏移地址ADDBX,AX;BX←TAB+2*iJMP WORDPTR[BX];轉(zhuǎn)(TAB+2*i)=Li處執(zhí)行DONE:MOVAH,4CH ;返回DOS INT 21HL0:…
;分支L0 JMP DONEL1:…
;分支L1 JMP DONE
…
…
L9:…
;分支L9 JMP DONECODEENDSENDSTART多分支結(jié)構(gòu)的實現(xiàn)形式之一endTAB+1+2+3+17+18L0L0L1L1L9L9DATA SEGMENTTAB DWL0,L1,L2,L3,L4,L5,L6,L7,L8,L9DATA ENDSL0:…
;分支L0 JMP DONEL1:…
;分支L1 JMP DONE
…
…
L9:…
;分支L9 JMP DONE多分支結(jié)構(gòu)的實現(xiàn)形式之一(1)段內(nèi)直接轉(zhuǎn)移指令格式:JMPSHORTOPRD;OPRD≡{標號}功能:將程序無條件地轉(zhuǎn)移到標號OPRD為起點的程序段執(zhí)行。操作:IP←IP+D8;D8為8位偏移量的補碼轉(zhuǎn)移范圍:IP-128~IP+127(256字節(jié))3.7.1無條件轉(zhuǎn)移指令①段內(nèi)直接短轉(zhuǎn)移指令說明:轉(zhuǎn)移指令可以從現(xiàn)行指令地址(IP)向低地址轉(zhuǎn)移——D8為負數(shù);也可以向高地址轉(zhuǎn)移——D8為正數(shù)。注意:JMPSHORTPTRCCC;錯誤指令
格式:JMP
NEARPTROPRD;
其中,OPRD≡{標號}功能:將程序無條件地轉(zhuǎn)移到標號OPRD為起點的程序段執(zhí)行。操作:IP←IP+D16;D16為16位偏移量的補碼轉(zhuǎn)移范圍:IP-32768~IP+32767(64K一個段)②段內(nèi)直接近轉(zhuǎn)移指令說明:直接轉(zhuǎn)移指令中的目標地址OPRD直接使用要轉(zhuǎn)向指令的標號,屬性操作符NEARPTR在指令中可省略,直接寫成:其中,標號的偏移地址=當(dāng)前轉(zhuǎn)移指令的下一條指令的偏移地址+位移量位移量是是16位的,可以由匯編程序在匯編過程中,根據(jù)標號地址與JMP指令所在地址進行計算得到。
JMP
標號;IP←標號的偏移地址格式:JMPOPRD;OPRD≡{R,M}操作:IP←[EA];EA為OPRD確定的有效地址。例如:JM
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025何種情況下用人單位與勞動者能在合同中約定違約金
- 2025標準贈與合同模板
- 2025年江蘇省蘇州市梁豐重點達標名校初三下學(xué)期物理試題統(tǒng)練(八)含解析
- 2025屆滁州市重點中學(xué)初三下學(xué)期命題預(yù)測及題型示例化學(xué)試題含解析
- 天津工業(yè)職業(yè)學(xué)院《電子商務(wù)A》2023-2024學(xué)年第二學(xué)期期末試卷
- 昆山杜克大學(xué)《漢語語音及教學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 荊州職業(yè)技術(shù)學(xué)院《學(xué)前兒童發(fā)展科學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024-2025學(xué)年江蘇省無錫市宜城環(huán)科園教聯(lián)盟初三下學(xué)期3月適應(yīng)性檢測試題化學(xué)試題試卷含解析
- 湖北恩施沐撫大峽谷重點達標名校2025屆初三3月月考英語試題理試卷含答案
- 昭通衛(wèi)生職業(yè)學(xué)院《青春期心理輔導(dǎo)》2023-2024學(xué)年第二學(xué)期期末試卷
- 國內(nèi)外大型體育場館運營管理模式研究
- 敘事護理參考課件
- JBT 11699-2013 高處作業(yè)吊籃安裝、拆卸、使用技術(shù)規(guī)程
- 2023年安徽國控資本有限公司及所屬企業(yè)社會招聘考試真題及答案
- 專題08 八年級下冊易混易錯總結(jié)-備戰(zhàn)2024年中考道德與法治一輪復(fù)習(xí)知識清單(全國通用)
- 浙江宇翔職業(yè)技術(shù)學(xué)院單招職測參考試題庫(含答案)
- 提高手衛(wèi)生正確率品管圈課件
- 醫(yī)院勞務(wù)派遣投標方案(技術(shù)方案)
- 高中數(shù)學(xué)開放題賞析
- 非工傷人道主義賠償協(xié)議(標準版)
- 中華民族的復(fù)興
評論
0/150
提交評論