windlx实验-矩阵相乘

 ;********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  bfpf finish
  addi r6,r0,0  ;col
column: movi2fp f4,r6
  ltf f4,f3  ;col  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的矩阵相乘.尚未使用循环展开技术

你可能感兴趣的:(windlx实验-矩阵相乘)