浮点数的表示和计算.docx

上传人:b****8 文档编号:9674890 上传时间:2023-05-20 格式:DOCX 页数:14 大小:21.53KB
下载 相关 举报
浮点数的表示和计算.docx_第1页
第1页 / 共14页
浮点数的表示和计算.docx_第2页
第2页 / 共14页
浮点数的表示和计算.docx_第3页
第3页 / 共14页
浮点数的表示和计算.docx_第4页
第4页 / 共14页
浮点数的表示和计算.docx_第5页
第5页 / 共14页
浮点数的表示和计算.docx_第6页
第6页 / 共14页
浮点数的表示和计算.docx_第7页
第7页 / 共14页
浮点数的表示和计算.docx_第8页
第8页 / 共14页
浮点数的表示和计算.docx_第9页
第9页 / 共14页
浮点数的表示和计算.docx_第10页
第10页 / 共14页
浮点数的表示和计算.docx_第11页
第11页 / 共14页
浮点数的表示和计算.docx_第12页
第12页 / 共14页
浮点数的表示和计算.docx_第13页
第13页 / 共14页
浮点数的表示和计算.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

浮点数的表示和计算.docx

《浮点数的表示和计算.docx》由会员分享,可在线阅读,更多相关《浮点数的表示和计算.docx(14页珍藏版)》请在冰点文库上搜索。

浮点数的表示和计算.docx

浮点数的表示和计算

《计算机组成原理》实验报告

年级、专业、班级姓名

实验题目

浮点数的表示和计算

实验时间

实验地点

A主404

实验成绩

实验性质

□验证性□设计性□综合性

教师评价:

□算法/实验过程正确;□源程序/实验内容提交□程序结构/实验步骤合理;

□实验结果正确;□语法、语义正确;□报告规范;

其他:

评价教师签名:

一、实验目的

(1)深入掌握二进制数的表示方法以及不冋进制数的转换;

(2)掌握二进制不冋编码的表示方法;

(3)掌握IEEE754中单精度浮点数的表示和计算。

二、实验项目内容

假设没有浮点表示和计算的硬件,用软件方法采用仿真方式实现IEEE754单精度

浮点数的表示及运算功能,具体要求如下:

(1)程序需要提供人机交互方式(GUI或者字符界面)供用户选择相应的功能;

(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$aO,

O($fp)#calculatethefirstnumber

andi

$s2,$s0,0x80000000

#s2isthesign

srl$s2,

$s2,31

andi

$s3,$s0,0x7f800000

#s3istheexponent

srl$s3,

$s3,23

andi

$s4,$s0,0x007fffff

#s4isthefraction

addi$s4,

$s4,0x00800000#calculatethesecondnumber

andi

$s5,$s1,0x80000000

#s5isthesign

srl$s5,

$s5,31

andi

$s6,$s1,0x7f800000

#s6istheexponent

srl$s6,

$s6,23

andi

$s7,$s1,0x007fffff

#s7isthefraction

addi$s7,

$s7,0x00800000

sub$t0,

$s3,$s6

bit$t0,

0,sumL1#addsub

bgt$t0,

0,sumL2#subadd

beq$t0,

0,sumL3

2.减法指令如下

:

mysub:

subu$sp,$sp,32

sw$ra,

20($sp)

sw$fp,

16($sp)

addiu

$fp,$sp,28

sw$a0,

0($fp)#calculatethefirstnumber

andi

$s2,$s0,0x80000000

#s2isthesign

srl$s2,

$s2,31

andi

$s3,$s0,0x7f800000

#s3istheexponent

srl$s3,

$s3,23

andi

$s4,$s0,0x007fffff

#s4isthefraction

addi$s4,

$s4,0x00800000#calculatethesecondnumber

xori

$s5,$s1,0x80000000

#s5isthesign

srl$s5,

$s5,31

andi

$s6,$s1,0x7f800000

#s6istheexponent

srl$s6,

$s6,23

andi

$s7,$s1,0x007fffff

#s7isthefraction

addi$s7,

$s7,0x00800000

sub$t0,

$s3,$s6

blt$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

#exp

sll

$t5,$s1,1

srl

$t5,$t5,24

#exp#0...1frac

sll$t6,$s0,9

srl

$t6,$t6,9

ori

$t6,$t6,0x00800000

sll

$t6,$t6,8

addi

$t4,$t4,

1#0...1frac

sll

$t7,$s1,9

srl

$t7,$t7,9

ori

$t7,$t7,0x00800000

sll

$t7,$t7,8

addi

$t5,$t5,

1

sub

$t4,$t4,127

add

$t4,$t4,$t5

#finalexp

sub

$t5,$t5,$t5

mutilCompareSign:

add

$t2,$t2,$t3

sll

$t2,$t2,31

#finalsign

multu$t6,$t7

mfhi$t5

#regular

andi$t8,$t5,0x80000000

beq$t8,0x80000000,mutiInext

 

sll

$t5,

$t5,

1

sub

$t4,

$t4,

1

mutilnext:

sll

$t5,

$t5,1

#IEEE754

sub

$t4,

$t4,

1

srl

$t5,

$t5,

9

#finalfraction

mutilFinal:

sll

$t4,

$t4,24

srl$t4,$t4,1

 

addu

$t2,$t2,$t4

addu

$t2,$t2,$t5

#result

add$s2,

$t2,$zero

#saveresult

li$v0,

4

la$a0,

msg3

syscall

li$v0,

2

mtc1

$t2,$f12

syscall

la

$a0,nsg0

#newline

li

$v0,4

syscall

Iw

Iw$addiijr

$ra,fp,u

$ra

20($sp)

16($sp)

$sp,$sp,

32

4.除法指令如下

:

divideStart:

srl

$t2,$s0,

31

srl

$t3.

$s1,31

sll

$t4.

$s0,1

srl

$t4,

$t4,24

#exp

sll

$t5,

$s1,1

srl

$t5,

$t5,24

#exp

sll

$t6,

$s0,9

srl

$t6,

$t6,9

ori

$t6,

$t6,0x00800000

sll

$t7,

$s1,9

srl

$t7,

$t7,9

ori

$t7,

$t7,0x00800000

sub

$t4,

$t4,$t5

#finalexp

addi

$t4,$t4,

127

sub

$t5,

$t5,$t5

divideCompareSign:

add

$t2,$t2,$t3

sll

$t2,

$t2,31

#finalsign

sub

$t8,

$t8,$t8

#usetorecorddivid

sub

$t3,

$t3,$t3

#usetorecordremainder

sub

$t5,

$t5,$t5

#useascounter

dividecompare

bge$t5,

24,dividebreakout#comparethetwonumber

blt

$t6,

$t7,dividelower

dividegreater:

sub$t6,

$t6,$t7#divideislower

sll

$t6,

$t6,1

sll

$t8,

$t8,1

addi

$t8,$t8,

1

addi

$t5,$t5,

1

j

dividecompare

dividelower:

sll

$t6,$t6,

1

sll

$t8,

$t8,1

addi

$t5,$t5,

1

j

dividecompare

dividebreakout:

blt

$t8,

0x00800000,dividedoSll

bge

$t8,

0x01000000,dividedoSrl

jdivideresult

dividedoSII:

sll$t8,$t8,1

subi$t4,$t4,1

blt$t8,0x00800000,dividedoSIIjdivideresult

dividedoSrl:

srl$t8,$t8,1

addi$t4,$t4,1

bge$t8,0x01000000,dividedoSrljdivideresult

divideresult:

bgt

$t4,255

divideoverFlow

sll

$t8,

$t8,

9

srl

$t8,

$t8,

9

sll

$t4,

$t4,

24

srl

$t4,

$t4,

1

add

$t2,

$t2,

$t4

add

$t2,

$t2,

$t8

add

$s2,

$t2,

$zero

#saveresult

li$v

O

4

la$

a0,

msg3

#outputmessage

 

syscall

li$v0,

2

mtc1

$t2,$f12

syscall

jdiviedend

beginLoop:

addi

$t5,

$t5,-1

and

$t7,$t8,

$t9

srl

$t8,

$t8,1

#counter--

sw$ra,

20($sp)

sw$fp,

16($sp)

addiu

$fp,$sp,28

sw$a0,

0($fp)

add$a0,

$s2,$zero

add$t9,

$zero,$a0

sub$t6,

$t6,$t6

#set$t6=0

sub$t7,

$t7,$t7

#set$t7=0

addi

$t5,$zero,

32#set$t5=32asacounter

addi

$t8,$zero,

0x80000000#set$t8=10000000

000000000000

5.十进制转换为二进制指令如下:

dex2:

subu$sp,$sp,32

000000000000

srlvadd$aO,li$v0,syscallbeq$t5,jbegi

$t7,$t7,$t5

$t7,$zero1

$t6,ExistnLoop

#outputonebit

#ifequalsjumpexist

6.十进制转换为十八进制指令如下:

dex16:

subu$sp,$sp,32

sw$ra,

20($sp)

sw$fp,

16($sp)

addiu

$fp,$sp,28

sw$a0,

0($fp)

sub$tO,

$t0,$t0

#useascounter

srloop:

bge$t0,

&dex16end

#16

addi$t0,

$t0,1

srl$t1,

$s2,28

sll$s2,

$s2,4

bgt$t1,

9,outchar

li$v0,

1

add$a0,

$t1,$zero

syscall

jsrloop

outchar:

addi

$t1,$t1,55

#changetochar

li$v0,

11

add$a0,

$t1,$zero

syscall

jsrloop

dex16end:

la$a0,

msg0

#newline

li

$v0,4

syscall

lw$ra,

20($sp)

lw$fp,

16($sp)

addiu

$sp,$sp,32

jr$ra

四、实验结果及分析和(或)源程序调试过程

1.实验结果:

本次实验我们以十进制实数形式的输入两个浮点数,在内存中以IEEE754单精

度方式表示,执行运算操作后,以十进制形式把结果输出,并且可以以二进制和十六进制的方式显示输出,下图是执行加法运算,并输出二进制形式:

aQP:

1,add2.3.miol4.AivCl.quit

1

ItieFLirstFloatmgvalueis'1.25

IheSecondfloatingvalueis:

1.1匮Ih«!

rgASMitis.2.375

Inputb.theTarmattooutjiut:

5_biaary&Hex:

5

DiooooaocooiwoooooooooaocoooGoo

ZnputaOP:

1.add2.sul3.miol4.diw0.quit

F图是执行乘法操作,并输出十六进制形式:

'Inputa心P:

1.add2.snl3.nnol4.AiwCl.quit

T

TkeTIjtstFloatingValu.电jls.2.S

TheSecondFloatingis:

0.5

There&sultis.1.25

^tnputsttheFormattooutjut:

5.binary6Hex:

6

3F/UDOOOO

'InputaCP_L.add2gtfb3.niul4.divC.quit

减法运算如下图:

工itputaOP:

1.ad丄

2.sub

3.rwul4.divqui1

2

Ih_EFirstFJ.Da.txik百

va_lue

1stl&

Iks

Vtlut

ii;20

Tk.fireasultG

Iitpui*thtFormattcoutput;吕.binuryB;日

C1200000

IkputtOP'1.add2.sub3mu!

4div0,礬it

除法运算如下图:

Iiupiit旦OP:

1.add2.sub3.mul4-dav0.qnit

A

IhkeFirstFloatingvalue1s112.24

TheSecondfloatingvalueis2

Th色reasultis!

6.12

Inpiitbth.^Earmattg*^tput;5>binary&Ilex;日plOOOOOOlLOOOOl111010111DOOO1010

Input&OP:

1.^.dd2.sub3..mul4・div*®q-uit

当输入错误,如除数为0时,会显示错误信息并退出,如下图:

InputaOP1t_add2.sub3.mil4.div0.kjuit

4

IhefurstFLdallngval口总is:

1

IhtSecondFLoafincvalu#is;0

Error

-一prograimisfinishe!

running:

一一

2.实验分析:

本次实验我们使用MIPS汇编指令,利用整数运算指令来编写了一个浮点数运算程序,通过在MARS4.4软件上进行调试运行,得到了正确结果,本次实验实现了以下功能:

(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)在“成绩”栏中填写实验成绩。

每个项目的实验成绩按照五级制(优、良、中、及格、不及格)方式评分,实验总成绩则通过计算每个项目得分的平均值获得(平均值计算时需将五级制转换为百分制优=95、良=85、中=75、及格=65、不及格=55)。

2)在“教师评价”栏中用符号标注评价项目结果(用"表示正确,

用X表示错误,用〜表示半对半错)。

3)在“教师评价”栏中“评价教师签名”填写评价教师(或助教)姓名。

将评价后的实验报告转换为PDF格式文件归档。

4)课程实验环节结束后,任课教师将自己教学班的实验报告文件夹进行清理。

在提交文件夹中,文件总数为实验次数X教学班学生人数(如,教学班人数为90人,实验项目为5,其文件数为:

90X5=450)。

任课教师一定要认真清理,总数相符,否则学生该实验项目不能得分。

最后将学生提交的实验报告刻光盘连同实验成绩一起放入试卷袋存档。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2