如果x86程序集中有任何暂停/睡眠或事件

Lan*_*ard 1 assembly sleep x86-64 event-loop instructions

我想知道在x86-64的汇编级别上是否有任何东西可以让您进入睡眠/ 等待状态,以便在等待完成之前不执行任何指令。我已经看到了WAIT和PAUSE指令,但是不确定它们是否相关。

我会这样想:

start:
  wait 123, oninterrupt ; 123 milliseconds
  ; then it will go here after that time
oninterrupt:
  ; ctrl-c pressed, now exit
Run Code Online (Sandbox Code Playgroud)

同样,我想知道x86中是否有事件挂钩/处理程序。因此,如果有人按CTRL + C,将有一个中断事件发送到某个地方的程序集,您可以在其上运行“退出”代码。我想一个事件处理程序可以这样写在程序集x86中:

start:
  int 10, onctrlc ; register handler for made up event
  ; ... more instructions evaluate right after
onctrlc:
  ; control+c pressed, now exit
Run Code Online (Sandbox Code Playgroud)

但是我不仅在考虑CTRL + C,而且还在考虑任何事件(对此我不太了解)。我在C中看到了这个微小的事件循环库,不确定是否可以通过简单的汇编指令来完成。诸如键盘事件,套接字事件,文件事件,其他事件之类的东西我都不知道会是什么样。

同样,这将以常规用户身份在操作系统上运行。但是,知道如何为特权用户做到这一点很高兴。而且也不关心如何使用linux C函数或syscalls来实现,到目前为止,我知道如何做到这一点。

prl*_*prl 6

做你想要做的基本指令是HALT。它将停止执行指令,直到接收到中断为止。

MWAIT是更新的类似指令。它像暂停一样等待,但是当写入特定的内存位置(通过不同的CPU内核或通过I / O设备)时,它也会唤醒。MWAIT还使CPU处于比暂停状态更低的功耗状态。MONITOR指令用于指定将导致MWAIT唤醒的内存位置。

您提到的其他事件类型是软件结构。CPU指令不了解键盘,文件或网络设备。

MWAIT和HALT是特权指令。如果应用程序要使CPU进入睡眠状态,则通常需要调用OS,因此,如果有准备运行的操作系统,则OS可以安排其他进程。