这个MIPS汇编代码对应什么?

What does this MIPS assembly code correspond to?

我正在学习 MIPS 汇编语言。这是我试图理解的练习。问题是:

下面的代码对应什么?

Name:   move    $t0,    $zero
Loop:   add     $t1,    $t0,    $t0
        add     $t1,    $t1,    $t1
        add     $t2,    $a0,    $t1
        sw      $zero,  0($t2)
        addi    $t0,    $t0,    1
        slt     $t3,    $t0,    $a1
        bne     $t3,    $zero,  Loop
        jr      $ra

我已经知道每条指令的含义、指令的工作原理以及 for 循环是什么。当我尝试 运行 MIPS Mars Simulator 中的代码时,它以错误结束,可能是因为寄存器 $a0 和 $a1 中包含的值需要以开头。

我不了解大局。每次循环迭代期间会发生什么?它只是更大算法的一部分吗?它应该做什么?

阅读评论我想答案在某种程度上更清楚了。 在代码的开头,$a0$a1应该已经有一些值了,我们分别假设xy

第一行move $t0, $zero在高级编程语言中是int i = 0;,或者是do-while (condition)循环的初始值。

以下:

Loop: add $t1, $t0, $t0
      add $t1, $t1, $t1

是循环开始的时间,就像:

int j = 2 * i;
    j = 2 * j;

简称 int j = 4 * i; ,迭代器乘以 4 因为 MIPS 寄存器由 32 位组成,这意味着 4 个字节。

add $t2, $a0, $t1对应int k = x + j;int k = x + 4 * i.

下一条指令sw $zero, 0($t2)0存储到内存中,其地址与$t2中包含的值的地址偏移0

addi $t0, $t0, 1 递增 i++;

slt  $t3,  $t0,   $a1
bne  $t3,  $zero, Loop
jr   $ra

检查是否满足i < y,即do - while (i < y)循环的条件。如果它仍然为真,则循环继续设置为 0 内存中的下一个元素,否则循环结束返回到 $ra.