浮点数的表示和计算.docx
- 文档编号:24642111
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:4
- 大小:17.52KB
浮点数的表示和计算.docx
《浮点数的表示和计算.docx》由会员分享,可在线阅读,更多相关《浮点数的表示和计算.docx(4页珍藏版)》请在冰豆网上搜索。
浮点数的表示和计算
浮点数的表示和计算
《计算机组成原理》实验报告 年级、专业、班级实验题目实验时间实验成绩 姓名浮点数的表示和计算实验地点实验性质A主404□验证性□设计性□综合性教师评价:
□算法/实验过程正确;□源程序/实验内容提交 □程序结构/实验步骤合理;□实验结果正确; □语法、语义正确; □报告规范; 其他:
评价教师签名:
一、实验目的
(1)深入掌握二进制数的表示方法以及不同进制数的转换;
(2)掌握二进制不同编码的表示方法;(3)掌握IEEE754中单精度浮点数的表示和计算。
二、实验项目内容假设没有浮点表示和计算的硬件,用软件方法采用仿真方式实现IEEE754单精度浮点数的表示及运算功能,具体要求如下:
(1)程序需要提供人机交互方式供用户选择相应的功能;
(2)可接受十进制实数形式的输入,在内存中以IEEE754单精度方式表示,支持以二进制和十六进制的方式显示输出;(3)可实现浮点数的加减乘除运算;(4)可以使用80X86或MIPS或ARM汇编指令,但是不能使用浮点指令,只能利用整数运算指令来编写软件完成。
三、实验过程或算法1.本次项目我们采用单精度浮点数格式读入两个浮点数,并读入一个操作符,然后根据操作符类型选择运算类型,加法指令如下:
sum:
subu$sp,$sp,32 sw$ra,20($sp)sw$fp,16($sp)addiu$fp,$sp,28报告创建时间:
sw$a0,0($fp) #calculatethefirstnumberandi$s2,$s0,0x80000000 #s2isthesign srl$s2,$s2,31andi$s3,$s0,0x7f800000#s3istheexponent srl$s3,$s3,23andi$s4,$s0,0x007fffff#s4isthefraction addi$s4,$s4,0x00800000 #calculatethesecondnumberandi$s5,$s1,0x80000000 #s5isthesign srl$s5,$s5,31andi$s6,$s1,0x7f800000#s6istheexponent srl$s6,$s6,23andi$s7,$s1,0x007fffff#s7isthefraction addi$s7,$s7,0x00800000sub$t0,$s3,$s6blt$t0,0,sumL1 #addsubbgt$t0,0,sumL2#subaddbeq$t0,0,sumL3 2.减法指令如下:
mysub:
subu$sp,$sp,32 sw$ra,20($sp)sw$fp,16($sp)addiu$fp,$sp,28sw$a0,0($fp) #calculatethefirstnumberandi$s2,$s0,0x80000000 #s2isthesign srl$s2,$s2,31andi$s3,$s0,0x7f800000#s3istheexponent srl$s3,$s3,23andi$s4,$s0,0x007fffff#s4isthefraction addi$s4,$s4,0x00800000 #calculatethesecondnumberxori$s5,$s1,0x80000000 #s5isthesign srl$s5,$s5,31andi$s6,$s1,0x7f800000#s6istheexponent srl$s6,$s6,23andi$s7,$s1,0x007fffff#s7isthefraction addi$s7,$s7,0x00800000sub$t0,$s3,$s6blt$t0,0,subL1 #+,-bgt$t0,0,subL2#-,+beq$t0,0,subL3#+,+or-,-3.乘法指令如下:
mutilStart:
srl$t2,$s0,31 srl$t3,$s1,31 sll$t4,$s0,1 srl$t4,$t4,24 #expsll$t5,$s1,1srl$t5,$t5,24 #exp #0...1fracsll$t6,$s0,9srl$t6,$t6,9ori$t6,$t6,0x00800000sll$t6,$t6,8 addi$t4,$t4,1 #0...1fracsll$t7,$s1,9srl$t7,$t7,9ori$t7,$t7,0x00800000sll$t7,$t7,8addi$t5,$t5,1sub$t4,$t4,127add$t4,$t4,$t5 #finalexpsub$t5,$t5,$t5mutilCompareSign:
add$t2,$t2,$t3sll$t2,$t2,31 #finalsignmultu$t6,$t7mfhi$t5#regularandi$t8,$t5,0x80000000beq$t8,0x80000000,mutilnextsll$t5,$t5,1sub$t4,$t4,1mutilnext:
sll$t5,$t5,1 #IEEE754sub$t4,$t4,1srl$t5,$t5,9 #finalfractionmutilFinal:
sll$t4,$t4,24srl$t4,$t4,1addu$t2,$t2,$t4addu$t2,$t2,$t5 #resultadd$s2,$t2,$zero#saveresultli$v0,4la$a0,msg3syscall li$v0,2mtc1$t2,$f12 syscallla $a0,msg0 #newlineli $v0,4syscall lw$ra,20($sp)lw$fp,16($sp)addiu$sp,$sp,32jr$ra 4.除法指令如下:
divideStart:
srl$t2,$s0,31 srl$t3,$s1,31 sll$t4,$s0,1srl$t4,$t4,24 #expsll$t5,$s1,1srl$t5,$t5,24 #expsll$t6,$s0,9srl$t6,$t6,9ori$t6,$t6,0x00800000sll$t7,$s1,9srl$t7,$t7,9ori$t7,$t7,0x00800000sub$t4,$t4,$t5 #finalexpaddi$t4,$t4,127sub$t5,$t5,$t5divideCompareSign:
add$t2,$t2,$t3 sll$t2,$t2,31 #finalsignsub$t8,$t8,$t8#usetorecorddivid sub$t3,$t3,$t3#usetorecordremaindersub$t5,$t5,$t5#useascounterdividecompare:
bge$t5,24,dividebreakout#comparethetwonumberblt$t6,$t7,dividelowerdividegreater:
sub$t6,$t6,$t7 #divideislowersll$t6,$t6,1sll$t8,$t8,1addi$t8,$t8,1addi$t5,$t5,1jdividecomparedividelower:
sll$t6,$t6,1sll$t8,$t8,1addi$t5,$t5,1jdividecomparedividebreakout:
blt$t8,0x00800000,dividedoSllbge$t8,0x01000000,dividedoSrl jdivideresultdividedoSll:
sll$t8,$t8,1subi$t4,$t4,1blt$t8,0x00800000,dividedoSlljdivideresultdividedoSrl:
srl$t8,$t8,1addi$t4,$t4,1bge$t8,0x01000000,dividedoSrljdivideresultdivideresult:
bgt$t4,255,divideoverFlowsll$t8,$t8,9srl$t8,$t8,9sll$t4,$t4,24srl$t4,$t4,1add$t2,$t2,$t4add$t2,$t2,$t8add$s2,$t2,$zero#saveresultli$v0,4la$a0,msg3 #outputmessagesyscall li$v0,2mtc1$t2,$f12 syscalljdiviedend 5.十进制转换为二进制指令如下:
dex2:
subu$sp,$sp,32 sw$ra,20($sp)sw$fp,16($sp)addiu$fp,$sp,28sw$a0,0($fp)add$a0,$s2,$zeroadd$t9,$zero,$a0 sub$t6,$t6,$t6#set$t6=0sub$t7,$t7,$t7#set$t7=0addi$t5,$zero,32#set$t5=32asacounteraddi$t8,$zero,0x80000000#set$t8=10000000000000000000 000000000000beginLoop:
addi$t5,$t5,-1#counter--and$t7,$t8,$t9srl$t8,$t8,1
srlv$t7,$t7,$t5add$a0,$t7,$zero #outputonebitli$v0,1syscallbeq$t5,$t6,Exist #ifequalsjumpexist jbeginLoop 6.十进制转换为十六进制指令如下:
dex16:
subu$sp,$sp,32 sw$ra,20($sp)sw$fp,16($sp)addiu$fp,$sp,28sw$a0,0($fp)sub$t0,$t0,$t0#useascounter srloop:
bge$t0,8,dex16end #16addi$t0,$t0,1srl$t1,$s2,28sll$s2,$s2,4bgt$t1,9,outcharli$v0,1add$a0,$t1,$zerosyscalljsrloopoutchar:
addi$t1,$t1,55#changetocharli$v0,11add$a0,$t1,$zerosyscalljsrloopdex16end:
la $a0,msg0#newlineli $v0,4syscall lw$ra,20($sp)lw$fp,16($sp)addiu$sp,$sp,32jr$ra 四、实验结果及分析和源程序调试过程1.实验结果:
本次实验我们以十进制实数形式的输入两个浮点数,在内存中以IEEE754单精度方式表示,执行运算操作后,以十进制形式把结果输出,并且可以以二进制和十六进制的方式显示输出,下图是执行加法运算,并输出二进制形式:
下图是执行乘法操作,并输出十六进制形式:
减法运算如下图:
除法运算如下图:
当输入错误,如除数为0时,会显示错误信息并退出,如下图:
2.实验分析:
本次实验我们使用MIPS汇编指令,利用整数运算指令来编写了一个浮点数运算程序,通过在MARS软件上进行调试运行,得到了正确结果,本次实验实现了以下功能:
(1)程序提供了人机交互方式供用户选择相应的功能;
(2)接受十进制实数形式的输入,在内存中以IEEE754单精度方式表示,支持以二进制和十六进制的方式显示输出;(3)实现了浮点数的加减乘除运算;(4)没有使用浮点指令,只利用了整数运算指令来完成软件的编写。
3.成员分工:
加、减、乘、除四个运算指令程序的编写。
:
十进制转二进制,十进制转十六进制代码的编写。
实验报告两人共同完成。
备注:
1、教师在布置需撰写实验报告的实验前,应先将报告书上的“实验题 目”、“实验性质”、“实验目的”、“实验项目内容”等项目填写完成,然后再下发给学生。
2、教师在布置需撰写报告的实验项目时,应告知学生提交实验报告的 最后期限。
3、学生应按照要求正确地撰写实验报告:
1)在实验报告上正确地填写“实验时间”、“实验地点”等栏目。
2)将实验所涉及的源程序文件内容填 写在“实验过程或算法”栏目中。
3)将实验所涉及源程序调试过程或者实 验的分析内容填写在“实验结果及分析和源程序调试过程”栏目中。
4)在实验报告页脚的“报告创建时间:
”处插入完成实验报告时 的日期和时间。
5)学生将每个实验完成后,按实验要求的文件名通过网络提交 到指定的服务器所规定的共享文件夹中。
每个实验一个电子文档,如果实验中有多个电子文档,则用WinRAR压缩成一个压缩包文档提交,压缩包文件名同实验报告文件名。
6)提交的实验报告电子文档命名为:
“年级专业、网络工程专业、信息安全专业、物联网工程)班级学号姓名实验序号.doc。
如学号为20115676、年级为2011级、专业为“计算机科学与技术”专业、班级为“02班”、姓名为“王宇”的学生,完成的第一次实验命名为:
11计科02班20115676王宇1.Doc,以后几次实验的报告名称以此类推。
4、教师在评价学生实验时,应根据其提交的其他实验相关资料对实验报告进行仔细评价。
评价后应完成的项目有:
1)在“成绩”栏中填写实验成绩。
每个项目的实验成绩按照五级 制方式评分,实验总成绩则通 过计算每个项目得分的平均值获得。
2)在“教师评价”栏中用符号标注评价项目结果。
3)在“教师评价”栏中“评价教师签名”填写评价教师 姓名。
将评价后的实验报告转换为PDF格式文件归档。
4)课程实验环节结束后,任课教师将自己教学班的实验报告文件 夹进行清理。
在提交文件夹中,文件总数为实验次数×教学班学生人数。
任课教师一定要认真清理,总数相符,否则学生该实验项目不能得分。
最后将学生提交的实验报告刻光盘连同实验成绩一起放入试卷袋存档。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 浮点 表示 计算