列定义添加到Yield()定义之后即可:
.macro Mouse() SVC(8)
这是第9个管理程序调用,它对位于SVC_UUO的当前代码进行修改,以便正确处理8个管理程序调用,所以你需要进行适当修改。
测试你的实现方案:一旦执行完你的Mouse(),恰好在P2Start后面添加一条Mouse()指令。如果一切正确运转,这个用户模式处理程序现在应该马上挂起,并且不会增加Count3的值,即使你键入了多个句子(也就是说,提示信息将会永远是“00000000>”)。现在,在控制面板上单击一下鼠标,然后键入更多句子。提示符应当读作“00000001>”。当任务完成时,请记住要删去你所增加的Mouse()指令。
步骤3:添加负责报告鼠标单击的第四个用户模式程序(6分)
修改核心程序,以便添加对第四个用户模式程序的支持。为调用Mouse()的新程序添加用户模式代码,然后打印以下形式的信息:
Click at x=0000000EE, y=00000041
每个单击消息都应该出现在一行(也就是说,这条消息的前后都是换行符)。你可以用WrMsg()和HexPrt()来发送消息;参见进程0的代码,以便查看有关怎样实现该操作的一个例子。
测试你的实现方案:如果三个部分都正确运转的话,当你在控制面板上单击鼠标时,就应该打印出合适的消息。你会发现使用“.breakpoint”命令来调试你的用户模式代码是很有必要的。
步骤4:与其他I/O同步的鼠标报告(3分)
使用信号量来协调用户模式处理程序的操作,使单击消息仅出现在提示符输出以后但又在你开始键入将要被翻译的句子之前。换句话说,一旦你开始键入某个句子,单击消息将会被延迟,直到下一个提示符后才会显示。
测试你的实现方案:开始键入一个句子,然后单击鼠标。单击消息应该在翻译完成后打印出来,并且是在下一个提示符打印出来以后才会被打印出来。