計算機軟硬件設(shè)計與實踐:35程序轉(zhuǎn)移指令_第1頁
計算機軟硬件設(shè)計與實踐:35程序轉(zhuǎn)移指令_第2頁
計算機軟硬件設(shè)計與實踐:35程序轉(zhuǎn)移指令_第3頁
計算機軟硬件設(shè)計與實踐:35程序轉(zhuǎn)移指令_第4頁
計算機軟硬件設(shè)計與實踐:35程序轉(zhuǎn)移指令_第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)移JMP 標號(IP)位移量IP段內(nèi)間接轉(zhuǎn)移JMP OPD(OPD) IP段間直接轉(zhuǎn)移JMP 標號標號的偏移地址IP,標號所在代碼段段首址CS段間間接轉(zhuǎn)移JMP OPD(OPD)IP(OPD

2、2)CS段內(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),稱為段內(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

3、)+(DI)指令指針I(yè)P為:IPDS:BX+DI段間直接轉(zhuǎn)移段間轉(zhuǎn)移是指轉(zhuǎn)移的目的地址是屬于另一個代碼段,因而在發(fā)生跳轉(zhuǎn)時,CS和IP需要一起更改,指令轉(zhuǎn)移標號的屬性為遠標號。例如: JMP FAR PTR LABEL_NAME段間間接轉(zhuǎn)移段間間接轉(zhuǎn)移的操作數(shù)為32位存儲器操作數(shù),存儲器中的第一個字加載IP,第二字加載CS。例如:JMP DWORD PTR BX+SIJMP ALPHA BP+DI條件轉(zhuǎn)移指令簡單條件轉(zhuǎn)移指令無符號數(shù)條件轉(zhuǎn)移指令有符號數(shù)條件轉(zhuǎn)移指令 它們都有通用的語句格式和功能。語句格式: 標號: 操作符 短標號功能:如果條件滿足,則(IP)位移量IP。Part IJMP AA

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

5、JAE/JNB 大于等于或不小于 (CF)=0JB/JNAE 小于或不大于等于 (CF)=1JBE/JNA 小于等于或不大于 (CF)+(ZF)=1 【例】比較無符號數(shù)大小,將較大的數(shù)存放AX寄存器。CMPAX, BX ;(AX)(BX)JNBNEXT ;若AX=BX,轉(zhuǎn)移到NEXTXCHGAX,BX ;若AX=BX,轉(zhuǎn)移到NEXTXCHGAX,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í)行

6、。data segmentarray dw 0ef12h,1234h,3456h,7891h,4532h,0h,0eeadh,8876h,7765h,4567hN dw 10mess db have negtive$data endscode segmentassume cs:code,ds:data,es:data, main proc far mov ax,data mov ds,axmov es,axmov bx,0mov si,bxmov di,bxmov cx,Nagain:mov ax,arraybxcmp ax,0jle lessoreqinc dijmp nextlessore

7、q:jl nextinc sinext:inc bxinc bxdec cxjnz againmov ax,nsub ax,sisub ax,dijz skipnegval: lea dx,messmov ah,09hint 21hmov ah,01hint 21hskip: mov ah,4ch int 21hmain endpcode endsend 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不相

8、等/不為零循環(huán)指令LOOPNE LOOPLOOP 短標號功能:(CX)(CX)-1,測試CX的內(nèi)容是否為0,若(CX)0則轉(zhuǎn)移至目標操作數(shù),否則順序執(zhí)行下一條指令。它等效于以下兩條指令組合: DEC CX JNE 短標號【例310】將數(shù)據(jù)段中數(shù)據(jù)長度為COUNT的數(shù)據(jù)塊BLOCK的負數(shù)分揀出來,存放在MINUS為首地址的緩存區(qū)中,并統(tǒng)計其負數(shù)的個數(shù)存放在MNUM變量中。LOOPDATA SEGMENTBLOCK DB 1AH,0CH,89H,97H,04,32H,75H,4BHCOUNT EQU $-BLOCKMINUS DB COUNT DUP(?)MNUM DB 0DATA ENDSCOD

9、E SEGMENTASSUME CS:CODE,DS:DATA,ES:DATAMAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,BLOCK LEA DI,MINUS MOV CX,COUNTAGAIN: MOV AL,SI OR AL,AL JNS NEXT MOV DI,AL INC MNUM INC DINEXT: INC SI LOOP AGAIN MOV Ah,4CH INT 21HMAIN ENDPCODE ENDS END MAIN相等/為零循環(huán)指令LOOPE語句格式: LOOPE 短標號 LOOPZ 短標號功能: (CX)1

10、 0且ZF=1, 則程序轉(zhuǎn)移(循環(huán)); 否則,順序執(zhí)行。注意:狀態(tài)標志ZF是LOOPZ/LOOPE之前的指令執(zhí)行時所生成的ZF標志,CX寄存器減1并不影響ZF的狀態(tài)。例311在一數(shù)據(jù)緩沖區(qū)中尋找非零元素的起始地址,設(shè)緩沖區(qū)BUFFER的數(shù)據(jù)個數(shù)為COUNT。 DATA SEGMENTbuffer DB 0H,00H,89H,97H,04,32H,75H,4BHCOUNT EQU $-BUFFERDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC FAR MOV AX,DATA MOV DS,AX LEA SI,BUFFERMOV CX,CO

11、UNTAGAIN: MOV AL,SI INC SI OR AL,AL LOOPZ againOR CL,30HMOV DL,CLMOV AH,2INT 21HMOV AH,1INT 21H MOV Ah,4CH INT 21HMAIN ENDPCODE 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ù)書寫這個代碼段,這樣可以主程

12、序簡明,占用較少的內(nèi)存空間。 第一條指令返回子程序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

13、(SP+1):(SP)(IP) (IP)(IP)+disp16段內(nèi)間接調(diào)用指令格式: CALL OPOP可以是通用寄存器或字存儲器操作數(shù)指令執(zhí)行過程如下:堆棧指針 (SP)(SP)-2 (SP+1):(SP)(IP) (IP)(EA)例:CALL BXCALL MEM_WORDCALL 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可以為遠過程名或遠標號

14、。指令執(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é)束返回指令,RETF為遠過程的結(jié)束返回指令,帶參數(shù)n的RET

15、或RETF指令可將傳遞的參數(shù)彈出作廢。子程序返回指令RET n指令執(zhí)行過程如下:(IP)(SP+1):(SP)(SP)(SP)+2(SP)(SP)+nRETF 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】將二進制數(shù)045AH轉(zhuǎn)換為四位十進制數(shù)并用ASCII表示。MAIN PROC

16、 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 NEARB20: CMP AX,CX JB B30 XOR DX,DX DIV CX OR DL, 30H MOV SI,DL DEC SI JMP B20 B30: OR AL, 30H MOV SI, AL RETB10C

17、ONV 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)資源。HL

18、TWAITESCLOCKNOPHLT停機指令功能:使CPU進入暫停狀態(tài),只有下列三種情況之一發(fā)生時,CPU才退出暫停狀態(tài):主復(fù)位非屏蔽中斷NMI請求INTR端有可屏蔽中斷請求且IF=1;WAIT等待指令功能:使CPU與協(xié)處理器同步。該指令檢測CPU的TEST端電平,若電平為邏輯低,則退出等待,執(zhí)行下一條指令,否則將繼續(xù)等待。CPU每隔5個時鐘周期對TEST進行一次測試,直至TEST變?yōu)榈碗娖?。用途:一是在協(xié)處理器指令前,由匯編程序自動插入WAIT指令,這樣在協(xié)處理器指令出指令隊列前,首先是WAIT指令出指令隊列,CPU執(zhí)行WAIT指令。使主CPU的程序在關(guān)鍵點上與協(xié)處理器程序同步。例如主處理器需等待協(xié)處理器某一數(shù)據(jù)處理完,方可執(zhí)行下一條指令,此種情況下編程

溫馨提示

  • 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

提交評論