计算机系统结构报告-用DLX编写矩阵相乘_第1页
计算机系统结构报告-用DLX编写矩阵相乘_第2页
计算机系统结构报告-用DLX编写矩阵相乘_第3页
计算机系统结构报告-用DLX编写矩阵相乘_第4页
计算机系统结构报告-用DLX编写矩阵相乘_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、院 系: 专 业: 年 级: 课程名称: 计算机系统结构 学 号: 姓 名: 指导教师: 年 月 日年级班级?学号专业?姓名题目名称用DLX汇编语言编写矩阵相乘程序题目内容1、掌握DLX应用程序的编程和调试技术。掌握DLX的流水线运行分析,包括流水线单步执行、每个流水段功能、理解流水线停顿、流水线建立和排空、定向技术。掌握调整DLX参数,如内存大小、功能单元个数、延迟,分析对程序运行的影响。2、编写计算矩阵相乘的程序,掌握调试方法。实验结果与分析实验结果:(1) 先输入矩阵A和矩阵B的行数和列数,再输入矩阵A的各元素数值,显示矩阵A;再输入矩阵B的各元素数值,显示矩阵B;最后进行矩阵相乘,输出

2、结果矩阵C。(2)各矩阵元素均赋初值为0。实验结果与分析(3)显示流水线的部分时空图。实验结果分析:通过调用所编写的矩阵相乘的DLX汇编程序和程序,运行WINDLX环境平台,加载好所需项后,根据提示输入两个矩阵的行和列的值及矩阵的各行各列所对应的元素数值,并显示要进行计算的两个矩阵,以便进行矩阵相乘,运行结束后自动显示得出矩阵的结果,本次实验可以重复运行进行矩阵相乘。实验同时亦可查看流水线分布及DLX的流水线运行分析,包括流水线单步执行、每个流水段功能、理解流水线停顿、流水线建立和排空、定向技术。?通过Prompt语句显示提示语句,输入所需数据,其计算结果一个一个地存放于内存中,利用Print

3、fPar语句输出结果。利用寄存器存放输入的矩阵元素和计算的结果,并将其在整形与浮点类型间进行转化。(写不完时,可另加附页。)程序代码程序代码程序代码程序代码程序代码;*multiply an array to an array *;* *;-; Program begins at symbol main; requires module INPUT; Read two arrays, calculate the multiplition of two arrays ; and write the result to stdout;-.data ;* Prompts for input ;输入提

4、示部分dat1: .space 64dat2: .space 64result: .space 64Prompt1: .asciiz Input the martrixA line:Prompt2: .asciiz Input the martrixA column and the martrixB line: Prompt3: .asciiz Input the martrixB column:Prompt4: .asciiz Input the martrixAs number:Prompt5: .asciiz Input the martrixBs number:Prompt6: .as

5、ciiz Do you want again (no=0): ;* Data for printf-Trap ;输出数据设置部分PrintfFormat:.asciiz %d .align2PrintfPar: .wordPrintfFormatPrintfValue: .space4PrintfFormat1:.asciiz n .align2PrintfPar1:.wordPrintfFormat1PrintfValue1:.space4PrintfFormat2:.asciiz Output the martrixA:n .align2PrintfPar2:.wordPrintfForm

6、at2PrintfValue2:.space4PrintfFormat3:.asciiz Output the martrixB:n .align 2PrintfPar3:.wordPrintfFormat3PrintfValue3:.space4PrintfFormat4:.asciiz Output the martrixC:n .align2PrintfPar4:.wordPrintfFormat4PrintfValue4:.space4.text.globalmainmain:addi r1,r0,Prompt1jal InputUnsigned movi2fp f1,r1 ;矩阵A的

7、行数 addi r1,r0,Prompt2jal InputUnsigned 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,dat1 ;指向A的首地址 loop1: add r1,r0,Prompt4 ;分别读入矩阵A的元素值 jal InputUnsigned sb 0(r2),r1 ;储存字节,读入元素 addi r2,r2,

8、1 ;元素个数加一 sub r4,r4,1 ;总的矩阵元素个数r4减一 bnez r4,loop1 ;r4不为0时跳转重复输入 addi r10,r0,0 ;分别读出矩阵A的元素值 addi r2,r10,dat1 ;指向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 ;矩

9、阵A的列数r6等于0时跳到outputA j loopA ;否则继续loopA outputA: sw PrintfValue1,r1addi r14,r0,PrintfPar1 trap 5 sub r8,r8,1 ;矩阵A的行数r8减一 beqz r8,countiuB ;矩阵A的行数r8等于0时跳到countiuB movfp2i r6,f2 j loopA ;否则继续loopA countiuB: movfp2i r6,f2 movfp2i r12,f3 addi r10,r0,0 multu r4,r6,r12 ;总的矩阵B的元素个数r4 addi r2,r10,dat2 ;指向B的

10、首地址 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,dat2 ;指向B的首地址 sw PrintfValue3,r1addi r14,r0,PrintfPar3 trap 5 loopB: lbu r1,0(r2) sw PrintfValue,r1add

11、i 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,r1addi r14,r0,PrintfPar1 trap 5 sub r6,r6,1 ;矩阵B的行数r6减一 beqz r6,countiue ;矩阵B的行数r6等于0时跳到countiu movfp2i r12,f3 j loopB ;否则继续loopB countiu

12、e: addi r11,r0,0 ;temp,表示矩阵C的一个元素的累加器 addi r4,r0,0 ;r 初始化矩阵C的偏移量 addi r5,r0,0 ;矩阵A当前被扫描的行号 line: movi2fp f4,r5 ;判断是否扫描完 ltf f4,f1 ;f4f1跳转(矩阵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

13、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 ;co

14、mpare i to pz(判断是否计算到当前行的最后一个元素) bfpf asign ;当前行列相乘完毕,得出结果矩阵C的一个元素(跳转赋值) addi r1,r10,dat1 ;取矩阵A当前元素在内存区域中的地址 lbu r2,0(r1) ;从r1所指向的内存单元中取出矩阵A当前的元素暂存在r2 addi r1,r7,dat2 ;取矩阵B当前元素在内存区域中的地址 lbu r3,0(r1) ;从r1所指向的内存单元中取出矩阵B当前的元素暂存在r3 multu r1,r2,r3 ;temp1-dat1i+dat2j add r11,r11,r1 ;temp-temp+temp1,累加到累加器

15、 addi r10,r10,1 ;i+,计算矩阵A当前行的下个元素的索引 movfp2i r1,f3 add r7,r7,r1 ;j-j+k,计算矩阵B的当前列的下个元素的索引 j calculate asign: addi r1,r4,result ;r1表示矩阵C当前的地址 sb 0(r1),r11 ;store result,把新计算出来的元素放入当前内存单元 addi r4,r4,1 ;赋值完一个元素,偏移量自增1 addi r6,r6,1 ;矩阵B的当前列数自增1 j column ;矩阵B新的一列开始 leveladd: addi r5,r5,1 ;矩阵A当前行自增1 j line

16、 ;矩阵A新的一行开始 finish: addi r10,r0,0 ;分别读出矩阵C的元素值 movfp2i r8,f1 movfp2i r12,f3 addi r2,r10,result sw PrintfValue4,r1addi r14,r0,PrintfPar4 trap 5 loop3: lbu r1,0(r2) sw PrintfValue,r1addi r14,r0,PrintfPar trap 5 addi r2,r2,1 sub r12,r12,1 beqz r12,outputC j loop3 outputC: sw PrintfValue1,r1addi r14,r0,PrintfPar1 trap 5 sub r8,r8,1 beqz r8,choice movfp2i r12,f3 j loop3 ;* end choice: add r1,r0,Prompt6 ;是否重复本次运行操作 jal InputUnsigned beqz r1,end ;若为0则结束运行 j main ;否则则重复执行 end: trap 0心得体会 通过本次系统结构实验,我对DLX的流水线运行分析,包括流水

温馨提示

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

评论

0/150

提交评论