繁体   English   中英

Mips 2D数组功能

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

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