1. 程式人生 > >外部中斷事件

外部中斷事件

外部中斷事件

眾所周知,CPU在計算機系統中,除了能夠執行指令,進行運算外,還應該有輸入輸出功能。比如說,我現在在打字輸入‘a’,CPU他會處理這個按鍵,並在你的螢幕上顯示‘a’。我們想想,它能顯示,是不是印表機工作了,印表機工作。是不是CPU給它指令了,那是不是我們按鍵,然後CPU處理並執行。

        那麼,CPU現在要處理鍵盤(也就是外設的輸入),很明顯要解決兩個問題。

  1. 我們是不是隨時按按鍵他都能執行,那麼CPU如何得知。
  2. CPU如何得到外設的輸入,以及他如何區別鍵盤輸入的內容。

介面和埠

        CPU和外設的聯絡是通過埠實現並控制外設的輸入和輸出。外設的輸入不直接送入記憶體和CPU,而是先送到相應介面晶片的埠中:輸出也是如此。CPU向外設輸出控制指令也是如此。

中斷資訊

        我們現在知道了,外設的輸入是存放在埠中,但是它隨時都有可能發生,那麼CPU如何及時的知道。也就是我們提出的第一個問題。這時,CPU提供中斷機制來滿足這種需求。 當CPU內部需要有處理的事情發生的時候,將產生終端資訊,引發中斷過程,中斷過程此處不多講。這種中斷資訊被稱為內部中斷。

        還有一種中斷資訊,來自於CPU外部,比如說外設的輸入到達。CPU在執行完當前指令的時候,會讀取中斷控制器資訊,引發中斷過程,處理外設輸入

PC系統中外中斷過程(可遮蔽):

  1. 取中斷型別碼;
  2. 標誌暫存器入棧,IF = 0,TF = 0;
  3. CS,IP入棧;
  4. 得到中斷服務程式的入口地址(IP) = (n*4),(cs) = (n*4+2)
  5. 處理中斷服務程式

PC系統中外中斷過程(不可遮蔽):中斷型別碼固定為2,所以在中斷過程中不需要取中斷型別碼

  1. 標誌暫存器入棧,IF = 0,TF = 0;
  2. CS,IP入棧
  3. (IP) = (8),(CS) = (0AH)。

這裡主要舉個鍵盤的外部中斷例子

鍵盤事件:int 09h中斷

     當鍵盤輸入到埠地址60h,相關控制晶片會向CPU發出中斷型別號為9的可遮蔽外部中斷資訊,如果此時IF(中斷遮蔽標誌位)為1則執行相應的中斷處理。處理如下

  1. 讀出60h埠中的掃描碼
  2. 將掃描碼和字元碼送入BIOS鍵盤緩衝區;如果是控制鍵他會將其轉換成狀態位元組(二進位制)送入儲存鍵盤狀態的單元(0040:17);
  3. 對鍵盤系統發出相關的控制。

編寫int 9 中斷例程 :