体系结构 实验报告 哈工程

体系结构 实验报告 哈工程
体系结构 实验报告 哈工程

计算机科学与技术学院《计算机体系结构》课程实验

学号:

班级:

专业:计算机科学与技术

学生姓名:

2017年5月7日

实验报告

1、双击WinDLX图标运行WinDLX。装入测试程序之前,先初始化WinDLX 模拟器:点击File菜单中的Reset all菜单项,弹出一个“Reset DLX”对话框。然后点击窗口中的“确认”按钮即可。

2、选择File / Load Code or Data,按如下步骤操作,可将distance.s和input.s 这两个程序装入主存:

点击distance.s

点击select按钮

点击input.s

点击select按钮

点击load按钮

3、按F7键程序顺序执行观察6个子窗口的情况。

七、实验数据及结果分析:

1、先装入distance.s再转入input.s时,因为程序顺序执行,地址顺序符合程序执行顺序,程序能够正确执行;顺序相反时,因为input.s的地址高,而程序顺序执行到input.s时将没有正确的输入窗口,程序执行到输出结果时,也不会出现结果

2、程序中出现三个相关

图7-1

如图7-1因为下面两条指令,第二条指令要读r4而执行到此操作时第一条指令仍对r4进行操作,发生了数据相关

add r4,r0,2

div r2,r2,r4

图7-2

如图7-2 程序中出现了结构相关,硬件资源满足不了指令执行的要求,发生资源冲突时,将产生结构相关。次程序代码段因加法器发生结构相关。

add r3,r0,r1

add r6,r0,0

图7-3

如图7-3程序中出现控制相关,当程序执行下面指令时,第二条指令出现跳转指令时,第一条指令还没有执行完,所以出现控制相关

addi r1,r0,Prompt

jal InputUnsigned

图7-4

3、

.data ;定义数据段,默认情况下数据段$DATA 会被加载到内存0x1000地址处

;***prompts for input ;提示输入语句,输入3个初始数据

Prompt1: .asciiz "time:" ;时间

Prompt2: .asciiz "accelerate speed:";加速度

Prompt3: .asciiz "innital speed:" ;初始速度

;Data for Printf-Trap

PrintfFormat: .asciiz "distance=%d\n" ;输出格式,表示求出

的路程按什么格式输出

;PrintfFormat1: .asciiz "the result is :%d ,no convention!" .align 2 ;表示下面采用字对齐PrintPar: .word PrintfFormat

PrintValue: .space 4

.text

;第一代码段,默认情况下代码段$CODE会加载到内存0x100地址处

.global main ;定义一个全局符号main,即该代码段的首地址main:

;***read two positive integer numbers into R1 and R2

add r1,r0,Prompt1 ;将输入的数存入寄存器r1

jal InputUnsigned ;跳转到InputUnsigned子程序处读取输入的

参数,同时将一条指令的地址存与r31中,即r31<-pc+4

add r3,r0,r1 ;由InputUnsigned 返回的参数赋r3寄存器,

此时r3存储的是时间

add r6,r0,0 ;将0赋值给r6

sgt r7,r6,r3 ;比较r3 和r6大小

bnez r7,error ;r7为1则结束程序

add r1,r0,Prompt2 ;将输入的数存入寄存器r1

jal InputUnsigned ;同上,跳转到InputUnsigned子程序

add r2,r0,r1 ;由InputUnsigned 返回的参数赋r2寄存器,此时r2存储的是加速度

add r1,r0,Prompt3 ;将输入的数存入寄存器r1

jal InputUnsigned ;同上,跳转到InputUnsigned子程序

;r3: time r2:add speed r1:innital speed

mult r1,r1,r3 ;时间乘以速度,并将之存入r1中。r1<--r1*r3 mult r3,r3,r3 ;时间的平方,并将之存入r3中。r3<--r3*r3

mult r2,r2,r3 ;加速度乘以时间的平方,并将之存入r2中。

add r4,r0,2 ;将2存入r1中,r4<--2

div r2,r2,r4 ;除以2,r2<--r2+r4

add r1,r1,r2 ;两段路程相加,得出最终结果,r1<--r1+r2

result: ;输出结果

;output the result

sw PrintValue,r1 ;将整型寄存器r1中的内容存到PrintfValue 地址单元中去

addi r14,r0,PrintPar ;将PrintfPar的内容送到寄存器中去

trap 5 ;调用中断,格式化输出转化为标准输出

;结束程序

trap 0 ;调用系统中断,0表示程序执行结束

4、如图7.4,输入数据为: time:3; accelerate speed:4; intial:10;

结果distance是48,根据路程公式:x=vt+1/2at^2;可知结果是正确的。

图7-5 实验数据结果图

5、因为程序的运行过程中,设置两个整型乘法器不能进行并行运算,所以2

个乘法器对程序运行频率没什么提高,但是通过优化程序运行顺序,可以减少相关,提高流水线利用率。

6、提高程序执行效率

相关主题
相关文档
最新文档