键盘I/O中断调用(INT 16H)和常见的int 17H、int 1A H
說明:下文為轉載的,下文中的“擴展碼”其實就是“掃描碼(scan code)”的意思
鍵盤掃描碼:是每個鍵盤生產廠家為自己所生產的鍵盤設置的掃面方式,目的檢測是那個鍵被按下。掃描碼 是鍵盤對應按鍵的編碼 (有關掃描碼,具體可參考它)
鍵盤I/O中斷調用有三個功能,功能號為0, 1, 2,且必須把功能號放在AH中。
(1)0號功能調用 格式:MOV AH, 0
INT 16H
功能:從鍵盤讀入字符送AL寄存器。執行時,等待鍵盤輸入,一旦輸入,字符的ASCII碼放入AL中。若AL=0,則AH為輸入的擴展碼。
(esc鍵的ascii碼十進制表示為27,二進制表示為0001 1011,十六進制表示為1B) cmp al,1bh ;可以判斷剛才輸入的字符是否是escape
(2)1號功能調用
格式:MOV AH, 01H
INT 16H
功能:用來查詢鍵盤緩沖區,對鍵盤掃描但不等待,并設置ZF標志。若有按鍵操作(即鍵盤緩沖區不空),則ZF=0,AL中存放的是輸入的ASCII碼,AH中存放輸入字符的擴展碼。若無鍵按下,則標志位ZF=1。
(3)2號功能調用
格式: MOV AH, 02H
INT 16H
功能:檢查鍵盤上各特殊功能鍵的狀態。執行后,各種特殊功能鍵的狀態放入AL寄存器中,
這個狀態字記錄在內存0040H:0017H單元中,若對應位為“1”,表示該鍵狀態為“ON”,處于按下狀態;若對應位為“0”,表示該鍵狀態為“OFF”,處于斷開狀態。
【例4.46】
MOV AH, 02H
INT 16H ; 取鍵盤狀態到AL中
AND AL, 0000 0100B ; 檢查Ctrl鍵是否按下
JNZ CTRL-ON
CTRL-ON: …
檢查Ctrl鍵是否按下,若按下,則控制轉移到某個程序段執行
下面這個可能更加清楚一點兒(來源:https://bbs.csdn.net/topics/320108074?lis):
鍵盤服務(Keyboard Service——INT 16H)
00H、10H —從鍵盤讀入字符03H —設置重復率
01H、11H —讀取鍵盤狀態04H —設置鍵盤點擊
02H, 12H —讀取鍵盤標志05H —字符及其掃描碼進棧
(1)、功能00H和10H
功能描述:從鍵盤讀入字符
入口參數:
AH=00H——讀鍵盤
=10H——讀擴展鍵盤,可根據0000:0496H單元的內容判斷:擴展鍵盤是否有效
出口參數:AH=鍵盤的掃描碼
AL=字符的ASCII碼
(2)、功能01H和11H
功能描述:讀取鍵盤狀態
入口參數:AH=01H——檢查普通鍵盤
=11H——檢查擴展鍵盤
出口參數:ZF=1——無字符輸入,否則,AH=鍵盤的掃描碼,AL=ASCII碼。
(3)、功能02H和12H
功能描述:讀取鍵盤標志
入口參數:AH=02H——普通鍵盤的移位標志
=12H——擴展鍵盤的移位標志
出口參數:AL=鍵盤標志(02H和12H都有效),其各位之值為1時的含義如下: 位7—INS開狀態位3—ALT鍵按下
位6—CAPS LOCK開狀態位2—CTRL鍵按下
位5—NUM LOCK開狀態位1—左SHIFT鍵按下
位4—SCROLL LOCK開狀態位0—右SHIFT鍵按下
AH=擴展鍵盤的標志(12H有效),其各位之值為1時的含義如下:
位7—SysReq鍵按下位3—右ALT鍵按下
位6—CAPS LOCK鍵按下位2—右CTRL鍵按下
位5—NUM LOCK鍵按下位1—左ALT鍵按下
位4—SCROLL鍵按下位0—左CTRL鍵按下
(4)、功能03H
功能描述:設置重復率
入口參數:AH=03H 對于PC/AT和PS/2:AL=05H
BH=重復延遲
BL=重復率
對于PCjr:AL=00H——裝入缺省的速率和延遲
=01H——增加初始延遲
=02H——重復頻率降低一半
=03H——增加延遲和降低一半重復頻率
=04H——關閉鍵盤重復功能
出口參數:無
(5)、功能04H
功能描述:設置鍵盤點擊
入口參數:AH=04H AL=00H——關閉鍵盤點擊功能
=01H——打開鍵盤點擊功能
出口參數:無
(下面來源:http://blog.sina.com.cn/s/blog_658c0c230100mxl0.html)
BIOS中斷 INT 17H, INT 16H ,INT 1AH
1、INT 17H(打印機I/O調用)INT 17H中斷處理程序有三個功能:
當AH=0時,把AL中的字符在打印機上打印出來。
當AH=1時,把AL中的初始化控制命令送給打印機。
當AH=2時,把打印機的狀態讀至AL寄存器。
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
| 忙 | 確認 | 有紙 | 聯機 | 錯誤 | \ | \ | 超時 |
2、INT 16H(鍵盤I/O中斷)
AH=0:從鍵盤讀入ASCII字符,放在AL中。
AH=1:測試有無鍵被按下。ZF=0,表示按過任意鍵,并在AL中獲得該鍵的ASCII碼。ZF=1,未按過鍵。
AH=2:讀取特殊功能鍵的狀態至AL中。
| D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
| Ins | CapsLock | NumLock | ScrollLock | Alt | Ctrl | 左Shift | 右Shift |
3、 INT 1AH (BIOS日期、時間中斷)
AH=0:讀當前時鐘值到CX、DX中。CX為高位,DX為低位。時鐘單位是54.9ms(1/18.2秒)(65536000/1193180)。
AH=1:設置當前時鐘值。
?
總結
以上是生活随笔為你收集整理的键盘I/O中断调用(INT 16H)和常见的int 17H、int 1A H的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编中的扫描码、ASCII码(也称字符码
- 下一篇: 常用的键盘按键(一些小技巧)