0

在一个项目上工作。教授给了我们一个 .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
                ....

我检查并确定它会定期等待中断。出现问题是因为 status&0x01 为 0。

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

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

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

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

4

1 回答 1

2

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

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

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

于 2013-01-26T19:43:22.540 回答