完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#inlcude
.text .globl _keyboard_interrupt size =1024 //键盘缓冲区的长度 head =4 //缓冲区开头指针字段偏移。 tail =8 //缓冲区尾指针字段偏移 proc_list =12 //等待改缓冲区队列的进程字段偏移 buf =16 //缓冲区字段偏移 /*mode是键盘特殊的按下状态标志 表示大小写转换键(caps)、交换键(alt)、控制键(ctrl)和换挡键(shift)的状态。 位7 caps键按下: 位6 caps键的状态(应该与leds中的对应标志位一样): 位5 右alt键按下: 位4 左alt键按下: 位3 右ctrl键按下: 位2 左ctrl键按下: 位1 右shift键按下: 位0 左shift键按下。*/ mode: .byte 0 //caps,alt,ctrl and shift mode //数字锁定键(num-lock)、大小写转换键(caps-lock)和滚动锁定的leds发光管状态 //位7-3 全0不用 //位2 caps-lock //位1 num-lock(初始设置1;也即设置数字锁定键(num-lock on)) //位0 scroll-lock leds: .byte 2 //num-lock,caps,scroll-lock(num-lock on) //当扫描码是(0xe0或者0xe1时),置改标志,表示起手还跟着1个或者2个字符扫描码 //位1 =1 收到0xe0标志 //位0 =1 收到0xe1标志 e0: .byte 0 /* con_int 是实际的中断处理子程序,用于读键盘扫描码并将其转换成相应的ascii字符 */ ////键盘中断处理程序入口 _keyboard_interrupt: pushl %eax pushl %ebx pushl %ecx pushl %edx pushl %ds pushl %es movl $0x10,%eax mov %ax,%ds mov %ax,%al xorl %al,%al inb $0x60,%al cmpb $0xe0,%al je set_e0 cmpb $0xe1,%al je set_e1 call key_table(,%eax,4) movb $0,e0 ......(略) |
|
相关推荐
3个回答
|
|
首先,你的这个文件名应该是linux/kernel/keyboard.S ,从.S就可以说明,它不是C语言文件 ,而应该是汇编语言,至于是什么语法,这个要看具体的CPU芯片,虽然汇编语言有许多相似的地方,但具体的芯片或公司有略微的差别,故不能简单地说是Intel x86汇编语法。另外,后缀为大S,引入c++预编译,使得汇编程序可以用预处理命令。其次 ,文件的最开始处的.text说明下面的程序或定义的变量,是可执行代码,即申明代码段(另外,一般还有.data,表示已初始化的数据段,.bss表示未初始化的数据段)。而.global指定了入口函数,其中keyboard_interrupt为入口函数的名字。
最后,mode、leds、e0表示定义的变量,它们的类型都是byte,并分别初始化为0,2,0。 希望可以帮助到你!
最佳答案
|
|
|
|
内核一般是用汇编写的。
|
|
|
|
表示不怎么会用键盘啊
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
769 浏览 0 评论
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
2583 浏览 1 评论
849 浏览 0 评论
1641 浏览 1 评论
2551 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 22:06 , Processed in 0.725143 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号