這是我的第一個問題。程式的本質是逐個字符讀取行,禁止外來字符,如F1、F2、Insert鍵等或與CTRL組合(Ctrl c =>心形符號)
我的部分代碼如下:
main:
mov si, 0
mov ax,@data
mov ds, ax
lea dx,message
mov ah, 09h ;print message
int 21h
mov ax, 40h ; load segment into AX
mov es, ax
read_loop:
mov ah, 00h
test byte ptr es:[17h], 04h ; is CTRL pressed?
jnz read_loop
int 16h
cmp al, 0 ;check ASCII
jne ASCII
mov ah, 00h
int 16h
jmp read_loop
ASCII:
cmp ah, 14
je read_loop
cmp al, 13 ; ENTER?
je next
test byte ptr es:[17h], 04h ; is CTRL pressed?
jnz read_loop
mov str_record[si], al
mov ah, 02h ; display
mov dl, al
int 21h
inc si
cmp si, 40 ;check max_len
je next
jmp read_loop
next:
cmp str_record[0], '$'
je quit
mov al, 3
int 10h
mov di, 0
mov ax, 3
int 10h
mov ah, 02h
mov dh, 2
mov dl, 15
int 10h
我正在嘗試使用鍵盤切換狀態標志檢查 ctrl 是否被按下但是當我釋放鍵時,我與 CTRL 一起按下的所有按鈕都會被列印出來
uj5u.com熱心網友回復:
cmp al, 0 ;check ASCII jne ASCII mov ah, 00h int 16h
在接收到 0 后再次詢問某些 DOS 鍵盤相關功能的操作方式是典型的。BIOS 鍵盤功能不能那樣作業!
不允許特殊鍵干擾您的結果的更實用的解決方案是只接受 ASCII 碼為 32 或更多的鍵。當然是一個例外Enter。
read_loop:
mov ah, 00h
int 16h
cmp al, 13 ; ENTER?
je next
cmp al, 32 ;check ASCII
jb read_loop
mov str_record[si], al
mov ah, 02h ; display
mov dl, al
int 21h
inc si
cmp si, 40 ;check max_len
jne read_loop
next:
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/527627.html
標籤:部件键盘masm剂量盒
