装配中的关键处理程序
即时通讯工作在一个项目中女巫程序必须做几行代码时,特定的按键关闭(按下)我已经尝试使用Ah 1 int 21和AH 1 int 16并直接连接到键盘与in al , 60h
但所有这些似乎有一个大问题。 如果用户每次按下多个键,则程序无法检测到该键。 我真正需要的是在循环中读取输入缓冲区并执行特定键的代码。
这个代码示例运行在我的主循环中的每一帧:
;in al,60h
;mov cl,al
;in al,61h
;mov ah,al #Tried this didn't work...
;or al,80h
;out 61h,al
;mov al,ah
;out 61h,al
;mov al,cl
xor bx, bx
_poll_key:
mov ah, 01h
int 16h
jz _poll_key
xor ah, ah
int 16h
mov bl, al
call dispatch_key
jmp _poll_key
dispatch_key:
mov al , ah
;________________________________________
cmp al , 11h ; W HexScanCode
jne NotW
sub rbx , 160
mov ah , red
mov bx , rbx
mov es:[bx] , ah
NotW:
cmp al , 1Fh; S HexScanCode
jne NotS
add rbx , 160
mov ah , red
mov bx , rbx
mov es:[bx] , ah
NotS :
cmp al , 20h; D HexScanCode
jne NotD
add rbx , 2
mov ah , red
mov bx , rbx
mov es:[bx] , ah
NotD:
cmp al , 1Eh ; A HexScanCode
jne NotA
sub rbx , 2
mov ah , red
mov bx , rbx
mov es:[bx] , ah
NotA:
;Second Player___________________________________________________________________
cmp al , 17h ; I HexScanCode
jne NotI
sub bbx , 160
mov ah , blue
mov bx , bbx
mov es:[bx] , ah
NotI:
cmp al , 25h ; K HexScanCode
jne NotK
add bbx , 160
mov ah , blue
mov bx , bbx
mov es:[bx] , ah
NotK:
cmp al , 26h ; L HexScanCode
jne Notl
add bbx , 2
mov ah , blue
mov bx , bbx
mov es:[bx] , ah
Notl:
cmp al , 24h; J HexScanCode
jne Notj
sub bbx , 2
mov ah , blue
mov bx , bbx
mov es:[bx] , ah
Notj:
cmp al , 10h ; Q HexScanCode
je finish
;;;;;;;;;;;;;;;;;;;
;First Player
mov ah , blue
mov bx , bbx
;UP
sub bx , 160
mov es:[bx] , ah
add bx , 160
;Down
add bx , 160
mov es:[bx] , ah
sub bx , 160
;Right
add bx , 2
mov es:[bx] , ah
sub bx , 2
;Left
sub bx , 2
mov es:[bx] , ah
add bx , 2
;Second Player
mov ah , red
mov bx , rbx
;Up
sub bx , 160
mov es:[bx] , ah
add bx , 160
;Down
add bx , 160
mov es:[bx] , ah
sub bx , 160
;Right
add bx , 2
mov es:[bx] , ah
sub bx , 2
;Left
sub bx , 2
mov es:[bx] , ah
add bx , 2
;
此代码一次只能处理一个键......女巫不是我要找的东西
以下是一些最佳解决方案的蓝图:
loop:
LoopUntilInputBufferEmpty:
;{get ACII / ScanCode From Input Buffer}
cmp al , {...}
jne KeyHandel1
;Code
KeyHandel1
cmp al , {...}
jne KeyHandel2
;Code
KeyHandel2
cmp al , {...}
jne KeyHandel3
;Code
KeyHandel3:
cmp {bufferEmpty?} , {Yes}
jne LoopUntilBufferEmpty
;
;{All Main Loop Code}
jmp loop
SHORT:Handeling同时按几个键
任何人知道一种方法来实现这一目标?
- 谢谢
链接地址: http://www.djcxy.com/p/62705.html下一篇: Snake Game Assembly: increasing body length not working