繁体   English   中英

对于C中具有阵列的循环到具有偏移的MIPS

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM