跳轉到內容

x86 彙編/X86 中斷

來自華夏公益教科書,開放的書籍,開放的世界

中斷是在每個系統上定義的特殊例程。這意味著一個系統上的中斷可能與另一個系統上的中斷不同。因此,在編寫需要可移植的程式碼時,過分依賴中斷通常不是一個好主意。

什麼是中斷?

[編輯 | 編輯原始碼]

在現代作業系統中,程式設計師通常不需要使用中斷。例如,在 Windows 中,程式設計師透過 Win32 API 進行操作。但是,這些 API 呼叫與核心互動,核心通常會觸發中斷來執行不同的任務。在舊的作業系統(特別是 DOS)中,程式設計師沒有 API 可用,因此他們必須透過中斷完成所有工作。

中斷指令

[編輯 | 編輯原始碼]

int arg

此指令發出指定的中斷。例如

int 0x0A

呼叫中斷 10 (0x0A (十六進位制) = 10 (十進位制))。

中斷型別

[編輯 | 編輯原始碼]

有 3 種類型的中斷:硬體中斷、軟體中斷和異常。

硬體中斷

[編輯 | 編輯原始碼]

硬體中斷是由硬體裝置觸發的。例如,當您在鍵盤上輸入時,鍵盤會觸發硬體中斷。處理器會停止當前操作,並執行處理鍵盤輸入的程式碼(通常將您按下的鍵讀入記憶體中的緩衝區)。硬體中斷通常是非同步的 - 它們的發生與當時正在執行的指令無關。

軟體中斷

[編輯 | 編輯原始碼]

還有一些軟體中斷,通常用於將控制權轉移到作業系統核心中的函式。軟體中斷由指令 int 觸發。例如,指令 "int 14h" 觸發中斷 0x14。然後,處理器停止當前程式,並跳轉到處理中斷 14 的程式碼。中斷處理完成後,處理器將流程返回到原始程式。

異常是由正在執行的程式碼中的異常情況引起的,例如嘗試除以零或訪問受保護的記憶體區域。處理器會檢測到此問題,並將控制權轉移到處理程式以處理異常。此處理程式可能會在更改某些值後重新執行有問題的程式碼(例如,零被除數),或者如果無法執行此操作,則可能會終止導致異常的程式。

進一步閱讀

[編輯 | 編輯原始碼]

我們在本書的後面章節中討論了高階細節,高階中斷

適用於 DOS 和相關係統 的中斷列表:Ralf Brown 的中斷列表

華夏公益教科書