計算機硬件技術基礎第3章_第1頁
計算機硬件技術基礎第3章_第2頁
計算機硬件技術基礎第3章_第3頁
計算機硬件技術基礎第3章_第4頁
計算機硬件技術基礎第3章_第5頁
免費預覽已結束,剩余34頁可下載查看

下載本文檔

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

文檔簡介

1、13.3.5 程序控制指令控制轉移指令分為:轉移指令循環(huán)控制指令調用和返回指令中斷指令2轉移指令的實質:改變IP(或CS)的內容。所有轉移指令不會影響標志位。分為無條件轉移和條件轉移兩種。1.轉移指令3(1) 無條件轉移指令 - JMP本指令無條件轉移到指定的目標地址,以執(zhí)行從該地址開始的程序段。根據設置CS、IP的方法,JMP指令分成5種情況。 段內相對轉移: JMP SHORT disp 指令中給出的8位的位移量加到IP。CS保持不變。 段內直接轉移: JMP NEAR PTR disp 或 JMP disp 指令中給出的16位的位移量加到IP。CS保持不變。 段內間接轉移: JMP WO

2、RD PTR reg/mem reg/mem中的16位偏移地址送IP。CS保持不變。 段間直接轉移 JMP FAR PTR segment:offset 指令中給出的16位的段和16位的偏移地址送到CS和IP。 段間間接轉移 JMP DWORD PTR mem32 mem32中的16位的段和16位的偏移地址送到CS和IP。4轉移的目標地址由指令直接給出。指令中給出的目標地址實際上是一個相對于IP的位移量: 位移量 轉移范圍 匯編語言中格式 8位 -128+127 JMP SHORT OPRD 16位 -32768 JMP NEAR PTR OPRD例: JMPSHORT LP ;轉向LP JM

3、P0120H ;直接轉向0120H JMPNEAR PTR BBB;轉向BBB由于是段內轉移,故轉移后CS內容保持不變 段內相對轉移、段內直接轉移5段內間接轉移JMP WORD PTR reg/mem轉移的目標地址由寄存器或存儲單元的內容給出。 例1:JMP WORD PTR SI若(SI)=1200H,則指令執(zhí)行后,(IP)=1200H,于是轉向代碼段的偏移地址1200H處開始執(zhí)行。注意:目標地址以段內偏移的形式給出,而不是相對于IP的位移量,所以它是一個16位的操作數。6例2:JMP WORD PTR BX+DI設指令執(zhí)行前: (DS)=3000H,(BX)=1300H, (DI)=120

4、0H,(32500H)=2350H; 則指令執(zhí)行后:(IP)=(DS)*16+(BX)+(DI)=(32500H)=2350H在匯編語言中,段內間接尋址通常寫成:JMPWORD PTRBX+DI表示所取得的目標地址是一個字。7段間直接轉移JMP FAR PTR segment:offset在指令中直接給出要轉移到的目的段地址和偏移地址。 例:JMP2000H:1000H執(zhí)行時,(IP)1000H,(CS)2000H注:直接地址為符號地址時,段間直接轉移指令中的符號地址前應加操作符FAR PTR。 例:JMP FAR PTR far_label其中的far_label為遠類型的標號。8轉移的目的

5、地址(段和偏移)在兩個相鄰的字存儲單元中。例如:JMPDWORD PTRSI設指令執(zhí)行前:(DS)=4000H,(SI)=1212H, (41212H)=1000H,(41214H)=4A00H則指令執(zhí)行后:(IP)=1000H,(CS)=4A00H于是轉到4B000H處開始執(zhí)行指令。例中的DWORD PTR表示轉移地址是一個雙字。段間間接轉移JMP DWORD PTR mem32940001212+) 41212DSSI0010004A 4121241213412144121510004A00IPCS段間間接轉移操作示意圖1111111111101100JMP DWORD PTR SI的機器

6、碼DS:SI10條件轉移指令可實現程序的條件分支。條件轉移指令根據標志位的狀態(tài)來決定是否進行分支轉移。格式: JXX label;xx為條件名稱縮寫指令的轉移范圍為-128+127字節(jié)。主要的條件轉移指令參見p79p80。(2)條件轉移指令 - JXX11 根據單個標志位設置的條件轉移指令JZ或JE OPRD;結果為零(ZF=1)轉移JNZ或JNE OPRD;結果不為零(ZF=0)轉移JS OPRD;結果為負數(SF=1)轉移JNS OPRD;結果為正數(SF=0)轉移JP或JPE OPRD;結果低8位有偶數個1(PF=1)時 轉移JNP或JPO OPRD;結果低8位有奇數個1(PF=0)時

7、轉移JO OPRD;結果溢出(OF=1)轉移JNO OPRD;結果不溢出(OF=0)轉移JC OPRD;結果有進位或借位(CF=1)轉移JNC OPRD;結果無進位或無借位(CF=0)轉移12這類指令主要用來判斷兩個數的大小。一般指令序列為: CMP dist,src ;比較 Jxx label ;根據比較結果轉移 判斷無符號數的大小JA/JNBE OPRD;高于或不低于等于轉移JAE/JNA OPRD;高于等于或不低于轉移JB/JNAE OPRD;低于或不高于等于轉移JBE/JNA OPRD;低于等于或不高于轉移 根據組合條件設置的條件轉移指令13JG/JNLE OPRD;大于或不小于等于轉

8、移JGE/JNL OPRD;大于等于或不小于轉移JL/JNGE OPRD;小于或不大于等于轉移JLE/JNG OPRD;小于等于或不大于轉移 判斷有符號數的大小14根據CX內容來決定是否轉移的轉移指令 JCXZ label 若(CX)=0,則轉移到label處開始執(zhí)行。15條件轉移指令舉例:以十六進制數形式顯示BX中的內容。MOVBX, 1234HMOVCH, 4 ; CH做循環(huán)計數器ROT: MOVCL, 4; CL做移位計數器 ROLBX, CL; 將最高4位移到低4位 MOVAL, BL ANDAL, 0FH; 取出低4位 ADDAL, 30H; 轉換為ASCII碼 CMPAL, 39H

9、; 與 9 比較 JBE DISP; 若(AL)9, 則轉顯示 ADDAL, 7; 若(AL)9, 再加7轉為A-FDISP: MOVDL, AL; (DL)字符 MOVAH, 2 INT21H; 顯示輸出 DECCH; 4個十六進制數顯示完否? JNZROT; 沒有, 循環(huán) MOVDL, 48H; H MOVAH, 2 INT21H; 最后顯示H162. 過程調用和返回指令過程(子程序) 一段具有特定功能的,供其它程序調用的公用程序。特點調用子程序時,IP(CS)的內容被壓入堆棧棧頂。從子程序返回時,棧頂的內容又被彈出到IP(CS)。子程序執(zhí)行結束后一般均要返回調用程序。一次定義,多次調用;

10、可帶參數調用,以完成不同的功能。優(yōu)點 程序代碼短,結構清晰,便于編程、調試、修改和閱讀。 兩條相關指令: 子程序調用指令 CALL 子程序返回指令 RET17一般格式:CALL sub ;sub為子程序的入口根據子程序入口的尋址方式,子程序調用有四類。段內直接調用子程序的偏移地址直接由CALL指令給出。 格式:CALL near_proc CALL執(zhí)行時,它首先將IP內容壓棧,然后把指令中給出的位移量加到IP上。 注:匯編以后的調用地址是相對于CALL的下一條指令的位移量。例:CALL 0120H ;子程序偏移地址由指令給出(1)調用指令CALL18位移量由匯編程序在匯編時進行計算,如下例:

11、CS:0102CALL 0120H;3字節(jié) CS:0105 則位移量為: 0120-0105H=001BH于是CALL0120H的機器碼為E8 1B 00 CS:0102E8 CS:01031B CALL 0120H CS:010400 CS:0105 補 19子程序的偏移地址在寄存器或存儲器中。 格式:CALL mem16/reg16 CALL執(zhí)行時,它首先將IP內容壓棧,然后把指定的寄存器/存儲器的內容送入IP。 例: CALLBX ;子程序地址由BX給出 CALLWORD PTRSI ;子程序地址在存儲器中段內間接調用補 20CALL IPH IPL代碼段數據段CALL WORD PTR

12、 SI指令的操作圖示:假定:(DS) = 8000H,(SI) = 1200H81200H81201H補 21子程序的段地址和偏移地址直接由CALL指令給出。 格式:CALL far_proc ;far_proc為遠過程的地址指令的操作為: CS內容壓棧 IP內容壓棧 CS段地址 IP偏移地址例:CALL 2000H:1000H CALL FAR PTR TIMER ;TIMER為遠過程段間直接調用22子程序的段和偏移地址為存儲器的連續(xù)4個單元中的內容。 格式:CALL mem32指令的操作為: SP(SP)-2 (SP)+1,(SP)(CS) ;CS壓棧 CS(mem32+2) SP(SP)

13、-2 (SP)+1,(SP)(IP) ;IP壓棧 IP(mem32)例:CALL DWORD PTRDI調用地址在DI,DI+1,DI+2,DI+3四個存儲單元中。低字內容為偏移地址,高字內容為段地址。段間間接調用補 23CALL代碼段數據段 IPH IPL CSH CSLDIDI+1DI+2DI+3段間間接調用示意圖CALL DWORD PTRDI補 24例:下面的程序執(zhí)行后,(AX)=? (DX)=? CS:2000H MOV AX, 2012H 2003H MOV CX, 200CH 2006H PUSH CX 2007H CALL 4000H 200AH ADD AX, BX 200C

14、H ADD AX, DX 200EH HLT CS:4000H MOV BX, 200AH POP DX RET補 25段內返回指令RET的操作為: 恢復子程序執(zhí)行前IP的內容。段間返回指令RET的操作為: 恢復子程序執(zhí)行前IP和CS的內容。 另有一種帶立即數的返回指令 “ RET n ”,其中n為偶數,表示從棧頂彈出地址后另外丟棄的字節(jié)數。例:RET 4 ;返回后再丟棄棧頂的4個字節(jié)(2)返回指令RET263.循環(huán)控制指令用在循環(huán)程序中以確定是否要繼續(xù)循環(huán)。循環(huán)次數通常置于CX中。轉移的目標應在距離本指令-128+127的范圍之內。循環(huán)控制指令不影響標志位。27(1)LOOP格式:LOOP

15、label操作:(CX)-1CX; 若(CX)0,則轉至label處執(zhí)行; 否則退出循環(huán),執(zhí)行LOOP后面的指令。 注:LOOP指令與下面的指令段等價: DEC CX JNZ label28(2)LOOPZ (LOOPE)格式:LOOPZ label操作:(CX)-1CX; 若(CX)0ZF=1,則轉至label處執(zhí)行; 否則退出循環(huán),執(zhí)行LOOP后面的指令。(3)LOOPNZ (LOOPNE)格式:LOOPNZ label操作:(CX)-1CX; 若(CX)0ZF=0,則轉至label處執(zhí)行; 否則退出循環(huán),執(zhí)行LOOP后面的指令。29例1:給1A000H開始的256個內存單元均減去1,若

16、發(fā)現某個單元減為0則立即退出循環(huán),其后的單元不再減1。程序段如下:(邏輯地址為1A00:0H) MOV AX, 1A00H MOV DS, AX ; 1A00H段 MOV DI, -1 MOV CX, 256 GOON: INC DI DEC BYTE PTRDI LOOPNZ GOON HLT 30例2:在8000H開始的長度為1000字節(jié)的字符串中 查找S,若找到,把其偏移地址記錄在ADDR中,否則ADDR單元置為0FFFFH。 MOV DI, 8000H MOV CX, 1000 MOV AL, S MOV ADDR, 0FFFFH GOON: SCASB LOOPNZ GOON JNZ

17、 DONE DEC DI MOV ADDR,DI DONE: HLT 314.中斷指令8086/8088 CPU在程序中允許安排一條中斷指令來引起一個中斷過程,這種中斷叫內部中斷,或叫軟中斷。被中斷的指令地址處稱為“斷點”。有關中斷的詳細情況將在第八章討論。 中斷指令共有三條: (1)INT n 執(zhí)行類型n的中斷服務程序,N=0255 (2)INTO 執(zhí)行溢出中斷的中斷服務程序 (3)IRET 從中斷服務程序返回調用程序32(1) INT n格式: INT n說明: n4 = 向量地址。該向量地址中的內容即為中斷服務程序入口地址(段:偏移),入口地址也稱為“中斷向量”。0000 : n4 XX

18、HXXHYYHYYH中斷服務程序入口的偏移地址(IP)中斷服務程序入口的段地址(CS)中斷類型碼n = 0255內存中斷向量33INT指令的操作:將FLAGS壓入堆棧;將INT指令下一條指令的地址壓棧(即把CS和IP的內容壓棧);取中斷服務程序入口地址送入CS和IP。 INT指令只影響IF和TF, 對其余標志位無影響INT指令可用于調用系統服務程序,如INT 21H34INT指令的操作例:INT 21HIPLIPHCSLCSHSP=1200FLAGSLFLAGSHSP=11FA執(zhí)行INT 21H指令后保護斷點堆棧執(zhí)行INT 21H指令前35INT指令的操作例(續(xù)):執(zhí)行INT 21H指令后, CS=? IP=?因為n=21H,所以n4=84H。下圖中,(0:0084H)=2000H:1123H所以: CS=2000H IP=1123H0000:0084H 23H11H00H20HIP CS0000 : 21H436 I

溫馨提示

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

評論

0/150

提交評論