Я создаю программу, которая печатает клавишу, которая нажата на клавиатуре, с использованием аппаратных прерываний клавиатуры, написанный мною код печатает значение против кода сканирования символа, когда клавиша нажата.при использовании int 16h
, ah = 01h
программа должна вернуть AH = код сканирования BIOS AL = символ ASCII, но это не так, вот мой код, который я сделал до сих пор ..
коды ASCII отсутствуютгде в al
или ah
теперь я слышал, что мне нужно получить их из BIOS или что-то делать с платой ISR и PIC ...
[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 печатает' b 'при нажатии s печатает' c 'при нажатии d и так далее ..потому что это коды сканирования в строке, я думаю,