我正在编写一个程序,该程序打印使用键盘硬件中断在键盘上按下的键,当按下键时,我编写的代码将根据字符的扫描代码打印值。
使用int 16h
时,ah = 01h
程序要返回
AH = BIOS扫描码
AL = ASCII字符
但事实并非如此,这是我到目前为止所做的代码。
al
或ah
中的ASCII码都不存在,现在我听说我需要从BIOS中获取它们,或者它必须与ISR和PIC板做某些事情... < / p>
[org 100h]
jmp start
kbisr:
push ax
push es
mov ax,0xb800
mov es,ax
in al,0x60
cmp cl, 0
je keypress
jmp keyrelease
keyrelease:
mov cl, 0
jmp nomatch
keypress:
; need changes here i guess..
mov cl, 1
add al,67
and al,01111111b
mov byte[es:3600],al
jmp nomatch
nomatch:
mov al,0x20
out 0x20,al
pop es
pop ax
add di,2
iret
start:
mov di,0
xor ax,ax
mov es,ax
cli
mov word[es:9*4],kbisr
mov [es:9*4+2],cs
sti
l1:
jmp l1
当按a时应打印'a',按b时应打印'b',依此类推。 当前设置为当按下a时打印'a',当按下s时打印'b',当按下d时打印'c',依此类推...因为这些是我猜测的一行中的扫描代码