C 了解此MIPS代码的工作原理

C 了解此MIPS代码的工作原理,c,mips,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)

所以我的教授把这个问题放在他的幻灯片里,这是他的答案,不明白他是如何把它转换成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:
注意事项如下:
save
是一个
int
数组,因此每个元素都是4B。这就是为什么偏移量是
4*i

我不明白他为什么使用load word指令,但我的逻辑告诉我(尽管可能是错误的),将$t1的基址加载到$t0与存储数组的基址相同?我们为什么要做功课?你有什么特别的问题吗?看起来他在课堂上试图理解一节课,而不是做硬件问题。奥拉夫,我在解释中说,“我的教授在他的幻灯片中给了我这个问题,这是他的答案。”但谢谢您的回复。@John如果您需要进一步澄清,请对答案进行评论或将答案标记为正确。
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: