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