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

时间:2019-02-04 15:00:38

标签: assembly mips mips32 mars-simulator

我正在学习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中包含的值开始。

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

1 个答案:

答案 0 :(得分:2)

阅读评论,我想答案会更加清晰。 在代码的开头,$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;,因为MIPS寄存器由32位(即4个字节)组成,所以迭代器乘以4。

然后add $t2, $a0, $t1对应于int k = x + j;,换句话说,对应于int k = x + 4 * i

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

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

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

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