assembly - 使用 QT SPIM 寻找睡眠(延迟)MIPS 的方法
问题描述
我试图找到一种方法在 MIPS 中将我的程序延迟几秒钟。我在 MARS 中看到了一些关于系统调用的答案,但在 SPIM 中没有任何作用。有什么办法可以延迟 SPIM 吗?提前致谢。
编辑:我正在寻找一种更方便、更智能的方法,而不是像“编写循环一百万次的代码”
解决方案
真正的操作系统有sleep
系统调用。例如,在 POSIXnanosleep(2)
中,用户空间传递指向结构的指针,这些结构说明要休眠多长时间,如果您早起,内核会填写它实际休眠的时间。如果您正在为 Linux MIPS 而不是 SPIM 编写代码,则可以使用它。
但是 SPIM 是一个“玩具”系统,没有任何类型的睡眠系统调用,甚至在等待其他东西时也没有可配置的超时。您唯一的选择是愚蠢的延迟循环,其中时间取决于主机的速度。
MARS(另一个主要的 MIPS 模拟器)有一套扩展的系统调用,超出了 SPIM 提供的范围,包括毫秒分辨率sleep
:$v0 = 32
、$a0 = millis
.
MARS 也有一个time
系统调用,因此您可以编写一个自旋循环来不断检查时间,以查看您是否已通过所需的唤醒时间。您可能会使用它(在sleep
接近之后)来获得亚毫秒级的延迟精度。(SPIM 也缺少这一点,因此 SPIM 延迟循环必须纯粹是航位推算或外部“校准”。)
推荐阅读
- kubernetes - 使用客户端 Postico 2 连接到运行 Postgres 的 GKE POD
- qt - QSvgRenderer 使用的是旧版本的 SVG
- python - selenium python 3.7(未解决的导入:webdriver)
- java - 哪种设计模式最适合用于将模型与行为分开?
- linux - 如何挂载Linux系统时间文件?
- python - python说缺少参数,但实际上有一个参数
- intellij-idea - IntelliJ 不保存 cookie
- html - 无法将图像显示为 HTML
- python - 为什么在全局范围而不是封闭范围中查找未初始化的类变量?
- python - 6行代码出错?无法确定为什么代码没有给出正确的总和(可能与变量有关?)