计算机体系结构 DLX处理器程序设计 实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档