int9中斷例程對鍵盤輸入的處理
鍵盤輸入將引發9號中斷,BIOS提供了int9中斷例程。CPU在9號中斷發生后,執行int 9中斷例程,從60h端口讀出掃描碼,並將其轉化為相應的ASCII碼或狀態信息,存儲在內存的指定空間(鍵盤緩沖區或狀態字節)中。
一般的鍵盤輸入,在CPU執行完int 9中斷例程后,都放到了鍵盤緩沖區中。鍵盤緩沖區中有16個字單元,可以存儲15個按鍵的掃描碼和對應的ASCII碼。
使用int16h中斷例程讀取鍵盤緩沖區
BIOS提供了int 16h中斷例程供程序員調用。int 16h中斷例程中包含的一個最重要的功能是從鍵盤緩沖區中讀取一個鍵盤輸入,該功能的編號為0。下面的指令從鍵盤緩沖區中讀取一個鍵盤輸入,並且將其從緩沖區中刪除。
mov ah,0
int 16h
結果: (ah)=掃描碼,(al)=ASCII碼
int 16h中斷例程檢測鍵盤緩沖區,發現緩沖區空,則循環等待,直到緩沖區中有數據。
- nt 16h中斷例程的0號功能,進行如下的工作:
- 檢測鍵盤緩沖區中是否有數據;
- 沒有則繼續做第1步;
- 讀取緩沖區第一個字節單元中的鍵盤輸入;
- 將讀取的掃描碼送入ah,ASCII碼送入al;
- 將已讀取的鍵盤輸入從緩沖區中刪除。
BIOS的int 9中斷例程和int 16h中斷例程是一對相互配合的程序,int 9中斷例程向鍵盤緩沖區中寫入,int 16h中斷例程從緩沖區中讀出。它們寫入和讀出的時機不同,int 9中斷例程是在有鍵按下的時候向鍵盤緩沖區中寫入數據;而int 16h中斷例程是在應用程序對其進行調用的時候,將數據從鍵盤緩沖區中讀出。
字符串的輸入
最簡單的字符串輸入程序,需要具備下面的功能:
- 在輸入的同時需要顯示這個字符串;
- 一般在輸入回車符后,字符串輸入結束;
- 能夠刪除已經輸入的字符。
以棧的方式處理字符串的輸入,需要的功能有入棧、出棧、顯示。
應用int13h中斷例程對磁盤進行讀寫
3.5英寸軟盤分為上下兩面,每面有80個磁道,每個磁道又分為18個扇區,每個扇區的大小為512個字節。
則:2面80磁道18扇區*512字節=1440KB~=1.44MB
磁盤的實際訪問由磁盤控制器進行,我們可以通過控制磁盤控制器來訪問磁盤。只能以扇區為單位對磁盤進行讀寫。在讀寫扇區的時候,要給出面號、磁道號和扇區號。面號和磁道號從0開始,而扇區號從1開始。
如果我們通過直接控制磁盤控制器來訪問磁盤,則需要涉及許多硬件細節。BIOS提供了對扇區進行讀寫的中斷例程,這些中斷例程完成了許多復雜的和硬件相關的工作。我們可以通過調用BIOS中斷例程來訪問磁盤。
BIOS提供的訪問磁盤的中斷例程為int 13h。