中斷:CPU再也不接着(剛執行完的指令)向下執行,而是轉去處理中斷信息。程序員
assume cs:codesg, ss:stacksg, ds:datasg stacksg segment db 200h dup (0) stacksg ends datasg segment ; ‘$': 9 退出顯示的格式 ; 13,10:回車換行 szmsg db 13,10,'hello world!',13,10,'$' datasg ends codesg segment start: mov ax,datasg mov ds,ax lea dx, szmsg ; ah寄存器爲9:終端號 9 顯示信息、顯示ds爲段地址 dx 位偏移地址的包含信息 ; 會取上面 szmsg 符號的 hello worold! 字符 mov ah,9 int 21h ; ah寄存器爲4c:則退出程序,爲Dos狀態 mov ax,4c00h int 21h codesg ends end start
中斷過程由CPU的硬件自動完成;
用中斷類型碼找到中斷向量,並用它設置CS和IP編程
(1)從中斷信息中取得中斷類型碼
(2)標誌寄存器的值入棧——中斷過程當中要改變標誌寄存器的值,須要先行保護
(3)設置標誌寄存器的第8位TF 和第9位IF的值爲0
(4)CS的內容入棧;
(5)IP的內容入棧;
(6)從中斷向量表讀取中斷處理程序的入口地址,設置IP和CS。ide
(1)取得中斷類型碼N;3d
(2) pushf指針
(3) TF = 0,IF = 0調試
TF(Trap Flag): 陷阱標誌,用於單步調試;code
IF(Interrupt Flag):中斷標誌;blog
(4) push CS事件
(5) push IP內存
(6)(IP) = (N*4),(CS) = (N*4+2)
CPU隨時均可能檢測到中斷信息,因此中斷處理程序必須常駐內存(一直存儲在內存某段空間之中)。
中斷處理程序的入口地址,即中斷向量,必須存儲在對應的中斷向量表表項中(0000:0000-0000:03FF)。
TF-陷阱標誌(Trap flag):用於調試時的單步方式操做。當TF=1時,每條指令執行完後產生陷阱,由系統控制計算機;當TF=0時,CPU正常工做,不產生陷阱。
IF-中斷標誌(Interrupt flag):當IF=1時,容許CPU響應可屏蔽中斷請求;當IF=0時,關閉中斷。
CPU在執行完一條指令以後,若是檢測到標誌寄存器的TF位爲1,則產生單步中斷(中斷類型碼爲1),引起中斷過程,執行中斷處理程序。
(1)取得中斷類型碼1;
(2)標誌寄存器入棧,TF、IF設置爲0;
(3) CS、IP入棧;
(4)(IP)=(1*4),(CS)=(1*4+2)。
• 中斷處理程序也由一條條指令組成的。
• 若是在執行中斷處理程序以前,TF=1,則CPU在執行完中斷處理程序的第一條指令後,又要產生單步中斷,轉去執行單步中斷的中斷處理程序的第一條指令……
• 上面的過程將陷入一個永遠不能結束的循環,CPU永遠執行單步中斷處理程序的第一條指令。
• 因此,在進入中斷處理程序以前,設置TF=0。
通常狀況下,CPU在執行完當前指令後,若是檢測到中斷信息,就響應中斷,引起中斷過程。
在有些狀況下,CPU 在執行完當前指令後,即使是發生中斷,也不會響應。
例:在執行完向 ss寄存器傳送數據的指令後,即使是發生中斷,CPU 也不會響應。
緣由:ss:sp聯合指向棧頂,而對它們的設置應該連續完成。
以此保證對棧的正確操做!
注:棧段 與 棧頂指針 必須連續起來去作。
int格式: int n,n爲中斷類型碼
功能:引起中斷過程
CPU 執行int n指令,至關於引起一個 n號中斷的中斷過程,執行過程以下:
(1)取中斷類型碼n;
(2)標誌寄存器入棧,IF = 0,TF = 0;
(3)CS、IP入棧;
(4)(IP) = (n*4),(CS) = (n*4+2)。 —今後處轉去執行n號中斷的中斷處理程序。
• int 指令的最終功能和call指令類似,都是調用一段程序。
• 通常狀況下,系統將一些具備必定功能的子程序,以中斷處理程序的方式提供給應用程序調用。
BIOS,是在系統板的ROM中存放着一套程序
BIOS中的主要內容
(1)硬件系統的檢測和初始化程序
(2)外部中斷和內部中斷的中斷例程
(3)用於對硬件設備進行I/O操做的中斷例程
(4)其餘和硬件系統相關的中斷例程
使用BIOS功能調用,程序員不用瞭解硬件操做細節,直接使用指令設置參數,並中斷調用BIOS例
程,便可完成相關工做!
使用BIOS功能調用:(1)方便編程;(2)能寫出簡潔、可讀性好、易於移植的程序。
用BIOS的10h中斷
(ah)=2時,調用第10h中斷例程的2號子程序,設置光標位置
(ah)=9時,調用第10h中斷例程的9號子程序,在光標位置顯示字符
assume cs:code code segment mov ah,2 ;置光標功能 mov bh,0 ;第0頁 mov dh,5 ;dh中放行號 mov dl,12 ;dl中放列號 int 10h mov ah,9 ;顯示字符功能 mov al,'a' ;字符 mov bl,11001010b;顏色屬性 mov bh,0 ;第0頁 mov cx,3 ;字符重複個數 int 10h mov ax,4c00h int 21h code ends end