计算机系统结构实验报告(中南民族大学)_第1页
计算机系统结构实验报告(中南民族大学)_第2页
计算机系统结构实验报告(中南民族大学)_第3页
计算机系统结构实验报告(中南民族大学)_第4页
计算机系统结构实验报告(中南民族大学)_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

0 院 系 专 业 年 级 课程名称 计算机系统结构 学 号 姓 名 指导教师 年 月 日 1 年级 学号 专业 计算机科学与技 术 班级 姓名 题目 名称 矩阵相乘 题目 内容 1 掌握 DLX 的流水线运行分析 包括流水线单步执行 每个流水段功能 理解流 水线停顿 流水线建立和排空 定向技术 掌握调整 DLX 参数 如内存大小 功能 单元个数 延迟 分析对程序运行的影响 2 编写计算矩阵相乘的程序 掌握调试方法 实 验 结 果 与 分 析 图一 运行结果 使用 4d 来控制输出的齐 2 实 验 结 果 与 分 析 图二 寄存器 图三 流水线 3 实 验 结 果 与 分 析 图四 内存代码 图五 内存查看 4 实 验 结 果 与 分 析 图六 内存查看结果 图七 内存修改 5 实 验 结 果 与 分 析 图八 内存修改结果 图九 向量使用结果 图十 未使用向量的结果 6 实 验 结 果 与 分 析 开始 输入矩阵A 的行数 输入矩阵A的 列数和B的行 数 输入矩阵B的 列数 读入A矩阵元 素 输出A矩阵元 素 读入B矩阵元 素 输出B矩阵元 素 计算AXB矩 阵 得C矩阵 输出C矩阵 图十一 程序流程 7 实 验 结 果 与 分 析 开始 f1 A的行数 f2 A 的列数和B的行 数 f3 B的列数 A的元素个数 R4 f1 f2 R2 A矩 阵首地址 R6 f1 R8 f2 R4 0 输入A矩阵的元素 N R6 0 Y R4 输出A矩阵同一行 的元素 R6 输入换行 R8 R6 f2 N Y R8 0 N Y 同上输入B矩阵和 输出B矩阵 R11 0 R4 0 R5 0 R5 f1 计算A矩阵和B矩阵 的结果C矩阵 R6 0 R6 f3 R1 f6 R10 R5 R1 R7 0 R11 0 R9 R5 1 f1 N R5 N R10 R9 把R11存入C矩阵 位置为R4 R4 1 R6 1 Temp temp A矩阵R10位置的元 素 B矩阵R7位置的 元素 R10 1 输出C矩阵 结束 R10为当前行的元 素位置 R9为当前 行最后一个元素的 位置 R5控制行 R6控制 列 输入A元素流程 输出A矩阵流程 图十二 算法设计图 8 实 验 结 果 与 分 析 实验结果分析 实验结果分析 本次实验中 学会使用 DLX 软件 对于其汇编代码有一个整体上的 认识 具体有如下几个小点 1 熟悉 DLX 的仿真硬件系统结构 包括寄存器 计算功能单元 指令系 统 流水线 2 熟悉 DLX 仿真软件的功能 包括主要的功能界面 3 掌握 DLX 应用程序的编程和调试技术 4 掌握 DLX 的流水线运行分析 包括流水线单步执行 每个流水段功能 理解流水线停顿 流水线建立和排空 定向技术 5 掌握调整 DLX 参数 如内存大小 功能单元个数 延迟 分析对程序 运行的影响 通过编写矩阵相乘来检验掌握的程度 对与在其中出现的问题进行 分析 和解决 能通过单步执行来调试程序 找出出错点和逻辑错误点 并加以改正 在实验中 几个重点难点 首先是从主程序中跳 InputUnsigned 函 数中 对于参数的传递要有一个清楚的认识 其次是 对于系统自陷 trap 要有一个认识 如 trap 0 是结束 trap 3 是输入和 trap 5 是输出 当然 也有传递的参数也是重点分别是 r1 和 r14 对于向量的使用也有一个初步的认识 当使用向量时 程序的流水线 明显比不适用向量快的多 结果的截图也很清楚的说明了这个问题 9 程 序 代 码 data Prompts for input 输入提示部分 A space 64 B space 64 C 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 align2 PrintfPar wordPrintfFormat PrintfValue space4 PrintfFormat1 asciiz n align2 PrintfPar1 wordPrintfFormat1 PrintfFormat 1 asciiz n align2 PrintfPar 1 wordPrintfFormat 1 PrintfValue1 space4 PrintfFormat2 asciiz 输出 A 矩阵 n align2 PrintfPar2 wordPrintfFormat2 PrintfValue2 space4 PrintfFormat3 asciiz 输出 B 矩阵 n align 2 PrintfPar3 wordPrintfFormat3 PrintfValue3 space4 PrintfFormat4 asciiz 输出 C 矩阵 n align2 PrintfPar4 wordPrintfFormat4 PrintfValue4 space4 text globalmain 10 程 序 代 码 main addi r1 r0 Prompt1 jal InputUnsigned movi2fp f1 r1 矩阵 A 的行数 addi r1 r0 Prompt2 jalInputUnsigned movi2fp f2 r1 矩阵 A 的列数 矩阵 B 的行数 addi r1 r0 Prompt3 jal InputUnsigned movi2fp f3 r1 矩阵 B 的列数 movfp2i r8 f1 movfp2i r6 f2 multu r4 r6 r8 总的矩阵 A 的元素个数 r4 addi r2 r10 A 指向 A 的首地址 loop1 add r1 r0 Prompt4 分别读入矩阵 A 的元素值 jal InputUnsigned sb 0 r2 r1 储存字节 读入元素 addi r2 r2 1 元素个数加一 sub r4 r4 1 总的矩阵元素个数 r4 减一 bnez r4 loop1 r4 不为 0 时跳转重复输入 addi r10 r0 0 分别读出矩阵 A 的元素值 addi r2 r10 A 指向 A 的首地址 sw PrintfValue2 r1 addi r14 r0 PrintfPar2 trap 5 loopA lbu r1 0 r2 sw PrintfValue r1 addi r14 r0 PrintfPar 换行 trap 5 addi r2 r2 1 元素个数加一 sub r6 r6 1 矩阵 A 的列数 r6 减一 beqz r6 outputA 矩阵 A 的列数 r6 等于 0 时跳到 outputA j loopA 否则继续 loopA outputA swPrintfValue1 r1 addi r14 r0 PrintfPar1 trap 5 sub r8 r8 1 矩阵 A 的行数 r8 减一 beqz r8 countiuB 矩阵 A 的行数 r8 等于 0 时跳到 countiuB movfp2i r6 f2 11 程 序 代 码 j loopA 否则继续 loopA countiuB addi r14 r0 PrintfPar 1 trap 5 movfp2i r6 f2 movfp2i r12 f3 addi r10 r0 0 multu r4 r6 r12 总的矩阵 B 的元素个数 r4 addi r2 r10 B 指向 B 的首地址 loop2 addi r1 r0 Prompt5 分别读入矩阵 B 的元素值 jal InputUnsigned sb 0 r2 r1 储存字节 读入元素 addi r2 r2 1 元素个数加一 sub r4 r4 1 总的矩阵元素个数 r4 减一 bnez r4 loop2 r4 不为 0 时跳转重复输入 addi r10 r0 0 分别读出矩阵 B 的元素值 addi r2 r10 B 指向 B 的首地址 swPrintfValue3 r1 addi r14 r0 PrintfPar3 trap 5 loopB lbu r1 0 r2 swPrintfValue r1 addi r14 r0 PrintfPar 换行 trap 5 addi r2 r2 1 元素个数加一 sub r12 r12 1 矩阵 B 的列数 r12 减一 beqz r12 outputB 矩阵 B 的列数 r12 等于 0 时跳到 outputB j loopB 否则继续 loopB outputB sw PrintfValue1 r1 addi r14 r0 PrintfPar1 trap 5 sub r6 r6 1 矩阵 B 的行数 r6 减一 beqz r6 countiue 矩阵 B 的行数 r6 等于 0 时跳到 countiu movfp2i r12 f3 j loopB 否则继续 loopB 12 程 序 代 码 countiue addi r11 r0 0 temp 表示矩阵 C 的一个元素的累加器 addi r4 r0 0 r 初始化矩阵 C 的偏移量 addi r5 r0 0 矩阵 A 当前被扫描的行号 line movi2fp f4 r5 判断是否扫描完 ltf f4 f1 f4 f1 跳转 矩阵 A 的行是否扫描完 bfpf finish 是 则跳转结束程序 addi r6 r0 0 col r6 表示当前 B 矩阵的列号 column movi2fp f4 r6 ltf f4 f3 col f3 f4 矩阵 B 的列是否扫描完 bfpf leveladd 是 则跳到矩阵 A 的下一行 movfp2i r1 f2 multu r10 r5 r1 i l n r10 表示矩阵 A 当前行的第一个元素的索引 addi r7 r6 0 mov col to j 矩阵 B 某一列的某个元素的索引 addi r11 r0 0 temp 0 矩阵 C 当前的元素值的初始化 addi r9 r5 1 r9 l 1 r9 代表矩阵 A 当前数组中的实际行号 r5 的 初值为 0 movfp2i r1 f2 f2 是矩阵 A 的列数 multu r9 r1 r9 p n l 1 r9 代表矩阵 A 当前行中最后一个元素在数 组中的索引 calculate movi2fp f4 r10 movi2fp f9 r9 ltf f4 f9 compare i to pz 判断是否计算到当前行的最后一个元素 bfpf asign 当前行列相乘完毕 得出结果矩阵 C 的一个元素 跳转 赋值 addi r1 r10 A 取矩阵 A 当前元素在内存区域中的地址 lbu r2 0 r1 从 r1 所指向的内存单元中取出矩阵 A 当前的元素暂存 在 r2 addi r1 r7 B 取矩阵 B 当前元素在内存区域中的地址 lbu r3 0 r1 从 r1 所指向的内存单元中取出矩阵 B 当前的元素暂存 在 r3 multu r1 r2 r3 temp1 A i B j add r11 r11 r1 temp temp temp1 累加到累加器 addi r10 r10 1 i 计算矩阵 A 当前行的下个元素的索引 movfp2i r1 f3 add r7 r7 r1 j j k 计算矩阵 B 的当前列的下个元素的索引 j calculate 13 程 序 代 码 asign addi r1 r4 C r1 表示矩阵 C 当前的地址 sb 0 r1 r11 store C 把新计算出来的元素放入当前内存单元 addi r4 r4 1 赋值完一个元素 偏移量自增 1 addi r6 r6 1 矩阵 B 的当前列数自增 1 j column 矩阵 B 新的一列开始 leveladd addi r5 r5 1 矩阵 A 当前行自增 1 j line 矩阵 A 新的一行开始 finish addi r10 r0 0 分别读出矩阵 C 的元素值 movfp2i r8 f1 movfp2i r12 f3 addi r2 r10 C sw PrintfValue4 r1 addi r14 r0 PrintfPar 1 trap 5 addi r14 r0 PrintfPa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论