第3章 控制轉(zhuǎn)移課件_第1頁
第3章 控制轉(zhuǎn)移課件_第2頁
第3章 控制轉(zhuǎn)移課件_第3頁
第3章 控制轉(zhuǎn)移課件_第4頁
第3章 控制轉(zhuǎn)移課件_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第三章指令系統(tǒng)三峽大學陳慈發(fā)0717-6394358,第3章_5控制轉(zhuǎn)移128086CPU的指令格式8086CPU的指令系統(tǒng)38086CPU的尋址方式第3章_5控制轉(zhuǎn)移指令系統(tǒng)指令分類數(shù)據(jù)傳送指令算術(shù)運算指令邏輯運算與移位指令串操作指令控制轉(zhuǎn)移指令處理機控制指令第3章_5控制轉(zhuǎn)移程序控制指令用來控制程序的執(zhí)行順序,用于實現(xiàn)分支、循環(huán)、過程調(diào)用/返回、中斷調(diào)用/返回等程序結(jié)構(gòu)CS:IP總是指向下一條即將執(zhí)行的指令的地址,通過改變IP和CS的值,可以改變程序的執(zhí)行順序,但程序中不能使用MOV指令直接改變CS和IP的值,只能通過程序控制指令實現(xiàn)段間轉(zhuǎn)移段內(nèi)轉(zhuǎn)移同時改變CS和IP的值,又稱遠轉(zhuǎn)移,目標屬性為FAR??赊D(zhuǎn)移到1MB地址空間的任一位置只改變IP的值,不改變CS的值,又稱近轉(zhuǎn)移/短轉(zhuǎn)移,目標屬性為NEAR/SHORT,只能在代碼段內(nèi)轉(zhuǎn)移近轉(zhuǎn)移短轉(zhuǎn)移轉(zhuǎn)移距離用1個字表達,轉(zhuǎn)移范圍為代碼段內(nèi)相對當前指令地址-32768~+32767,轉(zhuǎn)移類型為NEARPTR轉(zhuǎn)移距離用1個字節(jié)表達,轉(zhuǎn)移范圍為代碼段內(nèi)相對當前指令地址-128~+127,轉(zhuǎn)移類型為SHORT轉(zhuǎn)移類型實際編程時,匯編程序會根據(jù)目標地址的屬性,自動處理成短轉(zhuǎn)移、近轉(zhuǎn)移或遠轉(zhuǎn)移。程序員可用操作符short、nearptr或farptr強制成為需要的轉(zhuǎn)移類型。第3章_5控制轉(zhuǎn)移

直接轉(zhuǎn)移:在轉(zhuǎn)移指令中直接指明目標地址

間接轉(zhuǎn)移:轉(zhuǎn)移的目標地址間接存儲于某寄存器或存儲器單元中

相對轉(zhuǎn)移:把當前的IP值增加或減少某一個值,也就是以當前指令為中心往前或往后轉(zhuǎn)移一個距離(位移量)

絕對轉(zhuǎn)移:以新的值完全代替當前的IP值或CS:IP值所有段內(nèi)直接轉(zhuǎn)移都是相對轉(zhuǎn)移所有段內(nèi)間接轉(zhuǎn)移都是絕對轉(zhuǎn)移所有段間轉(zhuǎn)移都是絕對轉(zhuǎn)移轉(zhuǎn)移類指令的目標地址通常采用標號,由匯編程序自動計算目標地址第3章_5控制轉(zhuǎn)移第3章_5控制轉(zhuǎn)移無條件轉(zhuǎn)移指令(3條)1、無條件轉(zhuǎn)移指令JMP(JuMP)

格式:JMPd

功能:程序無條件轉(zhuǎn)移到目標地址d去執(zhí)行

說明:目標地址d常常用標號表示,標號是目標地址的符號表示。有6種目標地址尋址方式。①

段內(nèi)直接轉(zhuǎn)移(短轉(zhuǎn)移):是相對轉(zhuǎn)移,位移量在指令中占1個字節(jié),轉(zhuǎn)移范圍不超過-128~+127字節(jié)。格式: JMP

SHORT標號 JMP

標號(匯編程序自動計算轉(zhuǎn)移距離生成短轉(zhuǎn)移指令)操作: IP←IP+2

±位移量(8位)【例】 JMPSTART或JMPSHORTSTART ;IP←IP+2+START第3章_5控制轉(zhuǎn)移②段內(nèi)直接轉(zhuǎn)移(近轉(zhuǎn)移):是相對轉(zhuǎn)移,位移量在指令中占2個字節(jié),轉(zhuǎn)移范圍是段內(nèi)任何地方(-32768~+32767)。格式: JMP有效地址EA JMP

NEARPTR標號 JMP

標號(匯編程序自動計算轉(zhuǎn)移距離生成近轉(zhuǎn)移指令)操作: IP←有效地址EA IP←IP±位移量(16位)【例】 JMPSTART或JMPNEARPTRSTART;IP←IP±START JMP2000H ;IP←2000H③段內(nèi)間接轉(zhuǎn)移(寄存器間接):是絕對轉(zhuǎn)移,目標地址在16位的通用寄存器中,轉(zhuǎn)移范圍是段內(nèi)任何地方(0~65535)。格式: JMPr16操作: IP←r16【例】 JMPSI ;IP←SI第3章_5控制轉(zhuǎn)移④段內(nèi)間接轉(zhuǎn)移(存儲器間接):是絕對轉(zhuǎn)移,目標地址在存儲器中占2個字節(jié),轉(zhuǎn)移范圍是段內(nèi)任何地方(0~65535)。格式: JMPWORDPTR[mem]操作: IP←[mem]16說明: 段寄存器搭配關(guān)系同尋址方式,即BP同SS搭配,其它均同DS搭配?!纠?JMPWORDPTR[1000H] ;IP←DS:[1000H]

JMPWORDPTR[SI] ;IP←DS:[SI]

JMPWORDPTR[BP] ;IP←SS:[BP]第3章_5控制轉(zhuǎn)移⑤段間直接轉(zhuǎn)移(遠轉(zhuǎn)移):是絕對轉(zhuǎn)移,目標地址在指令中占4個字節(jié)(2字節(jié)IP,2字節(jié)CS),轉(zhuǎn)移范圍是存儲器任何地方。格式: JMP邏輯地址 JMPFARPTR標號操作: IP←目標地址的2字節(jié)偏移地址,CS←目標地址的2字節(jié)段地址【例】 JMPFARPTRpnt ;

JMP2000H:3000H ;CS←2000H,IP←3000H 第3章_5控制轉(zhuǎn)移⑥段間間接轉(zhuǎn)移(存儲器間接):是絕對轉(zhuǎn)移,目標地址在存儲器中占4個字節(jié)(2字節(jié)IP,2字節(jié)CS),轉(zhuǎn)移范圍是存儲器任何地方。格式: JMPDWORDPTR[mem]操作: IP←[mem]16,CS←[mem+2]16說明: 段寄存器搭配關(guān)系同尋址方式,即BP同SS搭配,其它均同DS搭配?!纠?JMPDWORDPTR[1000H];IP←DS:[1000H],CS←DS:[1002H]

JMPDWORDPTR[SI] ;IP←DS:[SI],CS←DS:[SI+2]

JMPDWORDPTR[BP] ;IP←SS:[BP],CS←SS:[BP+2]第3章_5控制轉(zhuǎn)移2、子程序(過程)調(diào)用指令CALL

格式:CALLd

功能:程序無條件轉(zhuǎn)移到子程序(過程)地址d去執(zhí)行并保護斷點地址

說明:CALL指令與JMP指令不同點在于CALL指令包含了保護斷點地址的操作,即將斷點處的IP(段內(nèi)調(diào)用)值或CS、IP(段間調(diào)用)值壓入堆棧(PUSHIP或PUSHCS;PUSHIP)。CALL指令應同子程序(過程)返回指令RET搭配使用。

CALL指令與JMP指令類似,也分為段內(nèi)調(diào)用、段間調(diào)用、直接調(diào)用、間接調(diào)用、相對調(diào)用、絕對調(diào)用等5種調(diào)用地址尋址方式,但沒有短調(diào)用。系統(tǒng)設計中把同一代碼段(CS)內(nèi)調(diào)用的過程稱為“近過程”,用NEAR表示;而把調(diào)用其他代碼段(即段間)的過程稱為“遠過程”,用FAR表示。調(diào)用的目標地址通常用“過程名”表示,是一種符號地址。第3章_5控制轉(zhuǎn)移①段內(nèi)直接調(diào)用(近過程):是相對調(diào)用,位移量在指令中占2個字節(jié)。格式: CALL有效地址EA

CALLNEAR過程名 CALL過程名(過程名是已定義過的近過程名)操作: SP←SP-2 [SP]←IP IP←有效地址EA或IP←IP±位移量(16位)說明: 只在堆棧中保護IP,CS保持不變【例】 CALLNEARproc1 ;IP←IP+proc1

CALLproc2 ;IP←IP+proc2

CALL1000H ;IP←1000HIPXXXXXXXXXXXXSPSP第3章_5控制轉(zhuǎn)移②段內(nèi)間接調(diào)用(寄存器間接):是絕對調(diào)用,子程序地址在16位的寄存器中。格式: JMPr16操作: SP←SP-2 [SP]←IP IP←r16說明: 只在堆棧中保護IP,CS保持不變【例】 CALLBX ;IP←BX

CALLSI ;IP←SIIPXXXXXXXXXXXXSPSP第3章_5控制轉(zhuǎn)移③段內(nèi)間接調(diào)用(存儲器間接):是絕對調(diào)用,子程序地址在存儲器中占2個字節(jié)。格式: CALLWORDPTR[mem]操作: SP←SP-2 [SP]←IP IP←[mem]16說明: 只在堆棧中保護IP,CS保持不變。 段寄存器搭配關(guān)系同尋址方式,即BP同SS搭配,其它均同DS搭配?!纠?CALLWORDPTR[1000H] ;IP←DS:[1000H]

CALLWORDPTR[SI] ;IP←DS:[SI]

CALLWORDPTR[BP] ;IP←SS:[BP]IPXXXXXXXXXXXXSPSP第3章_5控制轉(zhuǎn)移④段間直接調(diào)用(遠過程):是絕對調(diào)用,子程序地址在指令中占4個字節(jié)(2字節(jié)IP,2字節(jié)CS)。格式: CALL邏輯地址 CALLFARPTR過程名

CALL過程名(過程名是已定義過的遠過程名)操作: SP←SP-2 [SP]←CS SP←SP-2 [SP]←IP IP←邏輯地址之偏移地址或子程序地址的2字節(jié)偏移地址 CS←邏輯地址之段地址或子程序地址的2字節(jié)段地址說明: 在堆棧中先壓入CS,再壓入IP?!纠?CALLproc3 ;

CALL1000H:2000H ;CS←1000H,IP←2000H IPCSXXXXXXXXSPXXXXSP第3章_5控制轉(zhuǎn)移⑤段間間接調(diào)用(存儲器間接):是絕對調(diào)用,子程序地址在存儲器中占4個字節(jié)(2字節(jié)IP,2字節(jié)CS)。格式: CALLDWORDPTR[mem]操作: SP←SP-2 [SP]←CS SP←SP-2 [SP]←IP IP←[mem]16 CS←[mem+2]16說明: 在堆棧中先壓入CS,再壓入IP。 段寄存器搭配關(guān)系同尋址方式,即BP同SS搭配,其它均同DS搭配。【例】 CALLproc3 ;

CALLDWORDPTR[2000H] ;IP←[2000H],CS←[2002H] IPCSXXXXXXXXSPXXXXSP第3章_5控制轉(zhuǎn)移3、子程序(過程)返回指令RET(RETurn)

格式: RET RETn

功能:無條件從子程序返回

說明:返回指令RET執(zhí)行與CALL指令相反的操作,RET指令安排在子程序中,實現(xiàn)從子程序返回到主程序斷點處繼續(xù)執(zhí)行。如果子程序被定義的是一個NEAR(段內(nèi))過程,則RET實現(xiàn)段內(nèi)返回,即恢復斷點時將棧頂?shù)淖謨?nèi)容彈出到IP,然后將SP+2→SP;如果子程序被定義的是一個FAR(段間)過程,則RET實現(xiàn)段間返回,即再次將棧頂?shù)淖謨?nèi)容彈出到CS,并再次將SP+2→SP。最后,檢查RET指令中是否帶有參數(shù)n(n可以是0~FFFFH中的任一偶數(shù)),如果沒有,操作結(jié)束;如果有,則把這個n加到SP中,以便丟棄一些在執(zhí)行CALL指令前入棧的參數(shù)。第3章_5控制轉(zhuǎn)移段內(nèi)(近過程)返回指令(與段內(nèi)調(diào)用相呼應):RET

;IP←(SP),SP←SP+2IPXXXXXXXXXXXXSPSPIP段間(遠過程)返回指令(與段間調(diào)用相呼應):RET

;IP←(SP),SP←SP+2,CS←(SP),SP←SP+2IPCSXXXXXXXXSPSPIPXXXXCS第3章_5控制轉(zhuǎn)移段間返回指令帶參數(shù):RETn;IP←(SP),SP←SP+2,CS←(SP),SP←SP+2,SP←SP+nIPCSXXXX...SPSPIPXXXXCSSPXXXXXXXXn個字節(jié)第3章_5控制轉(zhuǎn)移條件轉(zhuǎn)移指令(18條)4、條件轉(zhuǎn)移指令

格式:J條件標號

功能:若滿足條件,則程序轉(zhuǎn)移到標號地址去執(zhí)行,否則繼續(xù)執(zhí)行下一條指令

說明:條件轉(zhuǎn)移指令是以標志位的狀態(tài),或者是以標志位的邏輯運算結(jié)果作為轉(zhuǎn)移依據(jù)的。如果滿足轉(zhuǎn)移條件,則程序轉(zhuǎn)移到指定的目標地址,否則,繼續(xù)執(zhí)行下一條指令。

條件轉(zhuǎn)移都是短轉(zhuǎn)移,轉(zhuǎn)移距離只能在(-128~+127)內(nèi)完成。簡單轉(zhuǎn)移:條件是由標志寄存器中的標志的狀態(tài)決定的轉(zhuǎn)移。復雜轉(zhuǎn)移:條件是由有符號數(shù)和無符號數(shù)比較大小決定的轉(zhuǎn)移。A:Above

高于

N:Not

非、無B:Below

低于

O:Overflow 溢出C:Carry

進位

S:Sign

符號E:Equal

等于

Z:Zero

零G:Great

大于

PE:ParityEven

偶校驗L:Less

小于

PO:ParityOdd

奇校驗條件字母第3章_5控制轉(zhuǎn)移簡單轉(zhuǎn)移指令(10條)FRJC標號;

CF=1有進位,則轉(zhuǎn)移到標號所在地址JNC標號;CF=0無進位,則轉(zhuǎn)移到標號所在地址CFJZ/JE標號;

ZF=1結(jié)果為零,則轉(zhuǎn)移到標號所在地址JNZ/JNE標號;ZF=0結(jié)果為非零,則轉(zhuǎn)移到標號所在地址ZFJS標號;

SF=1結(jié)果為負,則轉(zhuǎn)移到標號所在地址JNS標號;SF=0結(jié)果非負,則轉(zhuǎn)移到標號所在地址SFJP標號;

PF=1結(jié)果1的個數(shù)為偶數(shù)個,則轉(zhuǎn)移JNP標號;PF=0結(jié)果1的個數(shù)為奇數(shù)個,則轉(zhuǎn)移PFJO標號;

OF=1結(jié)果溢出,則轉(zhuǎn)移到標號所在地址JNO標號;OF=0結(jié)果未溢出,則轉(zhuǎn)移到標號所在地址OF簡單轉(zhuǎn)移:條件是由標志寄存器中的標志的狀態(tài)決定的轉(zhuǎn)移。第3章_5控制轉(zhuǎn)移復雜轉(zhuǎn)移指令(8條)復雜轉(zhuǎn)移:條件是由有符號數(shù)和無符號數(shù)比較大小決定的轉(zhuǎn)移。無符號數(shù)轉(zhuǎn)移指令:比較兩個無符號數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移

JA 標號 ;兩數(shù)比較,高于則轉(zhuǎn)移(JNBE) JNA 標號 ;兩數(shù)比較,不高于則轉(zhuǎn)移(JBE) JB 標號 ;兩數(shù)比較,低于則轉(zhuǎn)移(JNAE) JNB 標號 ;兩數(shù)比較,不低于則轉(zhuǎn)移(JAE)有符號數(shù)轉(zhuǎn)移指令:比較兩個有符號數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移

JG 標號 ;兩數(shù)比較,大于則轉(zhuǎn)移(JNLE) JNG 標號 ;兩數(shù)比較,不大于則轉(zhuǎn)移(JLE) JL 標號 ;兩數(shù)比較,小于則轉(zhuǎn)移(JNGE) JNL 標號 ;兩數(shù)比較,不小于則轉(zhuǎn)移(JGE)第3章_5控制轉(zhuǎn)移循環(huán)控制指令(4條)循環(huán)控制指令用來控制程序段循環(huán)執(zhí)行的次數(shù),循環(huán)次數(shù)必須放在CX寄存器中循環(huán)控制指令是段內(nèi)短距離相對轉(zhuǎn)移指令,轉(zhuǎn)移距離為-128~+1275、循環(huán)指令LOOP

格式:LOOP標號

功能:將CX←CX-1,若CX≠0則轉(zhuǎn)到標號地址去執(zhí)行,否則執(zhí)行下一條指令

說明:LOOP指令相當于下面兩條指令的組合:

DEC CX JNZ 標號 但LOOP指令不影響標志位。 LOOP指令可以控制程序段無條件循環(huán)執(zhí)行CX指定的次數(shù),通常放在循環(huán)體末尾。

MOV

CX,100

;指定循環(huán)100次AGAIN: ∶

;循環(huán)體入口

;循環(huán)體

LOOP

AGAIN

;CX←CX-1,若CX≠0則轉(zhuǎn)到AGAIN

;循環(huán)結(jié)束第3章_5控制轉(zhuǎn)移6、循環(huán)指令LOOPZ/LOOPE

格式:LOOPZ/LOOPE標號

功能:若ZF=1且CX-1→CX≠0則轉(zhuǎn)到標號地址去執(zhí)行,否則執(zhí)行LOOPE后面的指令

說明:LOOPE指令需要同時滿足兩個條件才進行循環(huán)轉(zhuǎn)移。注意指令中檢測的ZF是前面指令影響的結(jié)果,不是本指令CX-1的結(jié)果 LOOPE指令常用于在一個數(shù)據(jù)區(qū)中尋找內(nèi)容與規(guī)定字符不相同的單元。第3章_5控制轉(zhuǎn)移 SUB DI,BX INC DI MOV CX,DI ;字節(jié)數(shù)即循環(huán)次數(shù)送CX DEC BXNEXT: INC BX CMP BYTEPTR[BX],0 ;與0相比較 LOOPE NEXT ;若ZF=1且CX-1→CX≠0則循環(huán)轉(zhuǎn)到NEXT JNE FOUND ;若ZF=0,表示找到非0字節(jié),轉(zhuǎn)FOUND處理 ∶ ;ZF=1,未找到,作未找到處理FOUND:∶【例】要在某存儲區(qū)中查找第一個非0字節(jié),可用以下程序?qū)崿F(xiàn),假定該存儲區(qū)首地址在BX中,末地址在DI中。第3章_5控制轉(zhuǎn)移7、循環(huán)指令LOOPNZ/LOOPNE

格式:LOOPNZ/LOOPNE標號

功能:若ZF=0且CX-1→CX≠0則轉(zhuǎn)到標號地址去執(zhí)行,否則執(zhí)行LOOPNE后面的指令

說明:該指令與LOOPZ指令僅ZF條件標志不同。 LOOPNE指令常用于在一個數(shù)據(jù)區(qū)中尋找內(nèi)容與規(guī)定字符相同的單元。第3章_5控制轉(zhuǎn)移8、CX是0則轉(zhuǎn)移指令JCXZ

格式:JCXZ標號

功能:若CX=0則轉(zhuǎn)到標號地址去執(zhí)行,否則執(zhí)行JCXZ后面的指令

說明:JCXZ指令與LOOP指令相比,都是根據(jù)CX的內(nèi)容決定是否轉(zhuǎn)移,但不同點是JCXZ指令不包含CX減1操作,另外轉(zhuǎn)移條件是CX=0,而不是CX≠0。相當于: CMP CX,0 JZ 標號第3章_5控制轉(zhuǎn)移中斷指令(4條)中斷指令可以引起CPU中斷,這種由指令引起的中斷稱為軟中斷中斷指令與過程調(diào)用指令有些類似,都是將斷點地址先入棧,然后轉(zhuǎn)移到子程序過程調(diào)用可以是NEAR或FAR,能直接或間接調(diào)用,而中斷只能利用存儲器間接轉(zhuǎn)移到它的服務程序,服務程序的入口地址從中斷向量表獲得過程調(diào)用只保護斷點地址進棧,而中斷指令還要保護標志寄存器進棧第3章_5

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論