了解此MIPS代码的工作原理

时间:2015-09-29 00:12:07

标签: c mips

因此,我的教授将这个问题放在他的幻灯片中,这是他的答案,而不是理解他是如何将其转换为MIPS所以如果有人能帮助解释这个问题那就太好了。 变量i在$ s3中,k在$ s5中,save []的基地址在$ s6中

他给了我们这个C代码:

    while( save[i] == k ) {
        i += 1;
    }

并在回复时给了我们这个MIPS代码:

Loop: sll $t1, $s3, 2
      add $t1, $t1, $s6
      lw $t0, 0($t1)
      bne $t0, $s5, Exit
      addi $s3, $s3, 1
      j Loop
Exit:

1 个答案:

答案 0 :(得分:3)

Loop: sll $t1, $s3, 2           # $t1 = 4*i (this is the offset to get to the ith element in your array)
      add $t1, $t1, $s6         # $t1 = 4*i + base addr of save (getting the address of save[i])
      lw $t0, 0($t1)            # $t0 = save[i] (actually loading 4B from address of save[i], so getting the actual number here)
      bne $t0, $s5, Exit        # branch to Exit if save[i] != k
      addi $s3, $s3, 1          # i++
      j Loop
Exit:

此处需要注意的事项: save是一个int数组,因此每个元素都是4B。这就是偏移为4*i的原因。