arrays - 在 MIPS 中遍历二维数组

标签 arrays loops nested 2d mips

嘿伙计们,我需要对所有 i 和 j 执行 C[i][j] = A[i][j] + B[j][i],二维数组中的大小为 16 x 16。

这是我的代码的主要部分(如下所示)。

当我在 SPIM 中运行此代码时,我在“lw $t4, 0($t4) # value of B[j][i]”行收到异常,该异常表示数据/堆栈读取时的地址错误

当我检查每个寄存器中存储的值时,我意识到i == 0x1,但是j达到了0xbf0! (即 3056)

我不知道为什么会发生这种情况,因为我的 j 应该只从 0 增加到 15。帮帮我吧!

la    $t0, A                 # $t0 represents start address of A[i][j]
la    $t1, B                 # $t1 represents start address of B[i][j]
la    $t2, C                 # $t2 represents start address of C[i][j]  displacement of A will be the same as C                         

addi   $t3, $zero, 16         # set maximum iteration to be 16
addi   $t5, $zero, 0     # set i = 0
addi   $t6, $zero, 0     # set j = 0

loopi:
jal    loopj             # starts inner loopj
addi   $t5, $t5, 1       # i++
bne    $t3, $t5, loopi   # continue loopi if i < 16  
j      finish            

loopj:
sll    $t7, $t5, 4       
add    $t7, $t7, $t6
sll    $t7, $t7, 2       # 4 * ((i * 16) + j)  
add    $t9, $t7, $t0     # address of A[i][j]
lw     $t9, 0($t9)       # value of A[i][j]

sll    $t4, $t6, 4       
add    $t4, $t4, $t5
sll    $t4, $t4, 2       # 4 * ((j * 16) + i)
add    $t4, $t4, $t1     # address of B[j][i]
lw     $t4, 0($t4)       # value of B[j][i]

add    $t4, $t4, $t9     # A[i][j] + B[j][i] 

add    $t7, $t7, $t2     # address of C[i][j]
sw     $t4, 0($t7)       # store answer into C[i][j] 

addi   $t6, $t6, 1       # j++
bne    $t3, $t6, loopj   # continue loopj if j < 16
jr $ra

finish:     

最佳答案

您忘记重置j每次输入 loopi 时都会归零,否则在第一个 loopj 之后loopj 中不会从零开始...

要修复它,您可以移动设置 $t6 的 addi (包含 j )在标签 loopi 之后:

loopi:
  addi   $t6, $zero, 0     # set j = 0
  jal    loopj             # starts inner loopj
   ...

关于arrays - 在 MIPS 中遍历二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13250309/

相关文章:

c++ - 在 MIPS 上调用两次的子程序

java - 如何为数组编写高级变元方法?

r - 无法在循环中绘制多个图?

php - 尝试将链接插入 MySql 循环

ruby-on-rails - 嵌套还是不嵌套?

java - 使用嵌套的 for 循环检查数字是否为素数;如果是这样,将它们添加到集合中——不使用 isPrime 方法

javascript - 获取无组织对象数组中所有键的有效方法

javascript - 为什么原生 javascript 数组 forEach 方法明显慢于标准 for 循环?

Python for 循环问题

java - Java中嵌套方法调用的成本