《程序轉(zhuǎn)移指令ok》PPT課件.ppt_第1頁
《程序轉(zhuǎn)移指令ok》PPT課件.ppt_第2頁
《程序轉(zhuǎn)移指令ok》PPT課件.ppt_第3頁
《程序轉(zhuǎn)移指令ok》PPT課件.ppt_第4頁
《程序轉(zhuǎn)移指令ok》PPT課件.ppt_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、控制轉(zhuǎn)移類指令,用于改變程序中指令執(zhí)行路徑 程序轉(zhuǎn)移指令 循環(huán)指令 子程序調(diào)用指令,兩種不同類型 無條件轉(zhuǎn)移:指令執(zhí)行與狀態(tài)無關(guān),指令將改變程序執(zhí)行的順序。 條件跳轉(zhuǎn):指令的執(zhí)行要視指定的條件是否滿足,如條件滿足則轉(zhuǎn)移發(fā)生,否則順序執(zhí)行下一條指令,一般根據(jù)執(zhí)行上一指令后標志寄存器的狀態(tài)而決定是否轉(zhuǎn)移,程序轉(zhuǎn)移指令,無條件轉(zhuǎn)移指令,JMP OP 段內(nèi)直接轉(zhuǎn)移 段內(nèi)間接轉(zhuǎn)移 段間直接轉(zhuǎn)移 段間間接轉(zhuǎn)移,無條件轉(zhuǎn)移指令,段內(nèi)直接轉(zhuǎn)移,當(dāng)跳轉(zhuǎn)的范圍在128 +127時,稱為段內(nèi)直接短轉(zhuǎn)移。 格式:JMP SHORT OPR 當(dāng)跳轉(zhuǎn)的范圍超過一個字節(jié)所表達的有符號數(shù)范圍,但跳轉(zhuǎn)目的標號仍在同一段內(nèi),稱為

2、段內(nèi)直接近轉(zhuǎn)移。 格式:JMP NEAR PTR OPR (IP)+disp(IP),段內(nèi)間接轉(zhuǎn)移,轉(zhuǎn)移指令的操作數(shù)是16位的通用寄存器或存儲器操作數(shù),轉(zhuǎn)移指令的目的地址為: JMP WORD PTR OPR (EA) (IP) , EA由OPR的尋址方式確定,可使用除立即數(shù)方式以外的任一種尋址方式,1)JMP BX BX的內(nèi)容將直接加載指令指針I(yè)P。 2)JMP WORD PTRBX+DI 該指令的操作數(shù)有效地址: EA=(BX)+(DI) 指令指針I(yè)P為: IPDS:BX+DI,段間直接轉(zhuǎn)移,段間轉(zhuǎn)移是指轉(zhuǎn)移的目的地址是屬于另一個代碼段,因而在發(fā)生跳轉(zhuǎn)時,CS和IP需要一起更改,指令轉(zhuǎn)移標

3、號的屬性為遠標號。 例如: JMP FAR PTR LABEL_NAME,段間間接轉(zhuǎn)移,段間間接轉(zhuǎn)移的操作數(shù)為32位存儲器操作數(shù),存儲器中的第一個字加載IP,第二字加載CS。 例如: JMP DWORD PTR BX+SI JMP ALPHA BP+DI,條件轉(zhuǎn)移指令,簡單條件轉(zhuǎn)移指令 無符號數(shù)條件轉(zhuǎn)移指令 有符號數(shù)條件轉(zhuǎn)移指令 它們都有通用的語句格式和功能。 語句格式: 標號: 操作符 短標號 功能: 如果條件滿足,則(IP)位移量IP。,Part I JMP AA, Part II,AA Part III,條件跳轉(zhuǎn)指令,條件不滿足時執(zhí)行指令,條件滿足時 執(zhí)行指令,條件滿足?,否,是,助記符

4、 意義 測試條件 JE/JZ 等于 (ZF)=1 JNE/JNZ 不等于 (ZF)=0 JC 有進位或有借位 (CF)=1 JNC 無進位或無借位 (CF)=0 JO 有溢出 (OF)=1 JNO 無溢出 (OF)=0 JP/JPE 奇偶位為1/偶 (PF)=1 JNP/JPO 奇偶位為0/奇 (PF)=0 JS 為負 (SF)=1 JNS 為正 (SF)=0 JCXZ CX內(nèi)容為0 (CX)=0,簡單條件轉(zhuǎn)移指令,無符號數(shù)條件轉(zhuǎn)移指令,助記符 意義 測試條件 JA/JNBE 大于或不小于等于 (CF)+(ZF)=0 JAE/JNB 大于等于或不小于 (CF)=0 JB/JNAE 小于或不大于

5、等于 (CF)=1 JBE/JNA 小于等于或不大于 (CF)+(ZF)=1,【例】比較無符號數(shù)大小,將較大的數(shù)存放AX寄存器。,CMPAX, BX ;(AX)(BX) JNBNEXT ;若AX=BX,轉(zhuǎn)移到NEXT XCHGAX,BX ;若AXBX,交換 NEXT:,有符號數(shù)條件轉(zhuǎn)移指令,助記符 意義 測試條件 JG/JNLE 大于或不小于等于 (SF)(OF)+(ZF)=0 JGE/JNL 大于等于或不小于 (SF)(OF)=0 JL/JNGE 小于或不大于等于 (SF)(OF)=1 JLE/JNG 小于等于或不大于 (SF)(OF)+(ZF)=1,【例】比較有符號數(shù)大小,將較大的數(shù)存放在

6、AX寄存器。,CMPAX,BX;(AX)(BX) JNLNEXT ;若AX=BX,轉(zhuǎn)移到NEXT XCHGAX,BX;若AXBX,交換 NEXT:,【例jump】在存儲器中有一個首地址為array的N字數(shù)組,要求測試其中正數(shù)、0、負數(shù)的個數(shù),正數(shù)的個數(shù)放在DI中,0的個數(shù)放在SI中,并根據(jù)N(DI)(SI)求得負數(shù)的個數(shù)放在AX中,如果有負數(shù)則轉(zhuǎn)NEGVAL中去執(zhí)行。,data segment array dw 0ef12h,1234h,3456h,7891h,4532h,0h,0eeadh,8876h,7765h,4567h N dw 10 mess db have negtive$ dat

7、a ends code segment assume cs:code,ds:data,es:data, main proc far mov ax,data mov ds,ax mov es,ax,mov bx,0 mov si,bx mov di,bx mov cx,N again:mov ax,arraybx cmp ax,0 jle lessoreq inc di jmp next lessoreq:jl next inc si,next:inc bx inc bx dec cx jnz again mov ax,n sub ax,si sub ax,di jz skip,negval:

8、lea dx,mess mov ah,09h int 21h mov ah,01h int 21h skip: mov ah,4ch int 21h main endp code ends end main,循環(huán)指令,共同特點: 指令用CX作為記數(shù)器,重復(fù)控制指令每執(zhí)行一次CX減1,用CX是否減至為零來判斷循環(huán)轉(zhuǎn)移; 指令長度為2字節(jié),第一字節(jié)是指令操作碼,第二字節(jié)是相對偏移量,均屬相對短轉(zhuǎn)移。 循環(huán)指令LOOP 相等/為零循環(huán)指令LOOPE 不相等/不為零循環(huán)指令LOOPNE,LOOP,LOOP 短標號 功能: (CX)(CX)-1, 測試CX的內(nèi)容是否為0, 若(CX)0則轉(zhuǎn)移至目標操作數(shù)

9、, 否則順序執(zhí)行下一條指令。 它等效于以下兩條指令組合: DEC CX JNE 短標號,【例310】 將數(shù)據(jù)段中數(shù)據(jù)長度為COUNT的數(shù)據(jù)塊BLOCK的負數(shù)分揀出來,存放在MINUS為首地址的緩存區(qū)中,并統(tǒng)計其負數(shù)的個數(shù)存放在MNUM變量中。,LOOP,DATA SEGMENT BLOCK DB 1AH,0CH,89H,97H,04,32H,75H,4BH COUNT EQU $-BLOCK MINUS DB COUNT DUP(?) MNUM DB 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA MAIN PROC FAR MO

10、V AX,DATA MOV DS,AX MOV ES,AX LEA SI,BLOCK LEA DI,MINUS,MOV CX,COUNT AGAIN: MOV AL,SI OR AL,AL JNS NEXT MOV DI,AL INC MNUM INC DI NEXT: INC SI LOOP AGAIN MOV Ah,4CH INT 21H MAIN ENDP CODE ENDS END MAIN,相等/為零循環(huán)指令LOOPE,語句格式: LOOPE 短標號 LOOPZ 短標號 功能: (CX)1 0且ZF=1, 則程序轉(zhuǎn)移(循環(huán)); 否則,順序執(zhí)行。 注意:狀態(tài)標志ZF是LOOPZ/LOO

11、PE之前的指令執(zhí)行時所生成的ZF標志,CX寄存器減1并不影響ZF的狀態(tài)。,例311在一數(shù)據(jù)緩沖區(qū)中尋找非零元素的起始地址,設(shè)緩沖區(qū)BUFFER的數(shù)據(jù)個數(shù)為COUNT。,DATA SEGMENT buffer DB 0H,00H,89H,97H,04,32H,75H,4BH COUNT EQU $-BUFFER DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR MOV AX,DATA MOV DS,AX,LEA SI,BUFFER MOV CX,COUNT AGAIN: MOV AL,SI INC SI OR AL,AL LO

12、OPZ again OR CL,30H MOV DL,CL MOV AH,2 INT 21H,MOV AH,1 INT 21H MOV Ah,4CH INT 21H MAIN ENDP CODE ENDS END MAIN,不相等/不為零循環(huán)指令,語句格式: LOOPNE 短標號 LOOPNZ 短標號 功能: (CX)10, 則程序轉(zhuǎn)移(循環(huán)); 否則,順序執(zhí)行。 除轉(zhuǎn)移條件需(ZF)=0以外,其余同LOOPZ。,子程序調(diào)用CALL,子程序是完成某一功能的特殊程序段,每當(dāng)程序需要這一功能時,可以調(diào)用該子程序,而不必重復(fù)書寫這個代碼段,這樣可以主程序簡明,占用較少的內(nèi)存空間。,第一條指令,返回,

13、子程序A,調(diào)用子程序A,下一條指令,下一條指令,調(diào)用子程序A,主程序,子程序調(diào)用過程,子程序調(diào)用指令,1子程序調(diào)用指令CALL (1)段內(nèi)直接調(diào)用 (2)段內(nèi)間接調(diào)用 (3)段間直接調(diào)用 (4)段間間接調(diào)用 2返回指令RET (1)語句格式: RET 或RET n (2)語句格式: RETF 或RETF n,段內(nèi)直接調(diào)用,段內(nèi)調(diào)用是指被調(diào)用的子程序與調(diào)用主程序同處在一個代碼段中,因而段寄存器CS保持不變,在調(diào)用時只需改變指令指針I(yè)P,屬于NEAR轉(zhuǎn)移。 指令格式: CALL NEAR_PROC 其中NEAR_PROC可以為過程名或標號, 指令執(zhí)行過程如下: 堆棧指針 (SP)(SP)-2 (S

14、P+1):(SP)(IP) (IP)(IP)+disp16,段內(nèi)間接調(diào)用,指令格式: CALL OP OP可以是通用寄存器或字存儲器操作數(shù) 指令執(zhí)行過程如下: 堆棧指針 (SP)(SP)-2 (SP+1):(SP)(IP) (IP)(EA) 例:CALL BX CALL MEM_WORD CALL WORD PTRBX,段間調(diào)用的CALL指令,段間調(diào)用是指被調(diào)用的子程序與調(diào)用的主程序處于兩個不同的代碼段內(nèi),因而當(dāng)程序進行調(diào)用轉(zhuǎn)移時,CS和IP需一起變更。 根據(jù)操作數(shù)的類型可以將段間調(diào)用指令分成段間直接調(diào)用和段間間接調(diào)用。,段間直接調(diào)用,指令格式:CALL FAR_PROC 其中FAR_PROC

15、可以為遠過程名或遠標號。 指令執(zhí)行的過程如下: (SP)(SP)-2 (SP+1):(SP)(CS) (CS)SEG FAR_PROC (SP)(SP)2 (SP+1):(SP)(IP) (IP)OFFSET FAR_PROC,段間間接調(diào)用,指令格式:CALL MEMORY32 概念:段間間接調(diào)用的操作數(shù)應(yīng)為32位存儲器操作數(shù)。指令執(zhí)行過程與上述段間直接調(diào)用類似,所不同的是使用存儲器中第一個字加載IP,使用存儲器中的第二個字加載CS。 如: CALL DWORD PTRBX,子程序返回指令,指令格式: RET 或 RET n RETF 或 RETF n 其中RET為近過程的結(jié)束返回指令, RE

16、TF為遠過程的結(jié)束返回指令, 帶參數(shù)n的RET或RETF指令可將傳遞的參數(shù)彈出作廢。,子程序返回指令,RET n指令執(zhí)行過程如下: (IP)(SP+1):(SP) (SP)(SP)+2 (SP)(SP)+n RETF n指令執(zhí)行過程如下: (IP)(SP+1):(SP) (SP)(SP)+2 (CS)(SP+1):(SP) (SP)(SP)+2 (SP)(SP)+n,DATA SEGMENT ASCVAL DB 4 DUP( ),$ BINVAL DW 045AH DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DATA,【例312】將二進

17、制數(shù)045AH轉(zhuǎn)換為四位十進制數(shù)并用ASCII表示。,MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,ASCVAL+3 MOV CX,10 MOV AX,BINVAL CALL B10CONV MOV AH,9 ; DISPLAY ASCII VALUE LEA DX,ASCVAL INT 21H MOV AX,4C00H INT 21H MAIN ENDP,B10CONV PROC NEAR B20: CMP AX,CX JB B30 XOR DX,DX DIV CX OR DL, 30H MOV SI,DL DEC SI JMP B

18、20 B30: OR AL, 30H MOV SI, AL RET B10CONV ENDP CODE ENDS END MAIN,處理機控制指令,三類12條,主要用于設(shè)置和清除CPU的狀態(tài)標志位,使CPU與協(xié)處理器同步或執(zhí)行空操作。 狀態(tài)標志位操作指令 外部同步指令,狀態(tài)標志位操作指令,控制進位標志位CF 清進位 CLC ;CF0 設(shè)置進位 STC ;CF1 控制方向標志位DF 清數(shù)據(jù)方向標志位 CLD ;DF0 設(shè)置數(shù)據(jù)方向標志位 STD ;DF1 控制中斷允許標志位 禁止可屏蔽中斷請求 CLI ;IF0 允許可屏蔽中斷請求 STI ;IF1,外部同步指令,80386CPU具有多處理機的特征,為使硬件充分發(fā)揮功能,在軟件上設(shè)置了下述幾條指令,來實現(xiàn)多處理機系統(tǒng)中的同步功能,以便共享系統(tǒng)資源。 HLT WAIT ESC LOCK NOP,HLT停機指令

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論