我真的很难搞清楚如何解决这个问题。我得到,我想要采取整数和分数的二进制表示,将它们合并为尾数,并将符号位分配给开始,但我不知道如何在MIPS中实际实现它。MIPS - 如何将一组整数转换为单精度浮点数
任何人都可以帮助我至少开始?
假设您的MIPS硬件没有浮点寄存器和浮点ALU。如果您想要执行浮点数加法,您将不得不使用整数寄存器($ 0 - $ 31)和整数ALU来完成工作的MIPS整数指令。在此作业问题中,您将编写MIPS代码(仅使用整数指令和整数寄存器)来实现 过程,以添加两个浮点数并编写一个调用该过程的主函数。
写MIPS程序toFloat把一个浮点数为IEEE单精度格式。 该过程需要三个整数作为输入:$ a0,$ a1,$ a2,以这种方式表示浮点数 :如果$ a0包含0,则浮点数为正,否则如果$ a0包含1 , 浮点数是负数。存储在寄存器$ a1中的数字是浮点数 的整数部分,存储在寄存器$ a2中的数字是浮点数 的小数部分。例如,要显示浮点数-5.25,三个输入寄存器应包含 这些数字:$ a0 = 1,$ a1 = 5和$ a2 = 25. 对于小数部分,您可以使用指令将25除以100。分数将存储在HI寄存器中,您可以使用mfhi指令来检索分数。 该过程将返回v0,其中包含与由三个输入数字表示的 浮点数对应的IEEE单精度模式。 一旦你有这个程序,你可以用它来将输入数字2.5和7.5转换成它们的IEEE单精度格式的 。
编写一个MIPS程序printFloat打印一个IEEE单精度格式的数字。 该过程的输入是$ a0,这是一个IEEE单精度格式的数字。 程序将简单地打印存储在$ a0中的位模式。您可以使用循环打印每一位。 一旦你有了这个程序,你就可以用它来以浮点格式打印输入数字2.5和7.5。
写一个MIPS程序来实现主函数来调用你的程序。在这个程序中,你将会调用
to浮点(0,2,5)产生浮点格式为2.5;
toFloat(0,7,5)生成7.5的浮点格式;
printFloat to print 2。5
printFloat打印7.5
下面是我到目前为止的代码:
http://s7.postimg.org/v39ufikaj/code.png
“刚刚帮我开始”走多远?我可以建议使用“sll $ t0,$ a0,31”将符号位移动到正确位置做“或者$ t1,$ t1,$ t0” - 或者您需要一个更类似于“什么是向左移位并按位或?“ – RobertB
这绝对有帮助。所以很明显,我们将符号位置移动到第一位,但我对如何从这些值确定指数和尾数感到困惑。 – Nimbus
对于代码片段,您可能会有更多的运气发布到https://gist.github.com/ - 从.png图像读取汇编代码有点太痛苦! – RobertB