Programming languages 计算机是如何理解时间的?那里';没有等待的asm指令

Programming languages 计算机是如何理解时间的?那里';没有等待的asm指令,programming-languages,computer-science,cpu-architecture,Programming Languages,Computer Science,Cpu Architecture,我一直在学习编程语言,有一个问题一直困扰着我 例如,假设我编程了一个东西,它允许我每5秒按下一个按钮 计算机如何理解等待部分(允许按下按钮-等待5秒并再次允许) 我已经知道,第一代高级编程语言正在被编译成机器代码,以便计算机能够运行它。但若我们以汇编程序为例,它非常接近机器代码,只是人类可读的,并没有等待的指令 我在等待中给出的例子只是一个例子,还有很多事情我不明白计算机是如何理解的;) Cpu内部有一个称为Cpu时钟的石英计时器晶体。当一个电流通过它时,它会给出该电流的预冰频率。然后Cpu可以

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

例如,假设我编程了一个东西,它允许我每5秒按下一个按钮

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

我已经知道,第一代高级编程语言正在被编译成机器代码,以便计算机能够运行它。但若我们以汇编程序为例,它非常接近机器代码,只是人类可读的,并没有等待的指令


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

Cpu内部有一个称为Cpu时钟的石英计时器晶体。当一个电流通过它时,它会给出该电流的预冰频率。然后Cpu可以使用该频率来跟踪时间

所以计算机可以理解“做点什么,等5秒钟再继续”


有关石英计时器的更多信息:

对于具有已知固定时钟频率的简单CPU(如微控制器)上的短延迟,无需多任务处理,以及每个时钟周期一条指令的简单设计,您可以使用“延迟环”在asm中等待。以下是用于实现的arduino源(用于AVR微控制器):

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


你可能想要一个小微控制器板(不一定是arduino)来玩。在这里,操作系统或库的“膨胀”要小得多,而且离硬件更近。

你所谓的“等待”实际上只是指检查当前时间。台式机/笔记本电脑CPU与微控制器不同:现代x86中的时钟频率不是固定的,超标量/无序执行使得延迟循环更加困难。核心时钟甚至在进入低功耗睡眠时停止(在下一次中断之前不运行任何指令),但时间计数器一直在滴答作响。与使用延迟循环不同,我可能会检查按钮按下处理程序中的时间,并将其与之前计算的下一次按下接受时间进行比较。(上一次成功按下按钮)请参阅一个在现代x86上运行的延迟循环示例,该延迟循环运行在一个先发制人的多任务操作系统(如Linux)下(因此您不能指望整个进程都有CPU)。您可以在
rdtsc
或其他get time函数或指令上旋转,等待正确的时间。您是对的,我认为从低级别开始简单可能会更好。我应该提到,现代计算机和操作系统使用更复杂的技巧。问题的一部分是只允许你每5秒按下一个按钮,当然可能是问一个只有一个按钮的物理设备,以及一个微控制器。但是5秒对于延迟循环来说是不合理的长。我对你的答案做了一个大的编辑来描述它链接到什么,以及延迟循环什么时候有用。我想,它以前几乎没有回答过这个问题。请随意重新编辑它,用你自己的话来表达,或者保留我的措辞,如果你愿意的话。