【发布时间】:2010-04-06 00:04:26
【问题描述】:
如果我在 MIPS 的“f”寄存器中有一个值,我如何将它从 X.YZDEF 截断为 X.YZ?假设您必须将浮点数转换为两个整数并显示它们...这是如何完成的?
【问题讨论】:
标签: assembly decimal mips truncate
如果我在 MIPS 的“f”寄存器中有一个值,我如何将它从 X.YZDEF 截断为 X.YZ?假设您必须将浮点数转换为两个整数并显示它们...这是如何完成的?
【问题讨论】:
标签: assembly decimal mips truncate
您可能想看看这些链接是否对您有帮助。
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>那么你将只有右边的两位数。我希望小数点左边的数字是 LO,右边的数字应该是 HI。
【讨论】:
最简单的做法是:
mul.d),round.l.d),cvt.d.l),然后div.d)。【讨论】:
为了在 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)
【讨论】: