【发布时间】:2013-10-30 05:10:28
【问题描述】:
我真的很难弄清楚如何解决这个问题。我知道我想采用整数和小数的二进制表示,将它们组合为尾数,并将符号位分配到开头,但我不知道如何在 MIPS 中实际实现它。
任何人都可以帮助我至少开始吗?
假设您的 MIPS 硬件没有浮点寄存器和浮点 ALU。如果 你想执行浮点加法,你必须使用 MIPS 整数指令 整数寄存器 ($0 - $31) 和整数 ALU 来完成工作。在这个作业问题中, 您将编写 MIPS 代码,仅使用整数指令和整数寄存器,以实现 过程来添加两个浮点数并编写一个 main 函数来调用该过程。
编写 MIPS 过程 toFloat 以将浮点数转换为 IEEE 单精度格式。 该过程将三个整数作为输入:$a0、$a1、$a2,它们代表一个浮点数 这样:如果 $a0 包含 0,则浮点数为正数,否则如果 $a0 包含 1,则 浮点数为负数。存储在寄存器 $a1 中的数字是 浮点数,存储在寄存器 $a2 中的数字是浮点数的小数部分 数字。 例如,要显示浮点数 -5.25,三个输入寄存器应包含 这些数字:$a0 = 1、$a1 = 5 和 $a2 = 25。对于小数部分,您可以使用 div rs rt 指令将 25 除以 100。分数将存储在 HI 寄存器中,您可以使用 mfhi 指令来检索分数。 该过程将返回 v0,其中包含对应于 由三个输入数字表示的浮点数。 完成此过程后,您可以使用它将输入的数字 2.5 和 7.5 转换为它们的 IEEE 单精度格式。
编写 MIPS 过程 printFloat 以打印 IEEE 单精度格式的数字。 过程的输入是 $a0,它是一个 IEEE 单精度格式的数字。这 过程将简单地打印存储在 $a0 中的位模式。您可以使用循环打印每个位。 完成此过程后,您可以使用它以浮点格式打印输入数字 2.5 和 7.5。
-
编写一个 MIPS 程序来实现 main 函数来调用您的程序。在这个节目中,你 会调用
toFloat(0, 2, 5) 生成 2.5 的浮点格式;
toFloat(0, 7, 5) 生成 7.5 的浮点格式;
printFloat 打印 2.5
printFloat 打印 7.5
这是我目前拥有的代码:
【问题讨论】:
-
“只是帮助我开始”有多远?我可以建议使用“sll $t0, $a0, 31”将符号位移动到正确的位置以执行“或 $t1,$t1,$t0”吗?或者您是否需要回答类似“what's a左移和按位或?"
-
这绝对有帮助。所以很明显,我们通过将符号位移到第一个位置,但我对如何从这些值确定指数和尾数有点困惑。
-
对于代码 sn-p,您可能会更幸运地发布到 gist.github.com - 从 .png 图像中读取汇编代码有点太痛苦了!
标签: floating-point integer mips mars-simulator single-precision