我真的很难弄清楚如何解决这个问题。我知道我想采用整数和小数的二进制表示,将它们组合为尾数,并将符号位分配给开头,但我不知道如何在 MIPS 中实际实现它。
任何人都可以帮助我至少开始吗?
假设您的 MIPS 硬件没有浮点寄存器和浮点 ALU。如果要执行浮点加法,则必须使用使用整数寄存器 ($0 - $31) 和整数 ALU 的 MIPS 整数指令来完成工作。在这个赋值问题中,您将编写 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,其中包含对应于由三个输入数字表示的浮点数的 IEEE 单精度模式。完成此过程后,您可以使用它将输入数字 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
这是我到目前为止的代码: