【发布时间】:2019-10-22 15:34:21
【问题描述】:
我想将 AX 相乘并与 B 相加。因此,(AX)+B。但是,它不起作用,另外我需要在 A 的结果中找到 max num A 是 5*3 矩阵,B 是 3 的数组,C 也是 5 个数字的数组
我在问如何修复该错误以及我的代码有什么问题 此外,我无法编写在矩阵 A 的结果中找到最大数的代码
错误是这样的: PC=0x00400084 发生异常 数据/堆栈读取中的错误地址:0x10040100 PC=0x00400084 发生异常 数据/堆栈读取中的错误地址:0x10040114
la $s4, matrixA #s4 set to base address of matrixA
la $s3, vectorX #s3 set to base address of vectorX
la $s7, vectorB #s7 set to base address of vectorB
la $s5, shapeA #s5 set to base address of sizeA
nop
lw $s6, 4($s5) #s6 set to second val in sizeA (col#)
nop
lw $s5, 0($s5) #s5 set to first val in sizeA (row#)
lw $t1, 0($s5) # $t1 = 32 (row size/loop end)
li $s0, 0 # i = 0; initialize 1st for loop
L1: li $s1,0 #j=0;restart2ndforloop
L2: li $s2,0 #k=0;restart3rdforloop
mul $t2, $s0, $s5 #$t2 = A[row](size of row of B)
addiu $t2, $t2, 0 # $t2 = i * size(row) + 0
sll $t2, $t2, 2 # $t2 = byte offset of [i][0]
addu $t2, $s7, $t2 # $t2 = byte address of B[i][0]
l.d $f4, 0($t2) # $f4 = 4 bytes of B[i][0]
L3: mul $t0,$s2,$s5 #$t0 = i * A[col](size of row of X)
addiu $t0, $t0, 0 # $t0 = k * size(row) + 0
sll $t0, $t0, 2 # $t0 = byte offset of X[k][0]
addu $t0, $s3, $t0 # $t0 = byte address of X[k][0]
l.d $f16, 0($t0) # $f16 = 4 bytes of X[k][0]
mul $t0,$s0,$s5 #$t0 = i * A[row](size of row of A)
addu $t0, $t0, $s2 # $t0 = i * size(row) + k
sll $t0, $t0, 2 # $t0 = byte offset of A[i][k]
addu $t0, $s4, $t0 # $t0 = byte address of A[i][k]
l.d $f18, 0($t0) # $f18 = 4 bytes of A[i][k]
mul.d $f16, $f18, $f16 # $f16 = y[i][k] * z[k][j]
add.d $f4, $f4, $f16 # $f4=x[i][j] + y[i][k]*z[k][j]
addiu $s2, $s2, 1 # k = k + 1
bne $s2,$t1,L3
s.d $f4, 0($t2)
addiu $s2, $s2, 1 # j = j + 1
bne $s2,$t1,L2
addiu $s0, $s0, 1 # i = i + 1
bne $s0,$t1,L1 #if(i!=32)gotoL1
【问题讨论】:
-
lw $t1, 0($s5)不正确,因为 $s5 不是地址。可能,根据您的评论,您的意思是move $t1,$s5 -
我改了,但是没用
标签: assembly mips matrix-multiplication