深 圳 大 学 实 验 报 告
课 程 名 称:
计算机系统(3)
实验项目名称:
MIPS64 乘法器模拟实验
学
专
院:
计算机与软件学院
业:
计算机科学与技术
指 导 教 师:
报告人:
学号:
班级:
实 验 时 间:
2017 年 10 月 23 日
实验报告提交时间:
2017 年 11 月 6 日
教务处制
一、 实验目标:
1. 实际运用 WinMIPS64 进行实验,以期更了解 WinMIPS64 的操作;
2. 更加深入地了解 MIPS 程序的语法;
3. 深入地了解在计算机中乘法的实现以及加法与乘法之间的关系。
二、实验内容
按照下面的实验步骤及说明,完成相关操作记录实验过程的截图:
首先,我们使用加法操作设计一个不检测溢出的乘法操作;完成后,我们对此进行优化,
以期获得一个可以对溢出进行检测的乘法操作。(100 分)
三、实验环境
硬件:桌面 PC
软件:Windows,WinMIPS64 仿真器
四、实验步骤及说明
本次试验分为两个部分:第一部分、用加法器设计一个不考虑溢出的乘法器;第二部分、
用加法器设计一个考虑溢出的乘法器(编程熟练的同学,也可以用除法器、浮点加法器等替
代)。
1、忽略溢出的乘法器
首先,我们得了解乘法器如何由加法器设计得到,此处,我们以 32 位乘法为例。
总共分为 4 步:
1. 测试乘数最低位是否为 1,是则给乘积加上被乘数,将结果写入乘积寄存器;
2. 被乘数寄存器左移 1 位;
3. 乘数寄存器右移一位;
4. 判断是否循环了 32 次,如果是,则结束,否则返回步骤 1。
深圳大学学生实验报告用纸
运行显示运行结果的例子如下,由于我们这里展示的是忽略了溢出的乘法,所以结果有
两种:1、小于 32 位;2、大于 32 位。
第一种情况截图:
第二种情况截图:
根据上面的程序代码和截图,我们可以很清楚的看出,当结果小于32位时,结果正常;当
结果大于32位时,结果只截取了低32位的结果,而高32位的结果直接忽略掉了。
深圳大学学生实验报告用纸
2、溢出提示的乘法器
上述的程序,用加法实现了 32 位乘法,但是,其中,对溢出情况没有进行考虑是其中的弊
端。这里,我们来完善上述的乘法器,使得该乘法器会在结果溢出时候提示。
其实,这个小优化是十分简单的,只需要对 64 位的寄存器中的高 32 位进行检测即可。当
高 32 位为 0 时,说明结果没有溢出,否则,结果溢出。
上述代码运行结果也有两个,一个是没有溢出的情况下的结果,一个是溢出了的情况下
的结果。
首先,我们看没有溢出的情况结果:
结果正确,其次,我们看溢出的情况结果如何:
可以看到,当结果溢出时,程序会给出提示“warning:result overflow”。
4 结束语
本实验介绍了通过加法器来设计乘法器的原理,并且在编写该实验程序的时候,我
们更加了解了:1、计算机乘法器工作原理的内容;2、进一步熟练 MIPS 的编程方法;
3、WinMIPS64 的使用方法。当然,如果想要更加深入的学习,我们也可以课外继续编
写对除法的模拟。
五、实验结果
1.忽略溢出的乘法器
1)关键代码:
daddi r3,r0,8
daddi r5,r0,0
daddi r6,r0,0
sd r3,(r1)
lw r5,(r2)
sd r3,(r1)
#输入两个数
#控制器控制从键盘读取数字
#被乘数寄存器:r5
#乘数寄存器:r6
#从键盘读取一个被乘数
#将被乘数读取到r5
#从键盘读取一个乘数
深圳大学学生实验报告用纸
lw r6,(r2)
#将被乘数读取到r6
daddi r7,r0,0
daddi r8,r0,0
#积寄存器:r7
#计数器i:r8=0
LOOP:
andi r9,r6,1
beqz r9,ZERO
#循环体
#判断乘数最后一位是否为1
#0时直接跳转
daddu r7,r7,r5
#1时积加上被乘数
ZERO:
dsll r5,r5,1
dsrl r6,r6,1
#被乘数左移1位
#乘数右移1位
daddi r8,r8,1
#i++
daddi r9,r8,-32
#判断是否循环了32次
beqz r9,EXIT
#循环了32次跳出循环,否则继续循环
j LOOP
EXIT:
lwu r4,LO(r0)
and r7,r7,r4
#取积寄存器的低32位,LO:0xffffffff
daddi r3,r0,1
#控制器控制屏幕输出
sd r7,(r2)
sd r3,(r1)
#输出积寄存器中低32位的值到屏幕中
2)运算结果截图
a.小于 32 位时
b.大于 32 位时
深圳大学学生实验报告用纸
2.溢出提示的乘法器
1)关键代码(EXIT 前代码与忽略溢出的代码一致,只是增加了对积寄存器高 32
位的检测)
EXIT:
lwu r4,LO(r0)
#取积寄存器的低32位,LO:0xffffffff,结果放在r8
and r8,r7,r4
dsrl r9,r7,31
#取积寄存器的高32位,结果放在r9
dsrl r9,r9,1
and r9,r9,r4
daddi r3,r0,1
#控制器控制屏幕输出
#输出积寄存器中低32位的值到屏幕中
#如果积寄存器的高32位为0,说明没有溢出,程序结束
#如果积寄存器的高32位不为0,说明溢出,输出提示“warning:result overflow”
sd r8,(r2)
sd r3,(r1)
beq r9,r0,end
daddi r3,r0,4
daddi r4,r0,warn
sd r4,(r2)
sd r3,(r1)
end:
halt
2)运算结果截图
a.小于 32 位,结果没有溢出时
b.大于 32 位,结果溢出时
深圳大学学生实验报告用纸
五、实验总结与体会
通 过 本 次 实 验 , 我 实 际 运 用 了 WinMIPS64 进 行 实 验 , 从 而 更 了 解 了
WinMIPS64 的操作,也更加深入地了解 MIPS 程序的语法。通过使用加法器模
拟乘法器使得我深入的了解了在计算机中乘法的实现以及加法与乘法之间的关
系。
深圳大学学生实验报告用纸
指导教师批阅意见:
成绩评定:
备注:
指导教师签字: 王毅
2017 年 11 月 10 日
注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。
2、教师批改学生实验报告时间应在学生提交实验报告时间后 10 日内。