【发布时间】:2016-09-28 09:36:05
【问题描述】:
我有这个代码:
bits 16
org 0x7C00
start: jmp main
key: dw 0x1e, 'a', 0x30, 'b'
print:
mov ah, 0x0E
int 0x10
keyboard:
cli
in al, 0x64
test al, 1
jz return
test al, 0x20
jnz return
in al, 0x60
call convert
call print
sti
convert:
mov bx, 0
.LOOP:
cmp al, [key+bx]
je .conv
add bx, 2
jmp .LOOP
.conv:
mov al, [key+bx+1]
ret
return:
ret
main:
call keyboard
jmp main
times 510 - ($-$$) db 0
dw 0xAA55
它会检查按键情况,每次我按下一个键时,我都会将它保存到注册 al 然后想打印出来。
但它只是被保存的扫描码,我需要用 ASCII 字符替换它,我用数组“键”来做,但它不起作用,只打印出 1 个键,然后程序只是滞后。
【问题讨论】:
-
当然,如果你按键它不会识别。你只有一个退出条件:当它找到与键码匹配的时候。如果没有,它将继续通过内存,直到找到一个。如果那段内存中没有一个,它将永远循环。
-
我只按a和b..
-
也许你想要一个字节数组 (
db)? -
另外 0x9c for key b 听起来有点奇怪
-
也许你应该考虑 256 字节长的表:
scancode_to_ascii: db ascii_char_for_scancode_0, ascii_char_for_scancode_1, ...然后转换将是:xor bx,bx mov bl,al mov al,[scancode_to_ascii+bx]...顺便说一句,in指令不会“等待”一些按键,所以你正在尝试打印“无扫描码”值。
标签: assembly ascii non-ascii-characters scancodes