状态寄存器错误

Bad status register?

本文关键字:错误 寄存器 状态      更新时间:2023-10-16

正在处理一个项目。教授给了我们一个包含一些测试的.zip文件,因此我们可以查看我们的项目是否正常工作。我们正在用 c++ 构建一个小内核。

无论如何,有一个线程等待键盘中断(event9.wait()),之后它应该将字符放入缓冲区或结束程序(如果您按"esc")。

while (!theEnd) {
        event9.wait();
        status = inportb(0x64); // reading status reg. from 64h
        while (status & 0x01){ //while status indicates that keys are pressed
                ....

检查了一下,我确信它会定期等待中断。出现此问题的原因是状态 &0x01 为 0。

然后我得到了从0x60中获取字符的代码部分,它工作得很好。

测试文件的代码有问题吗?如果是,怎么办?如果代码正确,什么可能导致问题?

我可以更改测试文件,但我需要一个很好的理由来这样做。到目前为止,我唯一的原因是它不起作用。

*注意:评论是从塞尔维亚语翻译而来的,但我几乎可以肯定它们翻译正确。

我认为status & 0x01完全没问题。但是,您需要在读取端口 0x60 后再次读取端口 - 很可能稍后在代码中执行此操作,但我个人只会将代码重写为:

    while ((status = inportb(0x64)) & 0x01){ //while status indicates that keys are pressed
            ....

请注意,在这种情况下,您不应在循环中再次读取端口 0x64。