微機原理與接口技術(樓順天)-第3章8.ppt_第1頁
微機原理與接口技術(樓順天)-第3章8.ppt_第2頁
微機原理與接口技術(樓順天)-第3章8.ppt_第3頁
微機原理與接口技術(樓順天)-第3章8.ppt_第4頁
微機原理與接口技術(樓順天)-第3章8.ppt_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、本教案內容,第3章 8086CPU指令系統(tǒng) 匯編語言指令 8086指令分類 數(shù)據(jù)與轉移地址的尋址方式 數(shù)據(jù)傳送類指令 算術運算類指令 邏輯運算類指令 移位類指令 標志位操作指令,轉移指令 循環(huán)控制指令 子程序調用返回指令 中斷調用返回指令 字符串操作指令 I/O輸入輸出指令 其它指令 宏指令,3.11 子程序調用返回指令,概念:子程序為功能確定、且獨立的程序段。 優(yōu)點: 可以將任何一段獨立的程序歸整為一個子程序,當需要該段程序時,只需調用子程序即可,調用后會自動返回到調用指令的下一條指令。因此采用子程序設計時,可以簡化程序設計。 從調試程序的角度,由于原本在多處出現(xiàn)的程序段,縮減為子程序調用指

2、令,使調試程序更加方便。,3.11 子程序調用返回指令,缺點: 采用子程序設計后。由于調用子程序和從子程序中返回需要執(zhí)行指令,并且為保護某些寄存器的內容,需要進行壓入堆棧和彈出堆棧的操作,因此會使程序執(zhí)行速度受到一定的影響。,3.11 子程序調用返回指令,實現(xiàn): 子程序調用是通過自動修改(IP)和/或(CS)的內容實現(xiàn)的。 為了確保子程序調用后能夠返回到調用指令之后,CALL指令會自動保存返回地址(IP和/或CS),而RET指令會自動返回到CALL指令的下一條指令。,3.11 子程序調用返回指令,一、子程序調用指令CALL 子程序調用指令CALL(Call procedure)有兩種格式: C

3、ALL LABEL;調用入口地址為 ;標號LABEL的子程序 CALL OPR;調用子程序,其入口地址 ;為操作數(shù)OPR的內容,3.11 子程序調用返回指令,CALL LABEL;調用入口地址為 ;標號LABEL的子程序 分三種情況: (1)當標號LABEL與CALL指令不在同一個段內時,子程序調用在段間進行,其完成的操作有:CS入棧,IP入棧;(IP)LABEL的偏移地址;(CS)LABEL的段地址。指令的尋址方式為段間直接尋址。,3.11 子程序調用返回指令,(2)當標號LABEL與CALL指令在同一個段內,且可以采用8位有符號數(shù)表示其相對位移量時,則子程序調用在段內進行,其完成的操作有:

4、IP入棧;(IP)(IP)+DISP8。指令的尋址方式為段內直接尋址,也稱為相對尋址。 (3)當標號LABEL與CALL指令在同一個段內,且需要采用16位有符號數(shù)表示其相對位移量時,則子程序調用在段內進行,其完成的操作有:IP入棧;(IP)(IP)+DISP16。指令的尋址方式為段內直接尋址,也稱相對尋址。,3.11 子程序調用返回指令,CALL OPR;調用子程序,其入口地址 ;為操作數(shù)OPR的內容 分為三種情況 : (1)當OPR為16位的通用寄存器REG16時,則子程序調用在段內進行,其完成的操作有:IP入棧;(IP)(REG16)。指令的尋址方式為段內間接尋址。,3.11 子程序調用返

5、回指令,(2)當OPR為16位的存儲單元RAM時,則子程序調用在段內進行,其完成的操作有:IP入棧;(IP)(RAM)。指令的尋址方式為段內間接尋址。 (3)當OPR為32位的存儲單元RAM時,則子程序調用在段間進行,其完成的操作有:CS入棧,IP入棧;(IP)(RAM),(CS)(RAM2)。指令的尋址方式為段間間接尋址。,3.11 子程序調用返回指令,二、子程序返回指令RET 子程序返回指令RET(Return from procedure)有三種格式: RET ;用于段內子程序的返回, 完成IP 出棧,即(IP)(SP) RETF ;用于段間子程序的返回, 完成IP 出棧,CS 出棧 R

6、ET n ;完成RET(或RETF)指令功能后, (SP)(SP)+n,3.11 子程序調用返回指令,三、過程定義 在IBM PC匯編過程中,子程序通常以過程方式編寫。過程定義格式: 過程名 PROC 類型 RET 過程名 ENDP 其中,過程名是用戶給子程序起的名字,它可以看作為標號,具有段地址、偏移地址和類型的屬性。子程序的類型可以取NEAR(近程過程,可供段內調用)和FAR(遠程過程,可供段間調用),當類型缺省時,表示NEAR(近程過程)。,一個子程序名一但定義,就具有以下三個屬性,段地址,段內偏移地址,類型,FAR,NEAR(可缺?。?就是子程序第一條指令的地址,3.11 子程序調用返

7、回指令,3.11 子程序調用返回指令,子程序還可以是另一種形式: 標號: RET,子程序調用與返回指令應用結構,段內子程序調用與返回,;主程序 CODE SEGMENT ASSUME CS:CODE START:,3.11 子程序調用返回指令,;子程序SUB1 SUB1 PROC NEAR,RET ; SUB1 ENDP CODE ENDS END START,CALL NEAR PTR SUB1,可以省略,IP(SP),SP(SP)+2,SP(SP)-2,(SP)返回 地址(IP),IP(IP)+16 位DISP,3.11 子程序調用返回指令,;主程序 CODEM SEGMENT ASSUM

8、E CS:CODEM START: CALL FAR PTR SUB2 MOV AH,4CH INT 21H CODEM ENDS,;子程序 CODES SEGMENT ASSUME CS:CODES SUB2 PROC FAR RETF ;也可以寫成RET SUB2 ENDP CODES ENDS END START,3.11 子程序調用返回指令,例3.32 子程序設計,編寫子程序實現(xiàn)統(tǒng)計一個字(AX)中“1”的個數(shù)。 解:利用移位指令或循環(huán)移位指令,每次對CF位進行檢測位: 當CF=1時,則總個數(shù)加1; 當CF=0時,則總個數(shù)不變。 這種操作可以采用有條件轉移指令來實現(xiàn),但更方便的方式是采

9、用ADC指令實現(xiàn)。子程序如下:,3.11 子程序調用返回指令,COUNTER1 PROC NEAR PUSH AX MOV CX,16 XOR BL,BL COU1: SHR AX,1 ADC BL,0 LOOP COU1 POP AX RET COUNTER1 ENDP,3.11 子程序調用返回指令,例3.33 子程序應用。利用上例設計的子程序,統(tǒng)計字型變量VAR1中1的個數(shù)。 解:在數(shù)據(jù)段中定義變量VAR1和CounterVar1: VAR1DW1234H CounterVar1 DB ? 則可在代碼段中編寫程序: MOV AX, VAR1 CALL COUNTER1 MOV Counte

10、rVar1,BL 執(zhí)行后,結果單元CounterVar1的值為5,說明1234H中包含有5個“1”。,3.11 子程序調用返回指令,例3.34 編寫以十六進制數(shù)顯示AL和AX內容的子程序(DISPAL、DISPAX)。 解:先編寫顯示AL寄存器內容的子程序DISPAL。由于AL中有兩位十六進制數(shù),每一位的值為09、0AH0FH,在顯示時需要將它們轉換成相應的ASCII碼,然后調用INT 21H的02H號功能進行顯示。子程序DISPAL如下:,3.11 子程序調用返回指令,DISPAL PROC NEAR PUSH AX PUSH CX PUSH DX PUSH AX MOV CL,4;處理高位

11、十六進制數(shù) SHR AL,CL CALL CHANG;十六進制數(shù)變換成ASCII碼 MOV AH,02 MOV DL,AL INT 21H;顯示一位字符,3.11 子程序調用返回指令,POP AX AND AL,0FH;處理低位十六進制數(shù) CALL CHANG;十六進制數(shù)變換成ASCII碼 MOV AH,02 MOV DL,AL INT 21H;顯示一位字符 POP DX POP CX POP AX RET DISPAL ENDP,3.11 子程序調用返回指令,CHANG PROC NEAR ;十六進制數(shù)變換成ASCII碼 CMP AL,10 JNGE CHANG1 ADD AL,7 CHAN

12、G1: ADD AL,30H RET CHANG ENDP,3.11 子程序調用返回指令,可以直接調用DISPAL實現(xiàn)顯示AX的內容,子程序DISPAX內容如下: DISPAX PROC NEAR XCHG AL,AH CALL DISPAL XCHG AH,AL CALL DISPAL RET DISPAX ENDP,3.11 子程序調用返回指令,作業(yè):,3.12 中斷調用與返回指令,計算機在程序運行過程中,由于發(fā)生了某些“緊急事件”,需要進行特殊處理(轉向中斷服務子程序執(zhí)行),處理后返回到程序中斷處繼續(xù)執(zhí)行,這種過程稱為中斷處理過程。這里的“緊急事件”可以是由硬件產生的,例如系統(tǒng)掉電、硬件

13、故障、定時計數(shù)器溢出等;可以是執(zhí)行指令產生的,例如除法溢出等;還可以是專門的中斷調用指令所產生的。本節(jié)主要介紹專門的中斷調用指令、中斷服務子程序的結構和中斷返回指令。,3.12 中斷調用與返回指令,一、中斷調用指令INT 中斷調用指令INT(Interrupt)的格式為: INT n 這表示調用第n號中斷,n為中斷類型號,其值可以是0255。當執(zhí)行該指令時,會進行下列操作: PSW、CS、IP入棧; 清除IF、TF標志; 從中斷向量表中取出中斷向量(中斷向量為中斷服務子程序的入口地址); 轉到中斷服務子程序進行執(zhí)行; 中斷服務子程序的最后一條指令應該是中斷返回指令,執(zhí)行該指令可以返回到程序中斷

14、處繼續(xù)執(zhí)行。,3.12 中斷調用與返回指令,二、中斷返回指令IRET 中斷返回指令IRET(Interrupt return)的格式為: IRET 表示從中斷服務子程序返回主程序。執(zhí)行該指令時,會完成IP、CS、PSW的出棧操作,其次序與INT n 指令的入棧次序相反。由于修改了IP和CS的內容,從而實現(xiàn)的程序的返回功能。,3.12 中斷調用與返回指令,三、中斷向量表 每個中斷服務子程序的入口地址(稱為中斷向量)為32位(16位的偏移地址和16位的段地址),占用4個地址單元。計算機中采用最低的1024個地址單元(稱為0頁)來存儲中斷向量,因此,n號中斷的中斷向量存放地址為:4n ,調用該中斷時,可以從該地址獲得中斷服務子程序的入口地址。,3.12 中斷調用與返回指令,四、中斷服務子程序結構 由于中斷是隨時可能調用的程序,我們無法預知其調用的位置,這樣在設計中斷服務子程序時,應該確保所有寄存器的內容保持不變。因此在中斷服務子程序的入口處,應該將用到的寄存器通過堆棧進行保護,在中斷程序的返回之前,從堆棧中恢復寄存器的內容。中斷服務子程序的結構為:,3.12 中斷調用與返回指令,: PUSH AX;保護現(xiàn)場 PUSH SI ;中斷子程序主體 POP SI;恢復現(xiàn)場 POP AX IRET;中斷返回,3.12 中斷調用與返回指令,五、系統(tǒng)功能調

溫馨提示

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

評論

0/150

提交評論