我所認知的BIOS 深入理解IRQ7

2021-08-25 13:43:22 字數 1063 閱讀 9938

【我所認知的bios】->深入理解irq7

by lightseed

12/13/2010

這篇文章的線索是因為偶然間發現自愛dos下面,irq7對應的中斷服務程式(isr)只有乙個iret.那我不經會問,這是為什麼呢?因為在bios下面irq7是有對應的isr的。

這個問題歸根結底是由於8259的中斷產生機制造成。

簡單回顧一下8259中斷的產生過程。共分了6步:

1.乙個或者多個中斷請求產生的時候,8259把對應的irr(interrupt request register)置起來。

2.8259

評估這些中斷請求,如果是可以的話,傳送int訊號給cpu。

3.cpu

收到int後,回發inta#給8259。

4.在接收從cpu發來的inta#的過程中優先順序最高的irr會被填入到isr中去。同時irr的對應位被8259清掉。(不過這這個inta#的過程彙總,8259並不會把資料放到data bus上去。)

5.cpu

觸發第二個inta#,在這個過程中,8259把資料放到data bus上去,cpu同時從bus上讀取資料。

6.資料傳輸完成,cpu解析資料並進入到對應的interrupt service routing處理,最後發eoi(end of interrupt)給8259。8259於是清掉isr。

整個中斷過程結束。

根據8259 datasheet的說明,有這樣一種可能性。在第③步發生了一種特殊情況,從第③到第④步的時候,並沒有interrupt request了。(比如說中斷請求太短),這樣的話兩片8259均會把中斷7

填到data bus上去。看上去就想是觸發了irq 7了一樣。

我想也正是這個原因,bios和dos都對irq 7對應的isr做了特殊的處理。比如說,bios的裡面的irq7對應的isr什麼動作都沒做。dos下irq7對應的isr被直接替換成了iret.

不過上面都只是我對8259 datasheet的研究的時候發現的,也純粹是理論上的理解。真實原因也許不是這樣個原因。

以上整個過程在後續的ich和最新的南橋spec沿用了同樣的規則。

深入理解BIOS

在學習windows系統啟動的過程中,經過仔細的思考,我還存在一點困惑 cpu的reset訊號撤銷掉,cpu會從f000 fff0位址 即1mb的ram的最高位址的64kb 開始執行,這個位置實際上是一條跳轉指令,直接跳轉到bios的位址開始執行。在網上查閱了一些資料後,我開始慢慢明白了,其實cpu...

我所認知的BIOS 反彙編BIOS之 開始

我所認知的 bios 反彙編bios 之 開始 lightseed 3 11 2010上海 我想稍微懂點 bios 的人都應該知道,目前 blog 裡面的文章其實都是很基礎很基礎的東西。說白了呢就是沒什麼技術含量,說好聽點呢,就是對技術的細節理解比較深刻。總之就是只能看看,不能排上實際用途了。不得不...

我所認知的BIOS 第一條指令

by lightseed 2009 10 26 其實早就想寫這樣一篇文章了,今天才著手寫了下。說來也慚愧關於cpu的第一條指令的問題,在一開始study的時候我自己並沒有求甚解,所以當時理解的也比較膚淺,今天我們來詳細 一下關於reset 從沒電到上電 後cpu執行第一條指令的一些東西。說明一下 這...