如何在AX寄存器而不是扫描代码中获取ASCII代码

时间:2019-01-24 18:03:50

标签: assembly emu8086 dosbox

我正在编写一个程序,该程序打印使用键盘硬件中断在键盘上按下的键,当按下键时,我编写的代码将根据字符的扫描代码打印值。 使用int 16h时,ah = 01h 程序要返回 AH = BIOS扫描码 AL = ASCII字符 但事实并非如此,这是我到目前为止所做的代码。

alah中的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',依此类推...因为这些是我猜测的一行中的扫描代码

0 个答案:

没有答案