我将2x2矩阵的值存储在浮点寄存器中。现在如何使用循环在结果矩阵中打印这些值?

问题描述 投票:-1回答:1
.data

'按行大顺序'

mA: .float 1.5,2.5,3.5,4.5

'按行大顺序'

mB: .float 5.5,6.5,7.5,8.5 

''结果矩阵mC中的4个元素,每个4个字节'

mC: .float 0,0,0,0 
space: .asciiz " "
.text

'a3存储结果矩阵的字节大小mC'

la  $a3,mC

'a1存储i / p矩阵mA'

la  $a1,mA  
la  $a2,mB

'a'

l.s $f1, 0($a1)

'b'

l.s $f2, 4($a1)

'c'

l.s $f3, 8($a1)

'd'

l.s $f4, 12($a1) 

l.s $f5, 0($a2)

'e'

l.s $f6, 4($a2)

'f'

l.s $f7, 8($a2)

'g'

l.s $f8, 12($a2)

'这里使用Strassen算法进行矩阵乘法

add.s $f0,$f1,$f4 #a+d
add.s $f9,$f5,$f8 #e+h
mul.s $f0, $f0,$f9 #        -p5

sub.s $f9,$f7,$f5 #g-e
mul.s $f9,$f4,$f9 #d(g-e) -  p4

add.s $f10,$f1,$f2 # a+b
mul.s $f10,$f8,$f10 #h(a+b)  -  p2

sub.s $f11,$f2,$f4 # (b-d)
add.s $f12,$f7,$f8 #(g+h)
mul.s $f13,$f11,$f12 #p6 

add.s $f11, $f0,$f9 # p5+p4
add.s $f12,$f11,$f13 #p5+p4+p6
sub.s $f11,$f12,$f10 #p5+p4+p6-p2

'“存储在结果矩阵的第一个单元格中的值'

s.s $f11,0($a3) 
#... p1,p2

sub.s $f13,$f6,$f8 # (f-h)
mul.s $f12,$f13,$f1 #a(f-h) $f12     -p1 
add.s $f13, $f12,$f10 # (p1+p2)


s.s $f13, 4($a3) 



add.s $f14,$f3,$f4 # c+d
mul.s $f15,$f14,$f5 #e(c+d)  
add.s $f14,$f15,$f9 #p3+p4

s.s $f14,8($a3)

sub.s $f16,$f1,$f3  '(a-c)'
add.s $f17,$f5,$f6  '(e+f)'
mul.s $f16,$f16,$f17  '(a-c)*(e+f) - p7'


add.s $f17,$f12,$f0 '(p1+p5)'
sub.s $f18,$f17,$f15  '(p1+p5-p3)'
sub.s  $f17,$f18,$f16  '(p1+p5-p3-p7)'

s.s $f17,12($a3)

'打印结果矩阵'li $ t1,0

 loop: beq $t1, 4, exit

'在此处输入您的代码以打印结果矩阵'

j loop

exit:
 li $v0,10
 syscall
assembly matrix mips strassen
1个回答
0
投票

您不能循环访问寄存器(除非完全展开,否则;它们不可索引。没有“间接”方式使用一个(整数)寄存器中的数字来选择要读取的FP寄存器。

如果要遍历它们,则必须将这些值存储回内存中。

© www.soinside.com 2019 - 2024. All rights reserved.