访问处理器中断与c + +和x86和x64体系结构

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

这是事情。 我习惯于使用embedded式系统(PIC,ARM7和Atmel处理器),我可以编程我的中断没有任何问题(我使用C)。 所有寄存器都是映射的,总而言之,这很容易,取决于应用程序。 现在我正在使用x86和x64架构,我希望(强调WANT )能够在这些处理器中做同样的事情。

例如:我想在c ++中有一个线程运行一个代码,不断validation当前按下的键,而不按下回车键(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 16位)。 setvect和getvect可用于中断挂钩。