2

MIPS の "f" レジスタに値がある場合、これを X.YZDEF から X.YZ に切り詰めるにはどうすればよいですか? おそらく、float から 2 つの int に変換し、それらを表示する必要があります...これはどのように行われますか?

4

3 に答える 3

2

最も簡単なことは次のとおりです。

  1. 値に 100 を掛けます ( mul.d)、
  2. 整数に丸める ( round.l.d),
  3. 浮動小数点 ( cvt.d.l) に変換し、
  4. 100 で割ります ( div.d)。
于 2010-04-06T01:58:14.983 に答える
2

これらのリンクが役立つかどうかを確認してください。

http://en.wikipedia.org/wiki/MIPS_architecture#MIPS_Assembly_Language

http://chortle.ccsu.edu/AssemblyTutorial/index.html#part8

これも役立つかもしれません: http://www.uni-koblenz.de/~avolk/MIPS/Material/MIPSFloatingPointInstructions.pdf

久しぶりにアセンブラをやってみましたが、100< mul.s>を掛けると整数レジスタにコピーし、100< div>で割ると2桁だけになります。権利。小数点の左側の数字は LO で、右側の数字は HI になるはずです。

于 2010-04-06T01:10:32.393 に答える
1

MIPS で切り捨て (丸めではない) を実装するには、次のようにします。

# Note: The number you want to truncate is in $f12

##### Load 100 #####
li $t5,100                              # t5 = 100 (word),       t5 (word)
mtc1 $t5,$f5                            # f5 = t5  (word),       f5 (word)
cvt.s.w $f5,$f5                         # f5 = wordToSingle(f5), f5 (single)

##### Multiply f12(single) by 100 (single) #####    
mul.s $f12,$f12,$f5                     # f12 = f12 (single) * f5 (single), f12 (single)

##### Truncate single to word #####
trunc.w.s $f12,$f12                     # f12 = truncWordToSingle(f12 (single)), f12 (word)

##### Convert from word to single #####
cvt.s.w $f12,$f12                       # f12 = convertWordToSingle(f12 (word)), f12 (single)

##### Divide by 100 #####
div.s $f12,$f12,$f5                     # f12 = f12 (single) / f5 (single), f12 (single)
于 2013-07-07T21:11:47.810 に答える