MIPS延迟子程序

时间:2014-05-18 23:05:25

标签: delay mips subroutine

我最近开始使用MIPS并尝试做一些简单的事情。目前,这个程序会毫不拖延地打印出Hello World,我希望它以1秒的延迟打印出Hello World。

.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而没有延迟。

2 个答案:

答案 0 :(得分:1)

这似乎是一种非常糟糕的方法来调用可靠的延迟。始终寻找syscall以查看是否有适合您的事情。

如果你正在使用MARS,这将延迟1000毫秒:

li $v0, 32
li $a0, 1000
syscall

答案 1 :(得分:0)

  1. 每次迭代都会重新初始化$a2,因此如果退出条件正常,则循环应该是无限的。
  2. 以上表明您的条件分支不正确;也许blez
  3. 即使您确实让延迟循环工作,1000也可能太小而无法显着。