院
专
年
系:
业:
级:
课程名称:
计算机系统结构
学
姓
号:
名:
指导教师:
年
月
日
- 0 -
班级
班级
年级
学号
专业
计算机科学与技
术
姓名
题目
名称
矩阵相乘
题目
内容
1. 掌握 DLX 的流水线运行分析,包括流水线单步执行、每个流水段功能、理解流 水线停顿、流水线建立和排空、定向技术。掌握调整 DLX 参数,如内存大小、功能 单元个数、延迟,分析对程序运行的影响。
2. 编写计算矩阵相乘的程序,掌握调试方法。
实
验
结
果
与
分
析
图一.运行结果
(使用%4d 来控制输出的齐)
- 1 -
实验
实
验
结
果
与
分
析
图二.寄存器
图三.流水线
- 2 -
实验
实
验
结
果
与
分
析
图四.内存代码
图五.内存查看
- 3 -
实验
实
验
结
果
与
分
析
图六.内存查看结果
图七.内存修改
- 4 -
实验
实
验
结
果
与
分
析
图八.内存修改结果
图九.向量使用结果
图十.未使用向量的结果
- 5 -
开始输入矩阵A 的行数输
开始
输入矩阵A 的行数
输入矩阵A的
列数和B的行 数
输入矩阵B的 列数
读入A矩阵元 素
输出A矩阵元 素
读入B矩阵元 素
输出B矩阵元 素
计算AXB矩 阵,得C矩阵
输出C矩阵
实
验
结
果
与
分
析
图十一.程序流程
- 6 -
f1=A的行数,f2=A 的列数和B的行 数,f3=B
f1=A的行数,f2=A 的列数和B的行 数,f3=B的列数
A的元素个数
R4=f1*f2,R2=A矩 阵首地址, R6=f1,R8=f2
输入A矩阵的元素
R4--
输出A矩阵同一行 的元素,R6--
R11=0,R4=0,R5=0
计算A矩阵和B矩阵 的结果C矩阵
R6=0
R5++
把R11存入C矩阵,
位置为R4,R4+1,
R6+1
Temp=temp+ A矩阵R10位置的元 素*B矩阵R7位置的
元素,R10+1
R10为当前行的元 素位置,R9为当前 行最后一个元素的
位置
R5控制行,R6控制 列
输入A元素流程
实
验
结
果
与
分
析
R5>f1?
R1=f6,R10=R5*R1
输出A矩阵流程
输出C矩阵
Y
结束
R6=0? Y
N
输入换行,R8--,
R6=f2
R7=0,R11=0,
R9=(R5+1)*f1
R8=0?
Y
R10>R9?
同上输入B矩阵和 输出B矩阵
同上输入B矩阵和 输出B矩阵
开始
N
N
R4=0?
N
N
R6>f3?
图十二.算法设计图
- 7 -
实验
实
验
结
果
与
分
析
实验结果分析:
本次实验中,学会使用 DLX 软件,对于其汇编代码有一个整体上的 认识。具体有如下几个小点:
熟悉 DLX 的仿真硬件系统结构,包括寄存器、计算功能单元、指令系 统、流水线。
熟悉 DLX 仿真软件的功能,包括主要的功能界面。
掌握 DLX 应用程序的编程和调试技术。
掌握 DLX 的流水线运行分析,包括流水线单步执行、每个流水段功能、 理解流水线停顿、流水线建立和排空、定向技术。
掌握调整 DLX 参数,如内存大小、功能单元个数、延迟,分析对程序 运行的影响
通过编写矩阵相乘来检验掌握的程度,对与在其中出现的问题进行 分析,和解决。能通过单步执行来调试程序,找出出错点和逻辑错误点, 并加以改正。
在实验中,几个重点难点。首先是从主程序中跳 InputUnsigned 函 数中,对于参数的传递要有一个清楚的认识。其次是,对于系统自陷 trap 要有一个认识,如 trap 0 是结束、trap 3 是输入和 trap 5 是输出,当然 也有传递的参数也是重点分别是 r1 和 r14。
对于向量的使用也有一个初步的认识,当使用向量时,程序的流水线 明显比不适用向量快的多,结果的截图也很清楚的说明了这个问题。
- 8 -
程序
程
序
代
码
.data
;*** Prompts for input ;输入提示部分
: .space 64
: .space 64
: .space 64
Prompt1: .asciiz "输入 A 矩阵的行:"
Prompt2: .asciiz "输入 A 矩阵的列和 B 矩阵的列: " Prompt3: .asciiz "输入 B 矩阵的列:"
Prompt4: .asciiz "输入 A 矩阵元素 r:"
Prompt5: .asciiz "输入 A 矩阵元素:"
;*** Data for printf-Trap ;输出数据设置部分
PrintfFormat: .asciiz "%d "
.align 2
PrintfPar: .word PrintfFormat
PrintfValue: .space 4