[英]For Loop With Array in C to MIPS With Offset
所以我有一个分配问题,要求将C中的for循环转换为MIPS。 我的教授动作非常快,所以我听不懂他说的一半。 这是代码:
for (i=0; i<10; i++){
a[i] = b[i] + c[i];
}
此片段从位置00000100 Hex开始存储在内存中。 将此代码转换为MIPS,并为每个使用的分支或跳转指令提供数字偏移量。
我不太了解偏移量的用法。 从给我们的讲座幻灯片中,似乎可以将加载字和存储字命令用于偏移量,这些偏移量也用于数组,但是我不确定该如何处理。 以下是我根据看到的其他解决方案整理的内容,但是当然可以进行更改。 我希望至少朝着正确的方向发展。 任何帮助,将不胜感激。
#t0 = i
#s0 = a
#s1 = b
#s2 = c
#t3, t4, t5, t6, t7 = free
loop:
bgt $t0,9,exit #exit before i reaches 10
addi $t3,$s1,$t0 #temp reg $t3 = address of b[i]
addi $t4,$s2,$t0 #temp reg $t4 = address of c[i]
lw $t5,0($t3) #temp reg $t5 = c[i]
lw $t6,0($t4) #temp reg $t6 = a[i]
add $t3,$t5,$t6 #temp reg $t10 = b[i] + c[i]
addi $t7,$s0,$t0 #temp reg $t7 = address of a[i]
sw $t3,0($t7) #store word a[i] = b[i] + c[i]
addi $t0,$t0,1 #increment i by 1
j loop #jump to start of loop
exit:
据我所知,您每次都将其存储在同一索引中。 在MIPS中,每4个字节是一个字,因此您必须将其存储在0、4、8等中。另外,在开始使用一个数组之前,需要为数组分配内存。 这是一个例子。
li $v0, 9 # create an array, start address in $v0
li $a0, 80 # allocate 80 bytes, or 20 words
syscall
move $t0, $v0 # move from $v0 (temp) to $t0
查看本教程 ,看看是否有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.