【发布时间】:2019-03-22 08:33:20
【问题描述】:
我想知道 x86-64 中的汇编级别是否有任何东西可以让您休眠/wait,这样在等待完成之前不会运行任何指令。我看过 WAIT 和 PAUSE 说明,但我不确定它们是否相关。
我会这样想:
start:
wait 123, oninterrupt ; 123 milliseconds
; then it will go here after that time
oninterrupt:
; ctrl-c pressed, now exit
同样,我想知道 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
但我不只是考虑 CTRL+C,而是考虑任何事件(我不太了解)。我看到了这个tiny event loop lib in C,不确定是否可以通过简单的汇编指令来完成。诸如键盘事件、套接字事件、文件事件、其他事件之类的事情我不确定它们会是什么。
此外,这将在操作系统上以普通用户身份运行。但是知道如何为特权用户做这件事会很高兴。而且也不关心如何使用 linux C 函数或系统调用来做到这一点,到目前为止,我了解如何做到这一点。
【问题讨论】:
-
该 C 将编译为进行系统调用的 asm(通过 libc 中的包装函数,但如果需要,您可以内联它们)。如果您的代码应该在操作系统下运行,“睡眠”是与进程调度程序/操作系统的交互,而不是直接与 CPU 硬件交互。 \@fuz 的答案是您真正想要的,尽管 \@prl 的答案确实正确回答了您根据 XY 问题提出的字面问题。
标签: assembly x86-64 sleep event-loop instructions