8086彙編 中斷

8086彙編 中斷

中斷:CPU再也不接着(剛執行完的指令)向下執行,而是轉去處理中斷信息。程序員

  • 內中斷:由CPU內部發生的事件而引發的中斷
  • 外中斷:由外部設備發生的事件引發的中斷

8086的內中斷

CPU內部產生的中斷

  • 除法錯誤,好比:執行div指令產生的除法溢出
  • 單步執行
  • 執行into指令
  • 執行int 指令

8086的中斷類型碼

  • (1)除法錯誤:0
  • (2)單步執行:1
  • (3)執行 into 指令:4
  • (4)執行 int n指令 ,當即數 n 爲中斷類型碼。

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編程

8086CPU的中斷過程

(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引發的中斷

  • CPU內部產生的中斷信息
  • 除法錯誤
  • 單步執行
  • 執行into指令
  • 執行int 指令

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和DOS中斷處理

BIOS,是在系統板的ROM中存放着一套程序

  • 容量:8KB
  • 地址:從FE000H開始

BIOS中的主要內容

(1)硬件系統的檢測和初始化程序

(2)外部中斷和內部中斷的中斷例程

(3)用於對硬件設備進行I/O操做的中斷例程

(4)其餘和硬件系統相關的中斷例程

使用BIOS功能調用,程序員不用瞭解硬件操做細節,直接使用指令設置參數,並中斷調用BIOS例

程,便可完成相關工做!

使用BIOS功能調用:(1)方便編程;(2)能寫出簡潔、可讀性好、易於移植的程序。

1、在屏幕的5行12列顯示3個紅底高亮閃爍綠色的'a'

用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
案例

相關文章
相關標籤/搜索