簡體   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