使用 QT SPIM 寻找睡眠(延迟)MIPS 的方法

Looking for a way to sleep ( delay ) MIPS using QT SPIM

我正在尝试找到一种在 MIPS 中将我的程序延迟几秒钟的方法。 我在 MARS 中看到了一些关于系统调用的答案,但在 SPIM 中没有任何效果。有什么办法可以延迟 SPIM 吗?提前致谢。

编辑:我正在寻找一种更方便、更智能的方法,不像 "write code that loops one million times"

真正的操作系统有 sleep 个系统调用。例如POSIX nanosleep(2) 其中 user-space 将指针传递给表示睡眠多长时间的结构,如果你早起,内核会填充它实际睡眠的时间。如果您正在为 Linux MIPS 而不是 SPIM 编写代码,则可以使用它。

但 SPIM 是一个 "toy" 系统,没有任何类型的睡眠系统调用 ,甚至在等待其他事情时没有可配置的超时。你唯一的选择是一个愚蠢的延迟循环,时间取决于主机的速度。

MARS(另一个主要的 MIPS 模拟器)has an extended set of system calls 超越了 SPIM 提供的功能,包括毫秒分辨率 sleep$v0 = 32$a0 = millis.

MARS 也有一个 time 系统调用,因此您可以编写一个自旋循环来不断检查时间,看看您是否已经过了所需的唤醒时间。您可能会使用它(在 sleep 接近之后)来获得亚毫秒级的延迟精度。 (SPIM 也缺乏这一点,因此 SPIM 延迟循环必须是纯粹的航位推算或外部 "calibrated"。)