`
spartan1
  • 浏览: 359582 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ucore-project4: interrupt

 
阅读更多

中断处理程序总算调进去了,刚才调试主要有两个问题:

1. outb时,两个参数反了,输出参数放在了后面,而端口号放在了前面。究其原因,是直接抄ucore代码的后果。我的outb函数定义时,参数顺序与AT&T的outb指令参数顺序一样,输入值在前,输出值在后,而ucore的定义把他们反过来了,所以所有ucore调用outb的地方,都是端口在前,而输出数值在后。

 

2. %ds/%es等压栈时使用了pushw进行压栈。pushw一次只压两个字节到栈上,下次pushw时会挨着这两个自己继续压,pushw不会自动加padding,让自己总是四字节对齐。并且,即使压栈4个字节(使用pushl),x86 cpu也不会默认让它四字节对齐。

所以,在C代码中使用的trapframe中,假定es、ds等是四字节对齐的,从而添加了padding,反而出错了。

改过来后,现在中断可以发生了,不过应该每秒钟打印一次的始终中断,现在却没完没了,晚上回来在找原因。

 

总算中断可以出来了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics