免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1662 | 回复: 4
打印 上一主题 下一主题

[内核模块] 键盘中断没看明白,求助。 [复制链接]

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:57:09C
日期:2016-10-25 16:17:59
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 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吧。
求明白,谢谢!

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:57:09C
日期:2016-10-25 16:17:59
2 [报告]
发表于 2012-10-02 18:29 |只看该作者
咋都是 无痕过客 ???

论坛徽章:
0
3 [报告]
发表于 2012-10-05 02:55 |只看该作者
本帖最后由 sonicling 于 2012-10-05 02:56 编辑

你自己理解错了。再仔细想想吧。

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:57:09C
日期:2016-10-25 16:17:59
4 [报告]
发表于 2012-10-06 09:33 |只看该作者
网易-键盘扫描码.rar (9.86 KB, 下载次数: 4)

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:57:09C
日期:2016-10-25 16:17:59
5 [报告]
发表于 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。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP