我想使用箭头键在汇编语言中指导一个形状,我的代码是这样的:
call getkey
cmp al, ...
je direct
如果用户按下箭头键,我应该把它放到哪个诊断区?
答案 0 :(得分:5)
这在DOS下适用于我(在DOSBox下测试):
[org 0x100]
repeat:
; Get keystroke
mov ah,0
int 0x16
; AH = BIOS scan code
cmp ah,0x48
je up
cmp ah,0x4B
je left
cmp ah,0x4D
je right
cmp ah,0x50
je down
cmp ah,1
jne repeat ; loop until Esc is pressed
mov ah,0x4c
int 0x21
up:
mov dx,upstring
mov ah,9
int 0x21
jmp repeat
down:
mov dx,downstring
mov ah,9
int 0x21
jmp repeat
left:
mov dx,leftstring
mov ah,9
int 0x21
jmp repeat
right:
mov dx,rightstring
mov ah,9
int 0x21
jmp repeat
upstring db "Up pressed",13,10,'$'
downstring db "Down pressed",13,10,'$'
leftstring db "Left pressed",13,10,'$'
rightstring db "Right pressed",13,10,'$'
如果你不能/不想使用int 0x16
(例如因为你需要读取非阻塞),你可以尝试从端口0x60读取。
答案 1 :(得分:1)
考虑al包含键值,将键值与所需箭头的ascii值进行比较。 请尝试以下ascii值 37(左箭头) 38(向上箭头) 39(右箭头) 40(向下箭头)
答案 2 :(得分:1)
我记得在DOS下使用16h(或21h)中断,第一次提供0,然后你必须再次读取密钥才能获得实际代码。功能键和“插入”或“主页”之类的东西也是如此。只有可以映射到ASCII的密钥直接在一个中断调用中进行。也许这也适用于此。
答案 3 :(得分:1)
键盘缓冲区位于段0,偏移1054(十六进制41E)
downarrow是0150
uparrow是0148
左箭头是014B
右箭头是014D
答案 4 :(得分:0)
这取决于你在getkey函数中为密钥检测做了什么。 大多数情况下,如果您直接进行硬件访问,则会以扫描代码的形式返回密钥。你应该寻找scan codes table