基本輸入輸出系統BIOS 鍵盤輸入

2022-04-06 17:37:51 字數 2748 閱讀 2898

基本輸入輸出系統bios概述

硬碟作業系統dos建立在bios的基礎上,通過bios操縱硬體,例如dos呼叫bios顯示i/o程式完成輸入顯示,呼叫列印i/o完成列印輸出

通常應用程式應該呼叫dos提供的系統功能完成輸入輸出或者其他操作,這樣做不僅容易實現,而且對硬體依賴性最少,但是有時候dos不提供某種服務,因此就不能利用dos實現

也就是說,bios比dos更加接近於硬體

鍵盤輸入:

鍵盤中斷處理程式

當使用者按鍵時,鍵盤介面上會得到乙個代表被按鍵的鍵盤的掃瞄碼,同時產生乙個中斷請求,如果中斷請求時允許的(中斷遮蔽字的位1為0 )並且cpu處於開中斷狀態,那麼cpu通常就會相應中斷請求,由於鍵盤中斷型別安排為9,所以cpu響應鍵盤中斷,就是轉入9號中斷處理程式,我們把9號中斷處理程式稱為鍵盤中斷處理程式

鍵盤中斷處理程式首先從鍵盤介面取得代表按鍵的掃瞄碼,然後根據掃瞄碼判定使用者所按下的鍵盤並作出相應的處理 最後通知中斷控制器中斷結束並實現中斷返回

我們把鍵盤上簡單地分成5種型別,字元鍵盤(字母,數字還有符號)功能鍵(如f1和pgup)控制鍵(ctrl,alt和左右shift)雙態鍵盤(numlock,caps lock)特殊請求鍵盤(print screen)鍵盤中斷處理程式對五種鍵盤的處理方法如下

如果使用者按下的是雙態鍵盤,那麼就設定標誌位,在at以後上檔次的系統要求改變led指示器的狀態

如果使用者按下的是控制鍵,那麼就設定有關標誌位

如果使用者按下的是功能鍵,那麼就根據鍵盤掃瞄嗎和時候按下某些控制鍵如(alt)確定系統掃瞄碼把系統掃瞄碼存入緩衝區,

如果使用者按下的是字元,那麼就根據掃瞄碼和ascii一起存入鍵盤的緩衝區

如果使用者按下的是特殊請求鍵,那麼就呼叫對應的中斷進行處理

緩衝區鍵盤緩衝區是乙個  先進先出的環形佇列,佇列占用的記憶體區域如下

buff_hade  dw  ?

buff_tail dw  ?

kb_buffer  dw  16 dup(?)

buff_hade和buff_tail是緩衝區的頭指標和尾指標,這兩個指標相等表示緩衝區為空,由於緩衝區本身長度為16個字,而存放乙個鍵盤的掃瞄碼和ascii需要占用乙個字,所以鍵盤緩衝區實際可以存放15個鍵的掃瞄碼和ascii,鍵盤的中斷程式吧所按下的字元鍵或功能鍵的掃瞄碼和ascii依次存入緩衝區,如果緩衝區已經滿了,那麼發出嘟的一聲

鍵盤的i/o 程式

鍵盤的i/o程式以16h號中斷處理程式的形式出現,它屬於軟中斷處理程式這一類,他的主要功能是進行鍵盤輸入,在一般情況下面,系統程式和應用程式的鍵盤輸入都是有他完成的,簡單地鍵盤i/o程式從鍵盤緩衝區中取出所按下的ascii碼和掃瞄碼返回給呼叫者

鍵盤i/o的呼叫方法,呼叫鍵盤i/o功能,吧功能編號置入ah暫存器,然後發出中斷指令int  16h

主要功能標號

ah = 0,從鍵盤中讀走乙個字元,al = ascii,ah = 字元掃瞄碼

ah = 1,判斷有無按鍵可讀,zf = 1,表示無按鍵可讀,zf = 0,表示有按鍵可讀

ah = 2,表示變換按鍵當前狀態

從鍵盤中讀取乙個字元

mov ah , 0

int 16h

例題1:程式功能,;程式功能:寫乙個程式完成如下功能,讀取鍵盤,並把所按的鍵顯示出來,在檢測到按下shift的時候,就結束執行

1

;程式功能:寫乙個程式完成如下功能,讀取鍵盤,並把所按的鍵顯示出來,在檢測到按下shift的時候,就結束執行2;

3 l_shift =00000010b

4 r_shift =00000001b

5cseg segment

6assume cs:cseg

7 start:mov ah,2

;取變換鍵狀態位元組

8int 16h

9 test al,l_shift+r_shift ;判斷是否按下shift

10jnz over;

11 mov ah,1

;判斷是否有按鍵按下

12int 16h;

13jz start;

14 mov ah,0

;有的話讀取按鍵

15int 16h;

16mov dl,al;顯示所讀按鍵

17 mov ah,6;18

int 21h;

19jmp start;

20over:mov ah,1h

21int 21h

22mov ah,4ch

23int 21h

24cseg ends

25 end start

view code

首先,取變換鍵狀態位元組,進行判斷是否按下了shift,

mov  ah,2取變換鍵狀態位元組

int

16test al,l_shift+r_shift jnz over

在呼叫0號功能之前,檢測是否有按鍵可讀

mov ah,1;判斷時候有按鍵按下

int 16h

jz start

如果有按鍵按下,讀取鍵盤

mov ah,0int 16h
顯示所讀按鍵,呼叫顯示功能

mov dl,al

mov ah,

6int 21h

jmp start

基本輸入輸出系統BIOS 顯示輸出

顯示器通過顯示適配卡與系統相連,顯示適配卡是顯示輸出的介面卡,照相的顯示器是cga和ega,目前的顯示適配卡是vga和tvga,他們都支援兩種顯示方式,文字顯示和圖形顯示 在bios中提供的顯示i o程式作為10h號中斷處理程式存在 顯示i o程式的主要功能有0到13個功能,應根據設定 設定好入口引...

輸入輸出系統

早期 介面模組和dma階段 具有通道結構的階段 軟體io指令 cpu指令的一部分 通道指令 首位址 傳送字數 操作命令 硬體io裝置 io介面 裝置控制器 通道 io裝置編址 統一編址 取數存數指令 單獨編址 專門的io指令 裝置選址 傳送方式 序列 並行 聯絡方式 立即響應 led 非同步工作 序...

Python 基本輸入輸出

1.輸出 print hello,world python3中print需要加 print hello,world 多個字串之間用 逗號連線 print hello world 且遇到逗號會輸出乙個空格。2.注釋 python中用 注釋 print hello 3.變數 python中定義變數時不需...