1. 程式人生 > >鍵盤的輸入處理過程

鍵盤的輸入處理過程

其實鍵盤上的每一個鍵相當於一個開關,鍵盤中有一個晶片對鍵盤上的每一個鍵的開關狀態進行掃描,當我們按下了一個鍵之後,開關會接通,這個晶片就會去產生一個掃描碼,掃描碼說明按下的鍵在鍵盤的什麼位置,然後掃描碼會被送入主機板相關介面晶片的暫存器當中,這個暫存器的埠地址為60h,也就是說我們可以從中去讀取出鍵盤的輸入的掃描碼,比如說in al,60h 就是從埠60h讀出鍵盤的輸入

當我們鬆開按下鍵的時候也會去產生一個掃描碼,這個掃描碼說明了鬆開的鍵在鍵盤上的位置,鬆開按鍵時產生的掃描碼也被送入60h埠中

一般來說按下一個鍵的時候產生的掃描碼稱為通碼,鬆開一個鍵產生的掃描碼稱為斷碼,掃描碼長度為一個位元組,通碼的第7位為0,而斷碼的第7位為1

也就是說 斷碼 = 通碼 + 80h

鍵盤上的部分掃描碼如下所示
這裡寫圖片描述
這裡寫圖片描述

其實在當鍵盤的輸入到達了60h埠的時候,相關的晶片就會向CPU發出中斷型別碼為9 的可遮蔽中斷資訊,CPU檢測到該中斷資訊之後,如果IF=1,則響應中斷,引發中斷過程,就會去執行int 9的中斷例程

BIOS是提供了int 9的中斷例程,是用來進行基本的鍵盤輸入處理,主要工作如下所示

  • 1、讀出60h埠中的掃描碼
  • 2、如果是字元鍵的掃描碼就會將這個掃描碼和它所對應的ASCII碼送入記憶體當中的BIOS鍵盤緩衝區,如果是像ctrl這樣的掃描碼就會先將它轉換為狀態位元組(用二進位制位記錄控制鍵和切換鍵狀態的位元組)寫入到記憶體中儲存狀態位元組的單元
  • 3、對鍵盤系統進行相關的控制,比如說,向相關的晶片發出應答資訊

BIOS鍵盤緩衝區是系統啟動之後,BIOS用於存放int 9 中斷程式所接收的鍵盤輸入的記憶體區,這個記憶體區可以儲存15個鍵盤輸入,在BIOS鍵盤緩衝區當中,一個鍵盤輸入用一個字單元來表示,高位位元組存放掃描碼,低位位元組存放字元碼,在0040:17單元是儲存鍵盤狀態位元組,這個位元組記錄了控制鍵和切換鍵的狀態

鍵盤狀態位元組各位的記錄資訊如下所示
這裡寫圖片描述

其實鍵盤輸入的處理的過程如下所示

  • 1、鍵盤產生掃描碼
  • 2、掃描碼送入60h埠
  • 3、引發9號中斷
  • 4、CPU執行int 9中斷程式處理鍵盤輸入