您的位置:首页 > 其它

windlx实验-矩阵相乘

2007-10-25 23:42 169 查看
;********multiply an array to an array*****
;******* Written by 邓建全 *********
;三个矩阵按行存储
;第一个矩阵的大小为:5*4

;第二个矩阵的大小为:4*3

;存放结果的矩阵大小为:5*3
;l 代表了第一个矩阵的当前被扫描的那行
;r4<=r 相对于result的偏移量
;r5<-l
;r10<-i 第一个矩阵某一行的某个元素的索引
;r7<-j 第二个矩阵某一列的某个元素的索引

.data

;**buffer of first array
.global dat1
dat1: .space 20
;**buffer of second array
.global dat2
dat2: .space 12
;**buffer of result
.global result
result: .space 15

.text
.global main
main:
addi r11,r0,0 ;temp
addi r4,r0,0 ;r
addi r5,r0,0 ;l
addi r1,r0,5 ;

movi2fp f1,r1
addi r1,r0,4
movi2fp f2,r1 ;n
addi r1,r0,3
movi2fp f3,r1 ;k

line: movi2fp f4,r5 ;判断是否扫描完
ltf f4,f1 ;l<m?
bfpf finish
addi r6,r0,0 ;col
column: movi2fp f4,r6
ltf f4,f3 ;col<k
bfpf leveladd

movfp2i r1,f2
multu r10,r5,r1 ;i<-l*n
addi r7,r6,0 ;mov col to j
addi r11,r0,0 ;temp=0
addi r9,r5,1 ;r9<-l+1
movfp2i r1,f2
multu r9,r1,r9 ;p<-n*(l+1)
calculate: movi2fp f4,r10
movi2fp f9,r9
ltf f4,f9 ;compare i to p
bfpf asign
addi r1,r10,dat1
lbu r2,0(r1) ;??
addi r1,r7,dat2
lbu r3,0(r1) ;??
multu r1,r2,r3 ;temp1<-dat1[i]+dat2[j]
add r11,r11,r1 ;temp<-temp+temp1
addi r10,r10,1 ;i++
movfp2i r1,f3
add r7,r7,r1 ;j<-j+k
j calculate
asign:addi r1,r4,result
sb 0(r1),r11 ;store result ??
addi r4,r4,1
addi r6,r6,1
j column
leveladd:addi r5,r5,1
j line
finish: trap 0 ;**end

此程序为实现5*4的矩阵与4*3的矩阵相乘.尚未使用循环展开技术
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: