【发布时间】:2014-05-18 23:05:25
【问题描述】:
我最近开始使用 MIPS 并尝试做一些简单的事情。目前,这个程序打印出 Hello World 没有延迟,我想让它打印出 Hello World 有 1 秒的延迟。
.global myprog
.text
.set noreorder
.ent myprog
myprog:
loop:
la $a0,Serial
la $a1,hello
jal _ZN5Print7printlnEPKc
nop
jal mydelay
nop
j loop
nop
mydelay:
li $a2, 1000
addi $a2, $a2, -1
bgez mydelay
jr $ra
.end myprog
.data
hello: .ascii "Hello, world!\0"
基本上通过这个,它会第一次打印第一个 Hello World,当它到达那个位置时进入“mydelay”,其中 mydelay 将循环 1000 次(这应该会提供一些延迟,不完全确定这部分),然后它应该返回标签循环,但目前它所做的只是毫无延迟地打印 Hello World。
【问题讨论】:
-
您的代码在延迟循环开始之前打印(假设
jal _ZN5Print7printlnEPKc导致打印);会有什么延迟? -
目前,没有延迟,我正在尝试实现延迟。我的推理是,一旦打印出来,它就会跳转到 nodelay 标签,并且在延迟发生后,它会循环回到程序的开头。基本上我想展示的是Hello World。 (延迟)你好,世界。 (一遍又一遍。)
-
无论您想要什么,您都可以毫无延迟地进行编码,因为您不会在第一次打印之前调用代码延迟,然后陷入无限循环(@ 987654323@ 循环,不是主要的
loop)。
标签: delay mips subroutine