.data
s1: .float 1.02
s2: .float 2.001
MA: .space 64
MB: .space 64
MC: .space 64
a: .asciiz "result=\n"
b: .asciiz "\n"
c: .asciiz "%f\t"
.align 2
d: .word c
Fdizhi: .space 8
dizhi: .space 4
.text
.global main
main:
addi r1,r0,a
sw dizhi,r1
addi r14,r0,dizhi
trap 5
addi r1,r0,MA
addi r3,r2,MB
addi r11,r1,#64 ;MA的末地址
lf f1,s1
lf f2,s2
init:
sf 0(r1),f1 ;将f1赋值给MA
sf 0(r3),f2 ;将f2赋值给MB
addi r1,r1,#4
addi r3,r3,#4
slt r2,r1,r11
bnez r2,init
addi r21,r0,#16 ;常量16
addi r22,r0,#4 ;常量4
addi r23,r0,#4 ;常量4
addi r29,r0,#0 ;常量0
addi r7,r0,0 ;i=0
loop1:
addi r8,r0,0 ;j=0
loop2:
addi r9,r0,0 ;k=0
movi2fp f0,r29 ;data=0
loop3:
multu r11,r7,r21 ;r11=i*40
multu r1,r9,r23 ; r1=k*4
addu r11,r11,r1 ;计算出MA[i][k]的位置
ld f2,MA(r11)
multu r13,r9,r21 ;r13=i*16
multu r1,r8,r23 ;r1=j*4
addu r13,r13,r1 ;MB[k][j]
ld f4,MB(r13)
multf f6,f2,f4
addf f0,f0,f6
addi r9,r9,#1 ;k<4?
slt r2,r9,r22
bnez r2,loop3
sd Fdizhi,f0 ;输出结果
addi r14,r0,d
trap 5
multu r13,r7,r21 ;r13=i*16
multu r1,r8,r23 ;r1=j*4
addu r13,r13,r1 ;MC[i][j]
sf MC(r13),f0
addi r8,r8,#1
slt r2,r8,r22 ;j<4?
bnez r2,loop2
addi r1,r0,b
sw dizhi,r1
addi r14,r0,dizhi ;输出换行符
trap 5
addi r7,r7,#1 ;i<4?
slt r2,r7,r22
bnez r2,loop1
trap 0