MIPS64乘法器模拟实验

news2024/12/30 4:14:30

目录

忽略溢出的乘法器

溢出提示的乘法器


忽略溢出的乘法器

首先,我们得了解乘法器如何由加法器设计得到,此处,我们以32位乘法为例。

总共分为4步:

1.     测试乘数最低位是否为1,是则给乘积加上被乘数,将结果写入乘积寄存器;

2.     被乘数寄存器左移1位;

3.     乘数寄存器右移一位;

4.     判断是否循环了32次,如果是,则结束,否则返回步骤1。

流程图如图1所示

图1

首先初始化一些数据,包括要输出的两个字符串提示信息和两个内容映射地址,如图2所示。

图2

然后写代码输出这两个字符串,其中输出pleas enter two numbers的代码如图3所示。

图3

然后需要获取被乘数和乘数,将CONTROL的值改为8,获取整数输入,如图4所示。

图4

然后开始乘法计算过程,如图5所示,测试乘数最低位是否为1,是则给乘积加上被乘数,将结果写入乘积寄存器,否则跳到下一步,下一步是被乘数寄存器左移1位,乘数寄存器右移一位,最后判断是否循环了32次,如果是,则结束,否则返回第一步。

图5

最后把CONTROL改为2,输出乘积结果,如图6所示。

图6

运行显示运行结果的例子如下,由于我们这里展示的是忽略了溢出的乘法,所以结果有两种:1、小于32位;2、大于32位。

第一种情况截图如图7所示:

图7

第二种情况截图如图8所示:

图8

根据上面的程序代码和截图,我们可以很清楚的看出,当结果小于32位时,结果正常;当结果大于32位时,结果只截取了低32位的结果,而高32位的结果直接忽略掉了。

	.data
CONTROL: .word32 0x10000
DATA:	.word32 0x10008
cue1:	.asciiz "please enter two numbers:\n"
cue2:   .asciiz "results:\n"
	
	.text
	daddi r1,r0,cue1 	# please enter two numbers
	lw r2,DATA(r0)
	sd r1,0(r2)
	daddi r1,r0,4
	lw r2,CONTROL(r0)
	sd r1,0(r2)

	daddi r1,r0,8	 	# r3=a
	lw r2,CONTROL(r0)
	sd r1,0(r2)
	lw r2,DATA(r0)
	lw r3,0(r2)


	daddi r1,r0,8 		# r4=b
	lw r2,CONTROL(r0)
	sd r1,0(r2)
	lw r2,DATA(r0)
	lw r4,0(r2)

	dadd r5,r0,r0		# r5=0 for r5=a*b
	daddi r1,r0,32
loop:	andi r2,r4,1		# r4[-1]
	beq r2,r0,zero		# r4[-1]==1?
	dadd r5,r5,r3
zero:	dsll r3,r3,1
	dsra r4,r4,1
	daddi r1,r1,-1
	bne r1,r0,loop

	daddi r1,r0,cue2	# results
	lw r2,DATA(r0)
	sd r1,0(r2)
	daddi r1,r0,4
	lw r2,CONTROL(r0)
	sd r1,0(r2)

	lw r2,DATA(r0)		# output a*b
	sd r5,0(r2)
	daddi r1,r0,2
	lw r2,CONTROL(r0)
	sd r1,0(r2)

	halt

溢出提示的乘法器

上述的程序,用加法实现了32位乘法,但是,其中,对溢出情况没有进行考虑是其中的弊端。这里,我们来完善上述的乘法器,使得该乘法器会在结果溢出时候提示。

其实,这个小优化是十分简单的,只需要对64位的寄存器中的高32位进行检测即可。当高32位为0时,说明结果没有溢出,否则,结果溢出。

首先在数据里加上一条提示字符串,如图9所示。

图9

将乘积寄存器进行算术右移32位取其高32,如图10所示,因不能一次移32位,所以分两次移位,然后判断是否为0,如果高32位为0说明没有溢出,如果不为0则说明已经溢出了,则输出提示字符串。

图10

上述代码运行结果也有两个,一个是没有溢出的情况下的结果,一个是溢出了的情况下的结果。

首先,我们看没有溢出的情况结果,如图11所示:

图11

结果正确,其次,我们看溢出的情况结果如何,如图12所示:

图12

可以看到,当结果溢出时,程序会给出提示“warning:result overflow”。

	.data
CONTROL: .word32 0x10000
DATA:	.word32 0x10008
cue1:	.asciiz "please enter two numbers:\n"
cue2:   .asciiz "results:\n"
cue3:   .asciiz "warning: result overflow\n"
	
	.text
	daddi r1,r0,cue1 	# please enter two numbers
	lw r2,DATA(r0)
	sd r1,0(r2)
	daddi r1,r0,4
	lw r2,CONTROL(r0)
	sd r1,0(r2)

	daddi r1,r0,8	 	# r3=a
	lw r2,CONTROL(r0)
	sd r1,0(r2)
	lw r2,DATA(r0)
	lw r3,0(r2)


	daddi r1,r0,8 		# r4=b
	lw r2,CONTROL(r0)
	sd r1,0(r2)
	lw r2,DATA(r0)
	lw r4,0(r2)

	dadd r5,r0,r0		# r5=0 for r5=a*b
	daddi r1,r0,32
loop:	andi r2,r4,1		# r4[-1]
	beq r2,r0,zero		# r4[-1]==1?
	dadd r5,r5,r3
zero:	dsll r3,r3,1
	dsra r4,r4,1
	daddi r1,r1,-1
	bne r1,r0,loop

	daddi r1,r0,cue2	# results
	lw r2,DATA(r0)
	sd r1,0(r2)
	daddi r1,r0,4
	lw r2,CONTROL(r0)
	sd r1,0(r2)

	lw r2,DATA(r0)		# output a*b
	sd r5,0(r2)
	daddi r1,r0,2
	lw r2,CONTROL(r0)
	sd r1,0(r2)

	dsra r1,r5,16		# r1=r5[0:31]
	dsra r1,r1,16		
	beq r1,r0,end
	
	daddi r1,r0,cue3	# output overflow
	lw r2,DATA(r0)
	sd r1,0(r2)
	daddi r1,r0,4
	lw r2,CONTROL(r0)
	sd r1,0(r2)

end:	halt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1109737.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux-Jconsole连接远程服务器

Jconsole连接远程服务器 一、修改jmxremote.password.template文件二、启动jar项目三、jconsole远程连接1、打开的你jconsole2、远程连接 一、修改jmxremote.password.template文件 进去你的/idk/jre/lib/management目录下可以看到jmxremote.password.template文件 修改jmxr…

“智能+”时代,深维智信如何借助阿里云打造AI内容生成系统

云布道师 前言: 随着数字经济的发展,线上数字化远程销售模式越来越成为一种主流,销售流程也演变为线上视频会议、线下拜访等多种方式的结合。根据 Gartner 报告,到 2025 年 60% 的 B2B 销售组织将从基于经验和直觉的销售转变为数…

lazada店铺商品评论数据采集,lazada商品评论数据接口,lazadaAPI接口

lazada店铺商品评论数据可以通过以下步骤进行采集: 注册Lazada开发者账号。首先在Lazada开放平台网站上注册并创建开发者账号,并创建一个应用,获取到所需的App Key和App Secret等信息。设置API密钥和访问令牌。使用获取到的App Key和App Sec…

(python)系统路径和文件操作 —— os和pathlib

文章目录 前言1、遍历目录下的文件 前言 pathlib 和 os 是 Python 中用于处理文件路径和文件系统操作的两个模块。os 模块提供了底层的操作系统相关功能;pathlib 提供了面向对象的路径操作接口。pathlib 模块实际上是在 os 模块的基础上进行了封装和扩展&#xff0…

2023年中国车载导航仪产量、销量及市场规模分析[图]

车载导航仪是一种用于汽车上的电子设备,用于帮助驾驶员找到目的地并规划路线,它通常使用地图软件和GPS定位技术来确定车辆的位置,并提供语音和图形指示,以指导驾驶员前往目的地。 车载导航仪行业分类 资料来源:共研产…

又一个新指标可以写,氧化平衡评分,源自膳食以及生活方式

郑老师统计课程,欢迎点击报名:Nhanes公共数据库挖掘 课程 最近学习文献,发现新指标的使用在越来越NHANES数据库类的文章上占比越来越高。以往的研究证明饮食与生活方式与睡眠质量存在关联,本期我们要学习的文章推出了一个新指标&a…

使用免费SSL证书的好处

在互联网上保护用户隐私和数据安全是至关重要的。SSL证书是一种常见的安全解决方案,用于加密通信并验证网站的真实性。SSL(安全套接层)证书是一种数字证书,用于建立加密连接,保护数据的机密性和完整性。虽然商业SSL证书…

2023年【氧化工艺】考试报名及氧化工艺考试总结

题库来源:安全生产模拟考试一点通公众号小程序 氧化工艺考试报名是安全生产模拟考试一点通总题库中生成的一套氧化工艺考试总结,安全生产模拟考试一点通上氧化工艺作业手机同步练习。2023年【氧化工艺】考试报名及氧化工艺考试总结 1、【单选题】 由和O…

解决ConfigurationBuilder未包含“SetBasePath”的定义

在类库文件中使用ConfigurationBuilder读取json文件时提示ConfigurationBuilder未包含“SetBasePath”的定义。 解决方案: 包控制管理器安装这三个包,缺一不可 Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.FileExtensions…

FXL6408UMX一款完全可配置的8位12C控制GPIO扩展器

FXL6408UMX是一款8位I 2 C受控的GPIO扩展器。当配置为输入模式时,FXL6408监控用于数据转换的输入端口,并通过指定/ INT引脚的所有输入可配置上拉或下拉电阻,在漏极开路或非驱动应用场景预偏置输入。当配置为输出模式时, GPIO引脚根…

四元数数学性质、运算规则、线性插值(公式版)

四元数 Q ⟨ x , y , z , w ⟩ Q \langle x, y, z, w \rangle Q⟨x,y,z,w⟩ Q x i y j z k w Q xi yj zk w Qxiyjzkw 1.运算与性质 1)数乘 Q s ⋅ ⟨ x , y , z , w ⟩ ⟨ s ⋅ z , s ⋅ y , s ⋅ z , s ⋅ w ⟩ Q s \cdot \langle x, y, z, w \rangle \langle…

java击球小游戏运行代码

创建一个图形化的小游戏通常需要使用Java图形库,例如Swing或JavaFX。下面是一个使用JavaFX创建的简单的图形化小游戏示例,其中一个小球会在窗口内移动,你需要点击小球以增加得分: import javafx.application.Application; import…

淘宝开放平台 API 获取淘宝天猫店铺订单接口

业务场景:作为全球最大的 B2C 电子商务平台之一,淘宝(天猫)平台提供了丰富的商品资源,吸引了大量的全球买家和卖家。为了方便开发者接入淘宝平台,淘宝平台提供了丰富的 API 接口,其中商品详情接…

2023年【北京市安全员-A证】试题及解析及北京市安全员-A证证考试

题库来源:安全生产模拟考试一点通公众号小程序 北京市安全员-A证试题及解析是安全生产模拟考试一点通总题库中生成的一套北京市安全员-A证证考试,安全生产模拟考试一点通上北京市安全员-A证作业手机同步练习。2023年【北京市安全员-A证】试题及解析及北…

【大数据开发技术】实验06-SequenceFile、元数据操作与MapReduce单词计数

文章目录 SequenceFile、元数据操作与MapReduce单词计数一、实验目标二、实验要求三、实验内容四、实验步骤附:系列文章 SequenceFile、元数据操作与MapReduce单词计数 一、实验目标 熟练掌握hadoop操作指令及HDFS命令行接口掌握HDFS SequenceFile读写操作掌握Map…

Redis:用BitMap实现用户签到

BitMap 我们针对签到功能完全可以通过mysql来完成,比如说以下这张表 用户一次签到,就是一条记录,假如有1000万用户,平均每人每年签到次数为10次,则这张表一年的数据量为 1亿条 每签到一次需要使用(8 8…

某全球领先的芯片供应商:优化数据跨网交换流程,提高安全管控能力

1、客户介绍 某全球领先的芯片供应商,成立于2005年,总部设于北京,在国内上海、深圳、合肥等地及国外多个国家和地区均设有分支机构和办事处,致力于为客户提供更优质、便捷的服务。 2、建设背景 该公司基于网络安全管理的需求&am…

Qt中纯C++项目发布为dll的方法(超详细步骤)

目录 一般创建方法导出普通函数的方法&调用方法导出类及其成员函数的方法&调用方法 众所周知,我们可以将C项目中的类以及函数导出,形成 .dll 文件,以供其他程序使用,下面将说明Qt环境下的使用方法。 首先创建共享库&am…

吐血整理,服务端性能测试中间件-项目集成redis实战,一篇打通...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Linux下Redis安装…

《小狗钱钱》阅读笔记(六)

目录 幼儿园最开始的作用不是让小朋友受教育,而是为了提供一个场所让小朋友免于被剥削 弗里德里希福禄贝尔 早期 其实那些有大作为的人,你看到他们的时候,你看,大多小时候都是受到过很多挫折的,我不是说&#xff0c…