计算机如何理解时间?没有等待的asm指令

How does the Computer understand time? There's no asm instruction for waiting

我一直在学习编程语言,有一个问题一直困扰着我。

例如,假设我编写了一些程序,允许我每 5 秒按下一个按钮。

计算机如何理解等待部分(允许按下按钮 - 等待 5 秒并再次允许)?

我已经知道第一种高级编程语言正在被编译成机器代码,以便计算机可以 运行 它。但是如果我们拿汇编来说,它非常接近机器码,只是人类可读的,没有等待的指令。

我给出的等待的例子只是一个例子,还有很多我不明白计算机是如何理解的;)

Cpu 内部有一个石英计时器 crystal,称为 cpu 时钟。当电流通过它时,它会给出一个预置频率,current.The Cpu 然后可以使用该频率来跟踪时间。

所以计算机可以理解“做某事,等待 5 秒,然后再继续”

有关石英计时器的更多信息:https://en.m.wikipedia.org/wiki/Crystal_oscillator

对于具有已知固定时钟频率的简单 CPUs(如微控制器)的短延迟,没有多任务处理,每个时钟周期设计一个简单的一条指令,您可以在 asm 中等待 "delay loop"。这是用于实现的 arduino 源代码(用于 AVR 微控制器):

https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c#L120

如您所见,行为取决于 CPU 的时钟频率。不过,您通常不会循环播放 5 秒(这是消耗能量的很长时间)。计算机通常具有定时器和时钟芯片,可以对其进行编程以在特定时间引发中断,因此您可以将 CPU 置于休眠状态,并在没有其他事情可做时在下一次中断时将其唤醒。延迟循环(在微控制器上)适用于非常短的延迟,太短以至于无法睡眠甚至无法为其编程定时器。

你可能想要一个小的微控制器板(不一定是 arduino)来玩。在那里,您从操作系统或库中获得的 "bloat" 更少,并且您离硬件更近了。