汇编矩阵相乘

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

.data
Printf1: .asciiz "\n"
Printf2: .asciiz " * "
Printf3: .asciiz " = "
Prompt1: .asciiz "First Matrix col: "
Prompt2: .asciiz "First Matrix row and Second Matrix col: "
Prompt3: .asciiz "Second Matrix row: "
Prompt4: .asciiz "First Matrix : "
Prompt5: .asciiz "Second Matrix : "
PrintfFormat: .asciiz "%g "
.align 2
PrintfPar: .word PrintfFormat
PrintfValue: .space 4
data1: .space 1024
data3: .space 1024
data2: .space 1024
;
.text
.global main
main:
addi r1,r0,Prompt1
jal InputUnsigned
addu r17,r1,r0
addi r1,r0,Prompt2
jal InputUnsigned
addu r11,r1,r0
addi r1,r0,Prompt3
jal InputUnsigned
addu r12,r1,r0
addi r8,r0,0
addi r7,r0,0
addi r3,r0,data1 ;取矩阵A当前元素在内存区域中的地址
Matrix1:
subu r5,r7,r17
beqz r5,End1
addi r6,r0,0
beqz r7,Matrix01
addi r3,r3,64
addi r8,r0,0
Matrix01:
subu r5,r6,r11
beqz r5,Matrix001
addi r1,r0,Prompt4
jal InputUnsigned
addu r9,r1,r0
addu r2,r8,r3
sw 0(r2),r9 ;store data3,把新计算出来的元素放入当前内存单元addi r8,r8,4
addi r6,r6,1
j Matrix01
Matrix001:
addi r7,r7,1
j Matrix1
End1:
addi r3,r0,data2 ;取矩阵B当前元素在内存区域中的地址
addi r7,r0,0
addi r8,r0,0
Matrix2:
subu r5,r7,r11
beqz r5,End2
addi r6,r0,0
beqz r7,Matrix02
addi r3,r3,64
addi r8,r0,0
Matrix02:
subu r5,r6,r12
beqz r5,Matrix002
addi r1,r0,Prompt5
jal InputUnsigned
addu r9,r1,r0
addu r2,r8,r3
sw 0(r2),r9 ;store data3,把新计算出来的元素放入当前内存单元addi r8,r8,4
addi r6,r6,1
j Matrix02
Matrix002:
addi r7,r7,1
j Matrix2
End2:
addi r9,r0,0
addi r2,r0,data1 ;取矩阵A当前元素在内存区域中的地址addi r8,r0,data3 ;r1表示矩阵C当前的地址
addi r10,r8,0
Loop1:
subu r5,r9,r17
beqz r5,Printf
addi r6,r0,0
addi r3,r0,data2 ;取矩阵B当前元素在内存区域中的地址beqz r9,Loop2
addi r2,r2,64
addi r8,r8,64
addi r10,r8,0
Loop2:
subu r5,r6,r11
beqz r5,AL
addi r1,r2,0
addi r4,r3,0
addi r7,r0,0
beqz r6,Loop3
addi r3,r3,4
addi r4,r3,0
j Loop3
AL: addi r9,r9,1
j Loop1
Loop3:
subu r5,r7,r12
beqz r5,BL
lw r15,0(r4)
lw r13,0(r1)
multu r14,r13,r15
addu r16,r16,r14
addi r7,r7,1
addi r4,r4,64
addi r1,r1,4
j Loop3
BL:
sw 0(r10),r16 ;store data3,把新计算出来的元素放入当前内存单元addi r10,r10,4 ;赋值完一个元素,偏移量自增1
addi r16,r0,0
addi r6,r6,1
j Loop2
Printf: addi r8,r0,0
addi r7,r0,0
addi r3,r0,data1 ;取矩阵A当前元素在内存区域中的地址
PrintfMatrix1:
subu r5,r7,r17
beqz r5,PrintfEnd1
addi r6,r0,0
beqz r7,PrintfMatrix01
addi r3,r3,64
addi r8,r0,0
PrintfMatrix01:
subu r5,r6,r11
beqz r5,PrintfMatrix001
addu r2,r8,r3
lf f10,0(r2) ;R1 -> D0 D0..Count register
cvti2d f0,f10
sd PrintfValue,f0 ;打印
addi r14,r0,PrintfPar
trap 5
addi r8,r8,4
addi r6,r6,1
j PrintfMatrix01
PrintfMatrix001:
addi r7,r7,1
addi r1,r0,Printf1
sw PrintfValue,r1
addi r14,r0,PrintfValue
trap 5
j PrintfMatrix1
PrintfEnd1:
addi r3,r0,data2 ;取矩阵B当前元素在内存区域中的地址
addi r7,r0,0
addi r8,r0,0
addi r1,r0,Printf2
sw PrintfValue,r1
addi r14,r0,PrintfValue
trap 5
addi r1,r0,Printf1
sw PrintfValue,r1
addi r14,r0,PrintfValue
trap 5
PrintfMatrix2:
subu r5,r7,r11
beqz r5,PrintfEnd2
addi r6,r0,0
beqz r7,PrintfMatrix02
addi r3,r3,64
addi r8,r0,0
PrintfMatrix02:
subu r5,r6,r12
beqz r5,PrintfMatrix002
addu r2,r8,r3
lf f10,0(r2) ;R1 -> D0 D0..Count register
cvti2d f0,f10
sd PrintfValue,f0 ;打印
addi r14,r0,PrintfPar
trap 5
addi r8,r8,4
addi r6,r6,1
j PrintfMatrix02
PrintfMatrix002:
addi r7,r7,1
addi r1,r0,Printf1
sw PrintfValue,r1
addi r14,r0,PrintfValue
trap 5
j PrintfMatrix2
PrintfEnd2:
addi r1,r0,Printf3
sw PrintfValue,r1
addi r14,r0,PrintfValue
trap 5
addi r1,r0,Printf1
sw PrintfValue,r1
addi r14,r0,PrintfValue
trap 5
addi r3,r0,data3 ;取矩阵B当前元素在内存区域中的地址addi r7,r0,0
addi r8,r0,0
PrintfMatrix3:
subu r5,r7,r17
beqz r5,PrintfEnd3
addi r6,r0,0
beqz r7,PrintfMatrix03
addi r3,r3,64
addi r8,r0,0
PrintfMatrix03:
subu r5,r6,r12
beqz r5,PrintfMatrix003
addu r2,r8,r3
lf f10,0(r2) ;R1 -> D0 D0..Count register cvti2d f0,f10
sd PrintfValue,f0 ;打印
addi r14,r0,PrintfPar
trap 5
addi r8,r8,4
addi r6,r6,1
j PrintfMatrix03
PrintfMatrix003:
addi r7,r7,1
addi r1,r0,Printf1
sw PrintfValue,r1
addi r14,r0,PrintfValue
trap 5
j PrintfMatrix3
PrintfEnd3:
Finish:
trap 0。

相关文档
最新文档