計算機中斷例程和啟動過程

2021-07-02 22:47:33 字數 2277 閱讀 8521

首先將幾個概念,中斷程式處理和中斷向量表。

cpu在執行一段程式的時候,檢測到從cpu內部或外部發來的特殊訊號,並且可以對該訊號立即處理,暫時不去處理當前執行的程式。等該訊號處理完成後,可以返回繼續執行程式。這種訊號就是中斷資訊。相當於銀行的vip使用者~

然後的問題就是怎麼產生訊號和如何處理訊號了。有兩種:內中斷,外中斷。

內中斷:對於8086cpu,由硬體決定的中斷資訊

(1)除法錯誤

(2)單步執行程式(高階語言的單步或指定除錯程式,就是這個中斷起的作用)

(3)執行into指令

(4)執行int指令

外中斷:由cpu外部產生的終端訊號。

舉個例子,鍵盤輸入的處理過程。鍵盤與主機板的相關介面晶元裡也有乙個暫存器,每按下乙個鍵,就會向該埠傳送資訊,這時,晶元會向cpu傳送型別為9的中斷。執行程式的時候還可以用鍵盤輸出字元,有時候輸入的字元顯示不出來,就像卡了一樣,過了一會突然按下的字元瞬間出現了,這是原因是cpu沒有立即執行這個中斷,而去執行更高階別的中斷,等高階別的中斷完成後,執行鍵盤的輸入字元的中斷。

這是中斷訊號的介紹。下面是如何處理中斷。

cpu在處理中斷的時候,會先知道中斷訊號的標號,根據這個標號去記憶體裡找到相應的程式來處理。為什麼不直接找處理程式,而是中間要用到乙個標號?這就像書本需要有目錄一樣,容易理解,方便,還可以擴充套件。

每乙個中斷訊號都有標號,每乙個中斷都有相應的程式處理。我們需要知道哪種標號對應的是哪個處理程式。

所以,用到了乙個概念:中斷向量表。如下圖所示

這段中斷向量在記憶體的0000:0000處開始,也就是說,我要執行0號中斷,cpu會講cs:ip設定成0:0,找到0號中斷程式的入口位址進行處理。這個記憶體位址和標號是有對應關係的。我要找1號中斷的處理程式,cs:ip設定成0:(1*4)然後執行0:(1*4)和0:(1*4+2)的內容。同理,第n號中斷則是改變ip的值為(n*4),然後執行(n*4)和(n*4+2)的內容。

中斷向量表就是乙個目錄。

我們以乙個具體程式的例子去理解中斷的執行。

mov ax,1000h

mov bl,1

div bl

這個程式執行後,會產生除法溢位。為什麼呢?ax是乙個16位的暫存器,bl是8位,除的結果是乙個16位的,但是預設除數為8位時,會用al(8位)得到結果,這個肯定是不夠的,所以溢位。

那麼執行後,自動產生0號中斷。螢幕上顯示"divide overflow」。後面顯示出"divide overflow」就是其中斷處理程式的執行結果的一部分。cpu此時的工作過程:

(1)取得中斷型別碼 0

(2)flag標誌暫存器入棧,tf,if設定為0

(3)cs、ip入棧

(4)(ip)=(0*4),(cs)=(0*4+2)

假設處理程式的入口位址為0000::0020,這個位址就儲存在了cs:ip現在所指的記憶體區域裡,然後cs:ip自動跳轉為0000:0020,這是cpu指向的記憶體變成了0000:0020,開始從0000:0020往下執行程式段。這裡的程式段就是一段顯示"divide overflow"的程式。

中斷例程和中斷向量表知道了後,就是我們的計算機啟動了。

(1)接通電源

,cpu

一通電,

會將cs:ip

初始化為

0ffff:0000.

自動從0ffff:0000

記憶體單元開始執行程式.而

0ffff:0000

處有一條跳轉指令

,cpu

執行該指令後

,轉去執行

bios

中的硬體系統檢測和初始化程式

.(2)初始化程式將建立

bios

所支援的中斷向量,即將

bios

提供的中斷例程的入口位址登記在中斷向量表中.注意

:對於bios

所提供的中斷例程

,只需將入口位址登記到中斷向量表中即可

,因為這些程式是固化到

rom中的

,一直存在

.(出場的時候已經設定好了

,並且這是一種不可擦除的邏輯程式設計

.)(3)硬體系統檢測和初始化完成後,呼叫

int 19h

進行作業系統的引導

,講計算機由作業系統控制

.(4)dos

啟動後,

除完成其他工作外

,還將它所提供的中斷例程裝入記憶體

,建立相應的中斷向量

.

計算機啟動過程

計算機按下開機按鍵到啟動到作業系統的過程中,計算機到底經歷了哪些步驟呢 1 按下power bottom之後,計算機會經過一系列的上電過程 power squence 最後然讓cpu reset.cpu reset 表示主機板電已經上好了並且cpu開始工作 2 cpu開始工作時候緊接著就通過sb或者...

計算機啟動過程

從開啟電源到開始操作,計算機的啟動是乙個非常複雜的過程。我一直搞不清楚,這個過程到底是怎麼回事,只看見螢幕快速滾動各種提示.這幾天,我查了一些資料,試圖搞懂它。下面就是我整理的筆記。零 boot的含義 先問乙個問題,啟動 用英語怎麼說?回答是boot。可是,boot原來的意思是靴子,啟動 與靴子有什...

計算機啟動過程

對intel8086加電或復位的時候,cs 0xffff,ip 0x0000,處理機執行指令的時候是從低位址到高位址,這個位址距離記憶體頂部0xfffff,只差16個位元組,要是ip值超過0x000f,它與cs形成的實體地址就會因為溢位,而變回0x0001 所以在這個位址 cs 0xffff,ip ...