2011-11-10 9 views
4

MARSではli.sを使用できません。私はMIPSプログラミングの新人です。私はどんなコプロセッサーも使用しないようにしています。私はなぜli.sはMARSのプログラムですか?誰かが私を新しい方向に導くことができるのはとても有用なことです!MARSにli.sを使用できないのはなぜですか?

答えて

0

データ・セグメントに格納された擬似命令LSと定数を使用して、擬似命令のli.sと同様の効果を得ることができる:

l.s $f1, fpconst 

.data 0x1000 
fpconst: 
.float 1.2345 

これは、浮動小数点定数を格納するためにコプロセッサレジスタ$ f1を使用します。

またlw $f1, fpconst代わりのl.s

+0

しかし、これは意味をわずかに変え、FSB経由でメインメモリから値をロードするコストを導入します。 –

+0

擬似命令li.sは私が書いたことを正確に行います。 [MIPSアセンブリ言語プログラマーズガイド](http://www.cs.unibo.it/~solmi/teaching/.../AssemblyLanguageProgDoc.pdf)を参照してください。ページ9-21 – gusbro

+0

そして私はあなたに同意します。アドレスから、すなわちメモリから値をロードする。あなたが宣言したメモリ内の場所から.dataセグメント。しかし、それは何かを必要とします、もしそれがチャーチミスなら、それは李よりもはるかにコストがかかるかもしれません。 –

2

これはおそらく火星に実装されていない疑似命令です。 li(ori)とmtc1のシーケンスを使用できます。

これは$ FP1に値1.234をロードし、MARSで動作:

li $t1,0x3f9df3b6 
mtc1 $t1,$f1 

16進数または整数値Cにポインタを使用して類似して、Fortranで(http://babbage.cs.qc.edu/IEEE-754/Decimal.htmlを使用するか、簡単なプログラムを用いて見出すことができます)キャスト:

+1

を使用して、通常のレジスタに定数を置くことができます。しかし、MARSが整数レジスタに浮動小数点値を受け入れないだろうと思われます。 –

+0

ありがとう、答えを洗練された。 –

関連する問題