x86中断0x1A似乎给出了计算机的时钟时间,但它只能给出55ms以内的精确时间(AH=0)。有没有办法获得比这更小的增量(也许更“正常”),比如 1ms?我正在尝试制作自己的玩具操作系统,因此我无法使用任何我自己无法编写的东西。
最佳答案
您可以使用 rdtsc
x86 上的(读取时间戳计数器)指令,将 64 位 CPU 时间戳获取到 edx:eax
。该指令的实现取决于您的处理器,但它要么每个时钟递增一次,要么以恒定速率递增。因此,时间分辨率也有所不同,但应该优于 1ms。
使用rdtsc
有一些注意事项:
- 时间戳计数器不一定在 CPU 核心之间同步。这可能是超线程和多核 CPU 中的一个问题。
- 计数器不一定以恒定速率递增。它可能会受到处理器的节流或节能功能的影响。
- 休眠可能会导致计数器重置。
由于您正在编写自己的操作系统,因此您可能不需要担心其中一些问题。
关于assembly - 以 1ms 为增量获取时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11570642/