;定义两个双精度浮点数一维向量,然后进行乘法运算。
.data
Vector1: .double 1.2,3.1,3.8,8.5,2.5,1.3,2.4,6.8,7.9,1.8,1.0,4.5,5.2,5.6,8.3,10.4
Vector2: .double 2.4,4.1,5.7,6.8,3.7,7.3,4.4,1.8,5.9,1.9,1.4,4.6,5.7,5.2,8.7,10.9
;结果的输出格式
PrintfFormat: .asciiz "\n\n%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\n\n"
.align 2
PrintfPar: .word PrintfFormat
;保存相加结果的空间
Result: .space 200
.text
.global main
main:
addi r1,r0,0 ;r1作为计数器
addui r2,r0,8 ;r2是常量8
loop:
multu r4,r1,r2 ;r4是当前的偏移位置
subi r3,r1,16 ;判断r1到没到16次
ld f0,Vector1(r4) ;取数组1的值,偶数编号的float寄存器可以保存双精度
ld f2,Vector2(r4) ;取数组2的值
multd f4,f0,f2 ;相乘放到f4中
beqz r3,finish ;如果到了16次那么进行跳转
sd Result(r4),f4 ;f4放到r中
addi r1,r1,1 ;计数器r1++
j loop ;跳转到loop继续循环
finish:
addi r14,r0,PrintfPar ;将结果打印出来
trap 0