使用c++以及x86和x64体系结构访问处理器中断

Access processor interrupts with c++ and x86 and x64 architectures

本文关键字:体系结构 访问 处理器 中断 x64 c++ 以及 x86 使用      更新时间:2023-10-16

我想知道是否可以从c++代码访问处理器中断(我想我需要使用汇编代码)。

事情是这样的。我习惯于使用嵌入式系统(PIC、ARM7和Atmel处理器),我可以毫无问题地对中断进行编程(我使用C)。所有寄存器都被映射,总而言之,这很容易,具体取决于应用程序。现在我正在使用x86和x64体系结构,我希望(强调want)能够在这些处理器中做同样的事情。

例如:我想让c++中的一个线程运行一个代码,在不按回车键(cin、getchar等)的情况下不断验证当前按下的键。我想编程一个定时器中断,这样我就可以在特定的时间执行操作。我知道我想做的很多事情都可以通过操作系统完成,但我真的想有自己做的自由。

目前我使用的是Linux(Ubuntu),但我肯定很快就会使用Windows,如果这是回答这个问题所需的信息,

对于用户级进程,中断由信号代替。您可以通过调用setitimer来安排将信号发送到您的进程。但最有可能的是,做你想做的事情的最好方法是两件事之一:

  1. 使用事件循环。基本上,把你的程序写成一个巨大的循环,定期检查是否有什么需要做的。在循环中,检查时间,检查按键,等等。做一些你需要做的事情,然后再次循环。

  2. 使用螺纹。您可以有一个线程来监视时间和触发计时器作业。您可以有一个线程阻塞read,以便在数据到达时充当中断。

很可能你已经意识到,你在中断处理程序本身中做的工作很少,通常只是将信息传递给在正常上下文中运行的其他代码。操作系统已经为您完成了这一部分。您只需要编写等待中断处理程序(或所需的任何程序)检测并开始处理事件的代码。

我想让c++中的一个线程运行一段代码,在不按回车键(cin、getchar等)的情况下不断验证当前按下的键。

那就这么做吧。这需要一个线程,并且需要将终端的输入模式更改为不需要回车键的模式。这与中断无关。

对于Windows:

Windows在隐藏低级别硬件访问(如访问cpu中断)方面做得很好,原因是win内核使用它们在进程和其他内部事务之间切换。因此,您将需要编写一个驱动程序来获得直接的硬件访问,或者让您的代码在执行环中执行<3(用户模式)。

但出于教育目的,你可以使用DOS甚至Windows DOS窗口,甚至可以模拟中断。当然,您将使用一些编译器,如Borland C++3.x(dos 16bit)。setvect和getvect可用于中断挂接。