Chinaunix
标题:
键盘中断没看明白,求助。
[打印本页]
作者:
shaohui973
时间:
2012-10-02 13:23
标题:
键盘中断没看明白,求助。
内核版本 linux0.11
do_self:
lea alt_map,%ebx
testb $0x20,mode
/* alt-gr ,如果mode == 0x20,则表示按下了右键alt或ctrl;如果mode == 0x10,则表示按下了左键alt或ctrl*/
jne 1f
/* jne:不相等则跳转;jnz:不等于0则跳转*/
lea shift_map,%ebx
testb $0x03,mode
jne 1f
lea key_map,%ebx
1: movb (%ebx,%eax),%al
orb %al,%al
je none /*普通的按键从这返回*/
testb $0x4c,mode /* ctrl or caps */
je 2f
cmpb $'a,%al
jb 2f
cmpb $'},%al
ja 2f
subb $32,%al
2: testb $0x0c,mode /* ctrl */
je 3f
不明白的是红色字体。如果我按键按下的是普通的按键,比如“A”或者左键"ctrl",那么mode != 0x20,但是这段代码(jne 1f)却说明了,这种情况下是使用alt_map的,正常的情况下,应该使用的是key_map吧。
求明白,谢谢!
作者:
shaohui973
时间:
2012-10-02 18:29
咋都是 无痕过客 ???
作者:
sonicling
时间:
2012-10-05 02:55
本帖最后由 sonicling 于 2012-10-05 02:56 编辑
你自己理解错了。再仔细想想吧。
作者:
shaohui973
时间:
2012-10-06 09:33
网易-键盘扫描码.rar
(9.86 KB, 下载次数: 4)
2012-10-06 09:33 上传
点击文件名下载附件
作者:
shaohui973
时间:
2012-10-09 22:17
看明白了,汇编没理解对!
do_self:
lea alt_map,%ebx
testb $0x20,mode /* alt-gr ,这里的汇编含义:0x20 & mode,如操作结果为0,则将标志寄存器zf置位*/
jne 1f /* jne/jnz:标志寄存器eflag的ZF位没有被置位,则跳转*/
lea shift_map,%ebx
testb $0x03,mode
jne 1f
lea key_map,%ebx
1: movb (%ebx,%eax),%al
由于一般的按键,mode值为0,故testb $0x20,mode之后,eflag寄存器的zf位被置位,所以,不会跳转到标号1处,同理,最后,%ebx指向了key_map。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2