assembly - 以 1ms 为增量获取时间

标签 assembly x86 clock

x86中断0x1A似乎给出了计算机的时钟时间,但它只能给出55ms以内的精确时间(AH=0)。有没有办法获得比这更小的增量(也许更“正常”),比如 1ms?我正在尝试制作自己的玩具操作系统,因此我无法使用任何我自己无法编写的东西。

最佳答案

您可以使用 rdtsc x86 上的(读取时间戳计数器)指令,将 64 位 CPU 时间戳获取到 edx:eax 。该指令的实现取决于您的处理器,但它要么每个时钟递增一次,要么以恒定速率递增。因此,时间分辨率也有所不同,但应该优于 1ms。

使用rdtsc有一些注意事项:

  1. 时间戳计数器不一定在 CPU 核心之间同步。这可能是超线程和多核 CPU 中的一个问题。
  2. 计数器不一定以恒定速率递增。它可能会受到处理器的节流或节能功能的影响。
  3. 休眠可能会导致计数器重置。

由于您正在编写自己的操作系统,因此您可能不需要担心其中一些问题。

关于assembly - 以 1ms 为增量获取时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11570642/

相关文章:

assembly - 如何在汇编中增加一个变量?

c - 汇编中的内存分配和寻址

multithreading - 多核 CPU 上能否真正同时执行 2 条指令

vhdl - 使用双寄存器方法解决亚稳态问题

algorithm - 模算法难以捉摸

assembly - 想要在程序集中以空终止字符串,但出现段错误

c++ - 从程序集调用 C/C++ 函数 (OSX Mavericks x64)

x86 - SSE:将短整数转换为 float

汇编:32 位寄存器的 64 位乘法

c - "C"编程如何生成时钟的具体时间