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

问题描述 投票:2回答:1

我学习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

我已经知道了每一个指令,这些指令是如何工作的,并为循环是什么意思。当我尝试运行在MIPS火星模拟器它与错误结束的代码,可能是因为包含在寄存器$ A0值和$ A1需要开始。

我不明白的大局观。每次循环迭代过程中会发生什么?难道仅仅是一个更大的算法的一部分?什么是它应该做的?

assembly mips mips32 mars-simulator
1个回答
2
投票

读我想答案的评论在某种程度上更清晰。在代码,$a0的开头和$a1应该已经有一定的价值,让我们假设x分别y

第一行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到其地址由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

© www.soinside.com 2019 - 2024. All rights reserved.