【发布时间】:2021-06-09 16:35:12
【问题描述】:
我想在汇编中编写一个延迟循环。它会造成N 个周期的延迟。
我的想法是创建一个 for 循环并遍历 NOP 指令。在这种情况下,我是否必须将 N 减少由程序其他部分引起的循环数,例如调用 for 循环?另外,for循环的每次迭代算1个循环还是2个循环?
在最好的情况下 - 有没有人实现这样的延迟周期?
【问题讨论】:
-
何不试试看?
-
每条汇编语言指令都需要时间。因此,如果这将是代码中某个其他位置调用的函数,则子程序调用和返回完成的堆栈推送和弹出肯定需要考虑到时间常数。
-
这取决于微架构的细节,比如 68000 与 68010 的 2 指令循环缓冲区。与带有 I-cache 的 68020 相比。 en.wikipedia.org/wiki/Motorola_68000_series#Improvement_history。与具有 2 宽超标量流水线(每个周期 2 条指令)的 68060 相比。
-
一种显而易见的调查方法是从较旧的 linux 内核中检查 68k bogomips 循环。 :-)
-
只需一个
dbf d0,$-2就可以完成这项工作。根据wiki.neogeodev.org/…,每次迭代需要 10 个周期。
标签: assembly delay 68000 easy68k