この問題にアプローチする方法を理解するのに本当に苦労しています。整数と小数の両方のバイナリ表現を取得し、それらを仮数に結合し、符号ビットを先頭に割り当てたいと思いますが、MIPS で実際に実装する方法がわかりません。
少なくとも始めるのを手伝ってくれる人はいますか?
MIPS ハードウェアに浮動小数点レジスタと浮動小数点 ALU がないと仮定します。浮動小数点加算を実行する場合は、整数レジスタ ($0 ~ $31) と整数 ALU を使用する MIPS 整数命令を使用して、ジョブを実行する必要があります。この割り当ての問題では、整数命令と整数レジスタのみを使用して MIPS コードを記述し、2 つの浮動小数点数を加算するプロシージャを実装し、プロシージャを呼び出すメイン関数を記述します。
MIPS プロシージャ toFloat を記述して、浮動小数点数を IEEE 単精度形式に変換します。このプロシージャは、次のように浮動小数点数を表す $a0、$a1、$a2 の 3 つの整数を入力として取ります。浮動小数点数が負です。レジスタ $a1 に格納されている数値は浮動小数点数の整数部分であり、レジスタ $a2 に格納されている数値は浮動小数点数の小数部分です。たとえば、浮動小数点数 -5.25 を表示するには、3 つの入力レジスタに $a0 = 1、$a1 = 5、および $a2 = 25 の数値が含まれている必要があります。小数部分には、div rs rt を使用できます。 25 を 100 で割る命令. 分数は HI レジスタに格納され、mfhi 命令を使用して分数を取得できます。このプロシージャは、3 つの入力数値で表される浮動小数点数に対応する IEEE 単精度パターンを含む v0 を返します。この手順を実行したら、それを使用して入力数値 2.5 および 7.5 を IEEE 単精度形式に変換できます。
MIPS プロシージャprintFloatを記述して、IEEE 単精度形式の数値を出力します。プロシージャの入力は、IEEE 単精度形式の数値である $a0 にあります。このプロシージャは、$a0 に格納されているビット パターンを単純に出力します。ループを使用して各ビットを出力できます。この手順を実行したら、それを使用して入力数値2.5および7.5を浮動小数点形式で出力できます。
プロシージャを呼び出すメイン関数を実装する MIPS プログラムを作成します。このプログラムでは、
toFloat(0, 2, 5) は 2.5 の浮動小数点形式を生成します。
toFloat(0, 7, 5) は 7.5 の浮動小数点形式を生成します。
2.5を印刷するprintFloat
7.5を印刷するprintFloat
これが私がこれまでに持っているコードです: