2012-05-21 48 views
4

我在網上衝浪期間發現了512字節的os比賽。在啓動引導程序之前cli

一切都安裝在引導程序。

閱讀其中的一些源文件後,

我發現總有啓動程序前cli指令。 (組裝)

use16 
org 7c00h 
jmp 0:start 
start: 
    cli 
    do something here..(this section sometimes include int 10h) 

我不知道的事情是

  1. 爲什麼cli是啓動程序前必要的。

  2. cli之後,有時會使用中斷!像int 10h我想知道他們爲什麼在cli之後使用中斷會是正常的嗎?

+0

你能告訴我們這個「在這裏做點什麼」嗎? –

回答

6

1)其中cli必要之前(或內)引導扇區的初始化是,如果引導扇區可能會在8086對於更新的CPU負載ss原因運行的唯一情況中斷被禁用(推遲)直到下一條指令完成後,該指令足以裝載sp並獲得有效的ss:sp以供潛在的IRQ處理程序使用。

2)軟件中斷(例如int 0x10)不是IRQ,並且沒有被cli禁用。在cli之後不久執行sti是正常的,以避免混淆IRQ。當你試圖擠壓512字節的東西時,做一些愚蠢的事情是很正常的,沒有一個理智的程序員會考慮允許(例如,禁止中斷),以擠壓額外的字節代碼。

4

cli只有當我們現在不想要硬件中斷服務。

這很難說,爲什麼在你指的是代碼的使用沒有看到實際的代碼,但一般可以有多種原因:

  • ,以避免中斷服務例程的競爭條件(訪問時共享可變數據)
  • 改變中斷矢量表原子(非常類似於上文)
  • 改變SS:SP原子(非常類似於上文)
  • 以避免由於由ISR異常而切換CPU模式(實時< - >保護)
  • 測量時間更精確地避免ISR貢獻

基本上,只要硬件的ISR可以在某些不期望的方式主代碼干擾,禁用中斷。

哦,和int 10h與來自硬件的中斷請求無關。只是一些ISR用於處理硬件中斷(例如,鍵盤或網絡)和其他用作輔助程序或系統調用的各種方便的接口(你不需要知道ISR的確切位置,向量號(10h)就足夠了)。 BIOS int 10h功能允許您更改顯示模式並在屏幕上寫入文本。

相關問題