[英]Mips 2d array function
我正在尝试创建一种算法,该算法可以找到n×n方阵A的迹线.n×n方阵A的迹线定义为主要对角线上的元素之和(对角线从A的左上角到右下角)。涉及的主要思想是在此级别上将多维数组存储为一维数组,并进行多维索引(对于具有m行和n列的矩阵)转换为一维索引。由于我不熟悉mips,因此将其集成到代码中的尝试在我下面的最新尝试中失败了。
我将寄存器设置为以下内容:
$ a0 =数组(矩阵)的基地址
$ a1 = n,行和列数
$ v0 =跟踪
$ t0 =我
trace: move $v0, $zero
move $t0, $zero
bne $t0,$a1,end
sll $t1,$a0,4
add $t1,$t1,$t0
sll $t1,$t1,2
add $t2,$t1,$a0
lw $t0,0($t1)
addi $sp, $sp, 8
sw $t1,0($t0)
j trace
end: jr $ra
但是无济于事,没有按照预期得出答案,算法的格式应如下:
trace = 0
for i = 0 to n-1
trace = trace + a[i,i]
end for
我添加了一些表明可疑行为的评论
trace: move $v0, $zero
move $t0, $zero
loop: bne $t0,$a1,end
sll $t1,$a0,4 ; t1 = a0 * 16, a0 is the base address, should probably be $t0
add $t1,$t1,$t0
sll $t1,$t1,2
add $t2,$t1,$a0
lw $t0,0($t1)
addi $sp, $sp, 8 ; What are you doing with $sp? perhaps this should be add $v0,$v0,$t0
sw $t1,0($t0) ; What are you storing here?
j trace ; This should probably jump to loop, or the code will never end
end: jr $ra
另请注意,sll假定矩阵的大小为16。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.