我正在学习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中包含的值开始。
我不了解大局。在每次循环迭代期间会发生什么?它只是更大算法的一部分吗?应该怎么办?
答案 0 :(得分: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;
,因为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
。