簡體   English   中英

在8086實模式下可以使用哪些中斷?

[英]What interrupts are available in 8086 real mode?

我已經閱讀了關於BIOS中斷的信息,並且知道它們只能在8086實模式下訪問。

我的問題:

  • 還有其他中斷嗎? 我已經閱讀過關於DOS中斷的內容,但我很困惑,如果它們在實模式下也可用,以及DOS中斷列表是什么。

  • 進入保護模式后,存儲在0x00的BIOS中斷表會發生什么? 是替換,還是存在但只是無法訪問?

  • BIOS中斷如0x13或0x19,它們是如何實現的? 它是在軟件中還是通過處理器?

在實模式下,您有256種不同的SOFTWARE TRIGGERED中斷。 在BIOS和DOS的早期階段,它們只被用作“跳轉地址”表。 例如,DOS主要使用INT 21,因此應用程序可以編碼為使用INT 21處理器指令而不是CALL 1234:5678 - 真實地址會隨着每個新版本的DOS而改變,但INT 21仍然存在。 當dos啟動時,它會將其真實處理函數的地址放入中斷表的那個槽中。

INT XX處理器指令可以使用0到255之間的中斷號,因此所有這些都可用 如果在相應的中斷表槽中有任何有用的東西是另一回事 - 但是有很多常駐程序,它使用了一些特定的中斷(如果加載了多個這些程序,就會導致沖突)。

除此之外還有硬件中斷 - 這些中斷不是由軟件觸發,而是由鍵盤,軟盤或硬盤等外部設備觸發,當他們想告訴處理器“我需要一些服務”時。 因此,例如,當您按下鍵盤上的某個鍵時,鍵盤控制器會觸發中斷9(不確定數字,這是很久以前的事,但中斷8-15是為硬件保留的)。 啟動時,BIOS會將其鍵盤處理程序的地址放入中斷表的相應條目中。 無論何時按下一個鍵,鍵盤控制器都會觸發中斷9,這使得處理器在中斷表中查找相應的地址,調用它 - 這將控制轉移到BIOS - bios做了任何必要的事情來從中獲取實際的密鑰。鍵盤,然后返回到應用程序,它不知道發生了什么帽子。

所以回答你的第一個問題:有256個中斷。 0-7用於處理器內部的東西。 07-0F由硬件觸發。 10-1F保留給Bios,DOS使用20-27。 其余的都未使用,這意味着,在中斷表中沒有為它們存儲有效的過程入口點。 (后來這變得非常模糊,我在這里過於簡單化了)。

第二個問題:一旦進入保護模式,中斷表將由處理器置於保護模式的操作系統替換,因為BIOS例程是為沒有保護模式的8086編寫的,如果沒有安全使用,通常是不安全的。不是在實模式下,並且不能很好地處理多任務處理。 任何體面的操作系統都必須自己做這種事情。 DOS中使用的20-27的中斷在其他操作系統中沒有替代它們。 因此,您無法在Linux上運行dos可執行文件,除了無法運行它們之外,如果它們使用dos中斷,它們將無法工作。

第三個問題:BIOS中斷本身就是純軟件,但它們會觸發硬件事件。 中斷13用於軟盤/硬盤。 想要直接從軟盤讀取扇區的程序會用一些預定義的值填充處理器寄存器,調用中斷13(因此跳轉到BIOS例程,當BIOS啟動時,其地址被放入中斷表中),然后讓bios做它的工作。 還沒有硬件的東西。 當然,在中斷處理程序中,BIOS會讀取和寫入軟盤控制器的硬件端口,但應用程序不必了解詳細信息。

  • DOS中斷可用於DOS。 (Windows中的16位程序也可以使用它們,因為它在虛擬8086模式下運行,而Windows試圖像過去那樣呈現一個環境。)在操作系統開始加載之前它們不存在,雖然......如果你正在構建自己的操作系統,除非你把它們放進去,否則它們根本就不存在。

  • 一旦切換到保護模式,基本上就會運行在切換期間設置的中斷描述符表(IDT)。 舊表仍然存在,因為它的格式足夠不同,如果在切換之前發生中斷,您不能只是覆蓋它而不會有麻煩。 而且你通常會出於幾個原因保留它,包括它的用處,以防你出於某種原因必須切換回實模式。 (Windows 9x曾經這樣做。有些驅動程序是16位,沒有人想要更新它們......所以Windows有能力讓這些驅動程序以實模式運行。)但是當處理器處於受保護狀態時它不會被使用模式。

  • 處理器不直接參與中斷的實際處理。 它甚至不知道它正在運行什么類型的計算機。基本上,它只是在IDT中看到一個條目並調用該中斷處理程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM