最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

浮点数的表示和计算

来源:动视网 责编:小OO 时间:2025-10-01 17:49:18
文档

浮点数的表示和计算

《计算机组成原理》实验报告年级、专业、班级姓名实验题目浮点数的表示和计算实验时间实验地点A主404实验成绩实验性质□验证性□设计性□综合性教师评价:□算法/实验过程正确;□源程序/实验内容提交□程序结构/实验步骤合理;□实验结果正确;□语法、语义正确;□报告规范;其他:评价教师签名:一、实验目的(1)深入掌握二进制数的表示方法以及不同进制数的转换;(2)掌握二进制不同编码的表示方法;(3)掌握IEEE754中单精度浮点数的表示和计算。二、实验项目内容假设没有浮点表示和计算的硬件,用软件方法采用
推荐度:
导读《计算机组成原理》实验报告年级、专业、班级姓名实验题目浮点数的表示和计算实验时间实验地点A主404实验成绩实验性质□验证性□设计性□综合性教师评价:□算法/实验过程正确;□源程序/实验内容提交□程序结构/实验步骤合理;□实验结果正确;□语法、语义正确;□报告规范;其他:评价教师签名:一、实验目的(1)深入掌握二进制数的表示方法以及不同进制数的转换;(2)掌握二进制不同编码的表示方法;(3)掌握IEEE754中单精度浮点数的表示和计算。二、实验项目内容假设没有浮点表示和计算的硬件,用软件方法采用
《计算机组成原理》实验报告

年级、专业、班级姓名
实验题目浮点数的表示和计算
实验时间实验地点A主404
实验成绩 实验性质□验证性  □设计性  □综合性

教师评价:

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

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

其他:

                                          评价教师签名:

一、实验目的

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

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

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

二、实验项目内容

  假设没有浮点表示和计算的硬件,用软件方法采用仿真方式实现IEEE 754单精度浮点数的表示及运算功能,具体要求如下:

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

  (2) 可接受十进制实数形式的输入,在内存中以IEEE 754单精度方式表示,支持以二进制和十六进制的方式显示输出;

  (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)                  #calculate the first number

        andi     $s2,    $s0,    0x80000000      # s2 is the sign 

        srl    $s2,    $s2,    31

        andi     $s3,    $s0,    0x7f800000    # s3 is the exponent 

        srl    $s3,    $s3,    23

        andi     $s4,    $s0,    0x007fffff    # s4 is the fraction 

        addi    $s4,    $s4,    0x00800000      #calculate the second number

        andi     $s5,    $s1,    0x80000000      # s5 is the sign 

        srl    $s5,    $s5,    31

        andi     $s6,    $s1,    0x7f800000    # s6 is the exponent 

        srl    $s6,    $s6,    23

        andi     $s7,    $s1,    0x007fffff    # s7 is the fraction 

        addi    $s7,    $s7,    0x00800000

        sub    $t0,    $s3,    $s6

        blt    $t0,    0,    sumL1            # add  sub

        bgt    $t0,    0,    sumL2        # sub  add

        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)                  #calculate the first number

        andi     $s2,    $s0,    0x80000000      # s2 is the sign 

        srl    $s2,    $s2,    31

        andi     $s3,    $s0,    0x7f800000    # s3 is the exponent 

        srl    $s3,    $s3,    23

        andi     $s4,    $s0,    0x007fffff    # s4 is the fraction 

        addi    $s4,    $s4,    0x00800000      #calculate the second number

        xori     $s5,    $s1,    0x80000000      # s5 is the sign 

        srl    $s5,    $s5,    31

        andi     $s6,    $s1,    0x7f800000    # s6 is the exponent 

        srl    $s6,    $s6,    23

        andi     $s7,    $s1,    0x007fffff    # s7 is the fraction 

        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      # final exp

        sub     $t5,    $t5,    $t5

mutilCompareSign:add     $t2,    $t2,    $t3

        sll     $t2,    $t2,    31     # final sign

        multu     $t6,    $t7

        mfhi     $t5

        #regular

        andi     $t8,    $t5,    0x80000000

        beq     $t8,    0x80000000,    mutilnext

        sll     $t5,    $t5,    1

        sub     $t4,    $t4,    1

mutilnext:    sll     $t5,    $t5,    1             # IEEE754

        sub     $t4,    $t4,    1

        srl     $t5,    $t5,    9          # final fraction

mutilFinal:    sll     $t4,    $t4,    24

        srl     $t4,    $t4,    1

        addu     $t2,    $t2,    $t4

        addu     $t2,    $t2,    $t5          # result

        add    $s2,    $t2,    $zero        # save result

        li     $v0,    4

        la     $a0,    msg3

        syscall 

        li     $v0,    2

        mtc1     $t2,    $f12  

        syscall

        la        $a0,    msg0             # new line

        li        $v0,    4

        syscall    

        lw    $ra,    20($sp)

        lw     $fp,    16($sp)

        addiu     $sp,    $sp,    32

        jr    $ra

  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           # final exp

        addi     $t4,    $t4,    127

        sub     $t5,    $t5,    $t5

divideCompareSign:add     $t2,    $t2,    $t3                 

        sll     $t2,    $t2,    31        # final sign

        sub     $t8,    $t8,    $t8      # use to record divid 

        sub     $t3,    $t3,    $t3      # use to record remainder

        sub     $t5,    $t5,    $t5      # use as counter

dividecompare:    bge     $t5,    24,    dividebreakout   #compare the two number

        blt     $t6,    $t7,    dividelower

dividegreater:    sub     $t6,    $t6,    $t7         #divide is lower

        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

        j     divideresult

dividedoSll:    sll     $t8,    $t8,    1

        subi     $t4,    $t4,    1

        blt     $t8,    0x00800000,    dividedoSll

        j     divideresult

    

dividedoSrl:    srl     $t8,    $t8,    1

        addi     $t4,    $t4,    1

        bge     $t8,    0x01000000,    dividedoSrl

        j     divideresult

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        # save result

        li     $v0,    4

        la     $a0,    msg3                    #output message

        syscall 

        li     $v0,    2

        mtc1     $t2,    $f12  

        syscall

        j    diviedend

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

dex2:    subu    $sp,    $sp,    32 

        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=32  as a counter

        addi     $t8,    $zero,    0x80000000      # set $t8=1000 0000 0000 0000 0000

                                                  0000 0000 0000

beginLoop:    addi     $t5,    $t5,    -1        # counter --

        and      $t7,    $t8,    $t9

        srl     $t8,    $t8,    1

        srlv     $t7,    $t7,    $t5

        add     $a0,    $t7,    $zero          #output one bit

        li     $v0,    1

        syscall

        beq     $t5,    $t6,    Exist         #if equals jump exist 

        j     beginLoop

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

dex16:    subu    $sp,    $sp,    32 

        sw     $ra,    20($sp)

        sw    $fp,    16($sp)

        addiu     $fp,    $sp,    28

        sw     $a0,    0($fp)

        sub     $t0,    $t0,    $t0        # use as counter

        

srloop:    bge     $t0,    8,    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

        j    srloop

outchar:    addi     $t1,    $t1,    55    # change to char

        li     $v0,    11

        add    $a0,    $t1,    $zero

        syscall

        j    srloop

dex16end:la        $a0,    msg0        # new line

        li        $v0,    4

        syscall    

        lw    $ra,    20($sp)

        lw     $fp,    16($sp)

        addiu     $sp,    $sp,    32

        jr    $ra

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

  1. 实验结果:

本次实验我们以十进制实数形式的输入两个浮点数,在内存中以IEEE 754单精度方式表示,执行运算操作后,以十进制形式把结果输出,并且可以以二进制和十六进制的方式显示输出,下图是执行加法运算,并输出二进制形式:

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

减法运算如下图:

除法运算如下图:

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

  2. 实验分析:

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

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

(2) 接受十进制实数形式的输入,在内存中以IEEE 754单精度方式表示,支持以二进制和十六进制的方式显示输出;

(3) 实现了浮点数的加减乘除运算;

(4) 没有使用浮点指令,只利用了整数运算指令来完成软件的编写。

  3. 成员分工

:加、减、乘、除四个运算指令程序的编写。

:十进制转二进制,十进制转十六进制代码的编写。

实验报告由两人共同完成。

备注:

1、教师在布置需撰写实验报告的实验前,应先将报告书上的“实验题目”、“实验性质”、“实验目的”、“实验项目内容”等项目填写完成,然后再下发给学生。

2、教师在布置需撰写报告的实验项目时,应告知学生提交实验报告的最后期限。

3、学生应按照要求正确地撰写实验报告:

1)在实验报告上正确地填写“实验时间”、“实验地点”等栏目。

2)将实验所涉及的源程序文件内容(实验操作步骤或者算法)填写在“实验过程或算法(源程序)”栏目中。

3)将实验所涉及源程序调试过程(输入数据和输出结果)或者实验的分析内容填写在“实验结果及分析和(或)源程序调试过程”栏目中。

4)在实验报告页脚的“报告创建时间:”处插入完成实验报告时的日期和时间。

5)学生将每个实验完成后,按实验要求的文件名通过网络提交(上载)到指定的服务器所规定的共享文件夹中。每个实验一个电子文档,如果实验中有多个电子文档(如源程序或图形等),则用WinRAR压缩成一个压缩包文档提交,压缩包文件名同实验报告文件名(见下条)。

6)提交的实验报告电子文档命名为:“年级(两位数字不要“级”字)专业(缩写:计算机科学与技术专业(计科)、网络工程专业(网络)、信息安全专业(信息)、物联网工程(物联网))班级(两位数字)学号(八位数字)姓名实验序号(一位数字).doc。如学号为********、年级为2011级、专业为“计算机科学与技术”专业、班级为“02班”、姓名为“王宇”的学生,完成的第一次实验命名为: 11计科02班********王宇1.Doc,以后几次实验的报告名称以此类推。

4、教师(或助教)在评价学生实验时,应根据其提交的其他实验相关资料(例如源程序文件等)对实验报告进行仔细评价。评价后应完成的项目有:

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

2)在“教师评价”栏中用符号标注评价项目结果(用√表示正确,用×表示错误,用≈表示    半对半错)。

3)在“教师评价”栏中“评价教师签名”填写评价教师(或助教)姓名。将评价后的实验报告转换为PDF格式文件归档。

4)课程实验环节结束后,任课教师将自己教学班的实验报告文件夹进行清理。在提交文件夹中,文件总数为实验次数×教学班学生人数(如,教学班人数为90人,实验项目为5,其文件数为:90×5=450)。任课教师一定要认真清理,总数相符,否则学生该实验项目不能得分。最后将学生提交的实验报告刻光盘连同实验成绩一起放入试卷袋存档。

文档

浮点数的表示和计算

《计算机组成原理》实验报告年级、专业、班级姓名实验题目浮点数的表示和计算实验时间实验地点A主404实验成绩实验性质□验证性□设计性□综合性教师评价:□算法/实验过程正确;□源程序/实验内容提交□程序结构/实验步骤合理;□实验结果正确;□语法、语义正确;□报告规范;其他:评价教师签名:一、实验目的(1)深入掌握二进制数的表示方法以及不同进制数的转换;(2)掌握二进制不同编码的表示方法;(3)掌握IEEE754中单精度浮点数的表示和计算。二、实验项目内容假设没有浮点表示和计算的硬件,用软件方法采用
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top