微機原理與接口技術3-9控制轉移指令_第1頁
微機原理與接口技術3-9控制轉移指令_第2頁
微機原理與接口技術3-9控制轉移指令_第3頁
微機原理與接口技術3-9控制轉移指令_第4頁
微機原理與接口技術3-9控制轉移指令_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

四控制轉移指令轉移類指令循環(huán)控制指令過程調用和返回指令中斷控制類指令1轉移指令1)無條件轉移指令無條件轉移到目標地址,執(zhí)行新的指令。2)有條件轉移指令在具備一定條件的情況下轉移到目標地址。轉移指令的實質:改變IP(或CS)的內容。所有轉移指令不會影響標志位。分為無條件轉移和條件轉移兩種。(1)無條件轉移指令JMP①段內直接轉移(相對轉移)

轉移的目標地址由指令直接給出。指令中直接給出的目標地址實際上是一個相對于IP的位移量。

位移量轉移范圍匯編語言中格式

8位

-128~+127

JMPSHORT

LABLE 16位

-32768~+32767JMPNEARPTR

LABLE例: JMP 0120H ;直接轉向0120H JMP SHORTLPI;轉向LPI

JMP

NEARPTRBBB ;轉向BBB由于是段內轉移,故轉移后CS內容保持不變

轉移的目標地址(偏移量)由寄存器或存儲單元的內容給出。

例:JMPSI

若指令執(zhí)行前(SI)=1200H,則指令執(zhí)行后,(IP)=1200H,于是轉向代碼段的偏移地址1200H處執(zhí)行。②段內間接轉移注意:目標地址以段內偏移的形式給出,而不是相對于IP的位移量,所以它是一個16位的操作數。例:JMP[BX+DI]設指令執(zhí)行前:(DS)=3000H,(BX)=1300H,(DI)=1200H,(32500H)=50H,(32501H)=23H;則指令執(zhí)行后:(IP)=2350H在匯編語言中,段內間接尋址通常寫成:

JMP WORDPTR[BX+DI]

表示所取得的目標地址是一個字(16位偏移地址)。②段內間接轉移

在指令中直接給出要轉移到的目的段地址和偏移地址。

例:JMP 2000:1000H

執(zhí)行時,(IP)←1000H,(CS)←2000H③段間直接轉移注:直接地址為符號地址時,段間直接轉移指令中的符號地址前應加操作符FARPTR。

例:JMP FARPTR

far_label

其中的far_label為遠類型的標號。④段間間接轉移

轉移的目的地址(段和偏移)在兩個相鄰的字存儲單元中。例如: JMPDWORDPTR[SI]

設指令執(zhí)行前:(DS)=4000H,(SI)=1212H,(41212H)=1000H,(41214H)=4A00H則指令執(zhí)行后:(IP)=1000H,(CS)=4A00H。(2)條件轉移指令Jcc格式為:

JccLabel ;Label是轉移的目標地址Jcc指令包括下列3類:(1)測試單個標志位。(2)用于帶符號數比較。(3)用于無符號數比較。條件轉移指令只能是段內直接轉移,且指令的轉移范圍為指令所在位置的-128~+127字節(jié)。

JC ;CF=1,則轉移

JNC ;CF=0,則轉移

JE/JZ;結果為零(ZF=1),則轉移

JNZ/JNE;結果不為零(ZF=0),則轉移

JP/JPE;奇偶標志PF=1(偶),則轉移

JNP/JPO

;奇偶標志PF=0(奇),則轉移

JS;符號標志SF=1,則轉移

JNS;符號標志SF=0,則轉移

JO ;溢出標志OF=1,則轉移

JNO ;溢出標志OF=0,則轉移根據CX內容來決定是否轉移的轉移指令

JCXZlabel;若(CX)=0,則轉移到label處開始執(zhí)行。i根據單個標志位設置的條件轉移指令ii判斷無符號數的大小JA/JNBE

;高于/不低于且不等于,則轉移(A>B) 條件為:CF=0且ZF=0JAE/JNB

;高于或等于/不低于,則轉移(A≥B) 條件為:CF=0或ZF=1JB/JNAE

;低于/不高于且不等于,則轉移(A<B) 條件為:CF=1且ZF=0JBE/JNA

;低于或等于/不高于,則轉移(AB) 條件為:CF=1或ZF=1iii判斷有符號數的大小JG/JNLE

;大于/不小于且不等于,則轉移(A>B) 條件為:(SF⊕OF=0)且ZF=0JGE/JNL

;大于或等于/不小于,則轉移(A≥B) 條件為:(SF⊕OF=0)或ZF=1JL/JNGE

;小于/不大于且不等于,則轉移(A<B) 條件為:(SF⊕OF=1)且ZF=0JLE/JNG

;小于或等于/不大于,則轉移(A≤B) 條件為:(SF⊕OF=1)或ZF=1例:將AX與BX中兩無符號數的較大數存WMAX單元。CMPAX,BX;比較AX和BX

JAEnext ;若AX≥BX,轉移

XCHGAX,BX;AX<BX,交換next: MOVWMAX,AX;存較大數如果AX和BX存放的是有符號數,則條件轉移指令應采用JGE指令例:地址為DATA的存儲單元中存放著一個帶符號的16位數,若該數為正,則CX=1;若該數為負,則CX=FFFFH;若該數為0,則CX=0。MOVAX,DATAANDAX,AXJEZEROJNSPLUSMOVCX,0FFFFHJMPDONEZERO:MOVCX,0JMPDONEPLUS:MOVCX,1DONE:HLT2循環(huán)控制指令用在循環(huán)程序中以確定是否要繼續(xù)循環(huán)。循環(huán)次數通常置于CX中。轉移的目標應在距離本指令-128~+127的范圍之內。循環(huán)控制指令不影響標志位。格式:LOOPlabel操作:(CX)-1→CX;若(CX)≠0,則轉至label處執(zhí)行;否則退出循環(huán),執(zhí)行LOOP后面的指令。

LOOP指令與下面的指令段等價:

DECCX JNZlabel(1)循環(huán)轉移指令LOOP(2)LOOPZ(LOOPE)格式:LOOPZlabel操作:(CX)-1→CX;若(CX)≠0且ZF=1,則轉至label處繼續(xù)循環(huán);否則退出循環(huán),執(zhí)行LOOP后面的指令。(3)LOOPNZ(LOOPNE)格式:LOOPNZlabel操作:(CX)-1→CX;若(CX)≠0且ZF=0,則轉至label處繼續(xù)循環(huán);否則退出循環(huán),執(zhí)行LOOP后面的指令。3過程調用和返回指令過程(子程序):

一段具有特定功能的,供其它程序調用的公用程序。特點調用子程序時,IP(CS)的內容被壓入堆棧棧頂。從子程序返回時,棧頂的內容又被彈出到IP(CS)。子程序執(zhí)行結束后一般均要返回調用程序。一次定義,可多次調用;可帶參數調用,以完成不同的功能。(1)調用指令CALL一般格式:CALL

sub;sub為子程序的入口。根據子程序入口的尋址方式,子程序調用有四類。①段內直接調用

子程序的偏移地址直接由CALL指令給出。格式:CALLNEAR_PROC

CALL執(zhí)行時,它首先將IP內容壓棧,然后把指令中給出的位移量加到IP上。

②段內間接調用子程序的偏移地址在寄存器或存儲器中。格式:CALL

mem16/reg16 CALL執(zhí)行時,它首先將IP內容壓棧,然后把指定的寄存器/存儲器的內容送入IP。例:

CALLAX

;調用地址由AX給出

CALLWORDPTR[SI]

;調用地址由存儲器給出.例:對于CALLWORDPTR[SI]這條指令若:(DS)

=

8000H,(SI)

=

1200H則指令操作圖示如下。CALLIPHIPL代碼段數據段81200H81201H③段間直接調用

子程序的段地址和偏移地址直接由CALL指令給出。格式:CALLFAR_PROC;FAR_PROC為遠過程的地址指令的操作:((SP)-1,(SP)-2)←(CS);原CS壓棧 SP←(SP)-2

CS←新段地址

((SP)-1,(SP)-2)←(IP);原IP壓棧 SP←(SP)-2

IP←新偏移地址例:CALL 2000H:1000H④段間間接調用

子程序的段地址和偏移地址為存儲器的連續(xù)4個單元中的內容。格式:CALL

mem32指令的操作為:((SP)-1,(SP)-2)←(CS);原CS壓棧 SP←(SP)-2 CS←(mem32+2)

((SP)-1,(SP)-2)←(IP);原IP壓棧 SP←(SP)-2 IP←(mem32)例:CALLDWORDPTR[DI]

調用地址在[DI],[DI]+1,[DI]+2,[DI]+3四個存儲單元中。低字內容為偏移地址,高字內容為段地址。CALL代碼段數據段IPHIPLCSHCSL[DI][DI]+1[DI]+2[DI]+3CALLDWORDPTR

[DI]

(2)返回指令RET段內返回指令RET的操作為: IP←((SP)+1,(SP));棧頂內容彈出到IP SP←(SP)+2段間返回指令RET的操作為: IP←((SP)+1,(SP));棧頂內容彈出到IP SP←(SP)+2 CS←((SP)+1,(SP));棧頂內容彈出到CS SP←(SP)+2另有一種帶立即數返回指令:RETn 其中n為偶數,表示從棧頂彈出地址后另外丟棄的字節(jié)數。 例:RET4;返回后再丟棄棧頂的4個字節(jié)4中斷控制指令

8086/8088CPU在程序中允許安排一條中斷指令來引起一個中斷過程,這種中斷叫內部中斷,或叫軟中斷。中斷指令共有三條:

(1)INTn執(zhí)行類型n的中斷服務程序,N=0~255(2)INTO

執(zhí)行溢出中斷的中斷服務程序;

(3)IRET

從中斷服務程序返回調用程序。(1)INTn;n=0~255,為中斷類型號本指令的操作步驟為:①((SP)-1,(SP)-2)←(FLAGS),SP←(SP)-2

保護標志寄存器的內容②IF←0,TF←0

中斷服務程序中禁止外部INTR中斷和單步中斷③((SP)-1,(SP)-2)←(CS),SP←(SP)-2,CS←(n*4+2) 中斷服務程序的段地址送入CS。n*4為向量地址。該向量地址中的內容即為中斷服務程

溫馨提示

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

評論

0/150

提交評論