windlx实验-矩阵相乘

 ;********multiply an array to an array*****
;*******    Written by heiden     *********
;三个矩阵按行存储
;第一个矩阵的大小为: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的矩阵相乘.尚未使用循环展开技术

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值