iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0

如果在閱讀其他人寫的組語時可能會看到 INT 這個指令,這個是要去中斷向量表中呼叫中斷向量,例如說鍵盤按下了一個按鍵,這時候目前正在執行的程式就會暫停,然後去調用中斷向量。基本上來說中斷向量表就只是一個陣列而已。參考這篇文章,範圍從 00H ~ FFH,約 256 個中斷向量,但基本上只會用到 12H 左右,而 13H ~ 1FH是保留,20H ~ FFH 是自由使用。
https://ithelp.ithome.com.tw/upload/images/20220926/20151538VSi6QKuVHd.png

那如果又根據另一篇[文章](![[Pasted image 20220926222344.png]])所描述,中間有更具體的分類,例如應該蠻常看到的 int 0x80 就是其中的 basic 分類,會將字串輸出到螢幕上。
https://ithelp.ithome.com.tw/upload/images/20220926/20151538QM8ff8xMrb.png

實際上我看到使用 int 中斷的地方幾乎都在 linux 作業系統上,而 Windows 好像主要都是用 API,由 API 去調用 System Call。中斷的觸發有分硬體中斷、軟體中斷和異常,硬體中斷如按下鍵盤按鍵,軟體中斷如使用 INT 指令,異常如除於 0 的錯誤計算。而因為不知道使用者甚麼時候會觸發到中斷,所以只要一接收到中斷,CPU 就會將程式暫停,透過向量表去執行向量中斷函式,在執行完後再回來繼續執行剛才暫停的程式。

其實中斷向量表在開機不久就會被載入到記憶體中,當電源鍵一按下去通電的時候,CPU 的指標暫存器會直接被指向到 0xFFFF0 的位置,開始啟動 BIOS,然後在開機自檢時會跳到 0x00000 的位置去載入中斷向量表,又去 0x0E05B 的地方載入中斷向量函式。

相關文章可以到以下連結參考
Linux 系统開機加電後發生了什麼?
Linux 讀書會-03.System Call(系統呼叫)
Linux 開機啟動過程 (8) : 初期中斷(缺頁中斷)和異常處理
Kernel booting process. Part 1.


上一篇
Day9 檔案格式
下一篇
Day11 虛擬記憶體
系列文
絕對花心的30天組合語言13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言