计算机体系结构 DLX处理器程序设计 实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机系统结构实验实验三 DLX处理器程序设计
一、实验目的
学习使用DLX 汇编语言编程,进一步分析相关现象。
二、实验设备环境
DLX汇编语言环境
三、实验内容和要求
自编一段汇编代码,完成一维向量加法运算,并输出结果。观察程序中出现的数据/控制/结构相关。(注:使用一维数组表示一维向量。)
四、代码清单及注释
*向量加法设计*
1、源代码
.data
VectorLength: .word 16
Vector1: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
Vector2: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
Printf1: .asciiz "Vector ="
Printf2: .asciiz " %f"
.align 2
PrintPrompt: .word Printf1
PrintPar: .word Printf2
Result: .space 4
.text
main:
addi r14,r0,PrintPrompt
trap 5
lw r20,VectorLength
addi r2,r0,0
Loop:
ld f10,Vector1(r2)
ld f12,Vector2(r2)
cvti2d f0,f10
cvti2d f2,f12
addd f4,f2,f0
Finish:;**** Finish,write result into stdout
sd Result,f4
addi r14,r0,PrintPar
trap 5
addi r2,r2,4
subi r20,r20,1
bnez r20,Loop
;**** End
trap 0
2、注释
VectorLength: .word 16
Vector1: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 Vector2: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 声明向量长度以及声明向量1、2
Result: .space 4
存放打印数据的空间申请
Loop:
ld f10,Vector1(r2)
ld f12,Vector2(r2)
循环体中读入向量
addd f4,f2,f0
加法运算
trap 5
系统中断,输出结果
3、运行结果
五、程序相关性分析结果
1、数据、控制、结构相关
数据相关。所以当对当前指令的操作数寄存器进行操作(EX)的时候,前几条指令的运算结果还未写回(WB)结果寄存器,由此产生数据相关。
结构相关。由于程序只简单的做了一次加法,所以没有结构相关产生。
控制相关。于系统按照预测成功来执行指令,所以执行bnez后马上将其下一条指令trap 读进来。
2、浮点运算部件带来的影响
将浮点加法器有1个增加为2个后,程序执行的性能未得到提升。由于该程序为产生浮点加法器的结构相关,所以增加浮点加法器的数量对程序执行的性能提升没有帮助。
3、forward部件的影响
关闭farward后,运行时间由283增加到381. 所以forward技术为该程序带来的加速比为:381/282=1.35。
4、转移成功和不成功
在控制相关中,转移成功和不成功的差别。由于系统按照预测成功来执行指令,所以执行
bnez后马上将其下一条指令trap读进来判断出是转移不成功时,系统对trap指令进行的操作被全部作废,转而去执行跳转到的指令id。
*双精度浮点加法求和设计*
1、代码及注释
.data
;初始化两个用于相加的一维向量(双精度浮点数),向量长度为20
a: .double 1.9, 2.1, 3.7, 4.6, 5.5, 6.4, 7.3, 8.2, 9.1, 10.1,
11.2,12.3,13.4,14.5,15.6,16.7,17.8,18.9,19.0,20.2
b: .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.8, 10.9,
11.8,12.7,13.6,14.5,15.4,16.3,17.2,18.1,19.9,20.8
PrintfFormat: .asciiz "The result is \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\t%f\t%f\t%f\t%f\t\n\n"
.align 2
PrintfPar: .word PrintfFormat
r: .space 200
;r为保存相加结果的向量空间
.text
.global main
main:
addi r1,r0,0 ;r1计数相加的次数
addui r4,r0,8 ;r4为常数8
loop: ;循环计算向量相加结果
subi r2,r1,20 ;r1=20时,跳转到finish
beqz r2,finish
multu r3,r1,r4;r3为当前分量相对于向量基址的偏移(每个分量占8B)
ld f0,a(r3) ;取a中第r1个分量
ld f2,b(r3) ;取b中第r1个分量
addd f4,f0,f2 ;相加结果放在f4中
sd r(r3),f4 ;将相加结果放入结果向量r中
addi r1,r1,1 ;下一分量
j loop
finish: ;输出向量相加的结果
addi r14,r0,PrintfPar
trap 5