彙編語言單字符輸入簡述

控制檯模式下的單字符輸入有些複雜。MS-Windows 爲當前安裝的鍵盤提供了驅動器。當一個鍵被按下時,一個 8 位的掃描碼 (scan code) 就被傳遞到計算機的鍵盤端口。當這個鍵被釋放時,就會傳遞第二個掃描碼。

MS-Windows 利用設備驅動程序將掃描碼轉換爲 16 位的虛擬鍵碼 (virtual-key code),即 MS-Windows 定義的用於標識按鍵用途的與設備無關數值。MS-Windows 生成含有掃描碼、虛擬鍵碼和其餘信息的消息。這個消息放在 MS-Windows 消息隊列中,並最終進入當前執行程序線程(由控制檯輸入句柄標識)。

若是想要進一步瞭解鍵盤輸入過程,請參閱 Platform SDK 文檔中的 About Keyboard Input 主題。虛擬鍵常數列表位於本教程 \Examples\chll 目錄下的 VirtualKeys.inc 文件中。

Irvine32 鍵盤過程 Irvine32 連接庫由兩個相關過程:






ide

  • ReadChar:等待鍵盤輸入一個 ASCII 字符,並用 AL 返回該字符。測試

  • ReadKey:過程執行無等待鍵盤檢查。若是控制檯輸入緩衝區中沒有等待的按鍵,則零標誌位置 1。若是發現有按鍵,則零標誌位清零且 AL 等於零或 ASCII 碼。EAX 和 EDX 的高 16 位被覆蓋。spa


若是 ReadKey 過程當中的 AL 等於 0,那麼用戶可能按下了特殊鍵(功能鍵、光標箭頭等)。AH 寄存器爲鍵盤掃描碼。DX 爲虛擬鍵碼,EBX 爲鍵盤控制鍵狀態信息。

下表爲控制鍵值列表。調用 ReadKey 以後,能夠用 TEST 指令檢查各類鍵值。





線程

含義 含義
CAPSLOCK_ON CAPSLOCK 指示燈亮 RIGHT_ALT_PRESSED 右 ALT 鍵被按下
ENHANCED_KEY 被按下加強的 RIGHT_CTRL_PRESSED 右 CTRL 鍵被按下
LEFT_ALT_PRESSED 該鍵是左 ALT 鍵 SCROLLLOCL_ON SCROLLLOCK 指示燈亮
LEFT_CTRL_PRESSED 左 CTRL 鍵被按下 SHIFT_PRESSED SHIFT 鍵被按下
NUMLOCK_ON NUMLOCK 指示燈亮

ReadKey 測試程序

下面是 ReadKey 測試程序:等待一個按鍵,而後報告按下的是否爲 CapsLock 鍵。程序應考慮延遲因素,以便在調用 ReadKey 時留出時間讓 MS-Windows 處理其消息循環:
code


; 測試 ReadKey    ( TestReadkey. asm)INCLUDE Irvine32.incINCLUDE Macros.inc.codemain PROCL1: mov    eax,10             ; 消息處理帶來的延遲    call    Delay    call    ReadKey           ; 等待按鍵    jz    L1    test    ebx,CAPSLOCK_ON       jz    L2    mWrite <"CapsLock is ON",0dh,0ah>    jmp    L3L2:    mWrite <"CapsLock is OFF",0dh,0ah>L3:    exitmain ENDPEND main



圖片

相關文章
相關標籤/搜索