这个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
应该已经有一些值了,我们分别假设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
存储到内存中,其地址与$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
.
我正在学习 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
应该已经有一些值了,我们分别假设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
存储到内存中,其地址与$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
.