如何正确地将系统时间移动到协处理器1?

时间:2018-01-11 22:43:52

标签: assembly mips mars-simulator

在MARS mips中,我得到当前的时间:

li $v0, 30
syscall

然后我尝试将系统时间64位移到coprocessor1来对数字进行一些计算:

mtc1.d $a0, $f0

问题在于右侧的检查员,它告诉我$ f0中的双重值是我预期的其他值。 如果我使用十六进制并使用Google将其转换为十进制,则结果与MIPS在更改为十进制视图时显示的结果不同。我知道谷歌是正确的,所以我不正确地移动数据? 如何在coprocessor1中正确移动系统时间对其进行算术运算?

1 个答案:

答案 0 :(得分:1)

根据http://www.ece.lsu.edu/ee4720/2016/lfp.s.htmlmtc1.d只移动整数位模式。

您必须使用cvt.d.w $f0, $f0$f0中的位模式从int转换为double

他们举了一个例子:

    addi $t1, $0, 1    # Integer 1
    mtc1 $t1, $f1
    cvt.s.w $f1, $f1      # $f1 = single-precision float 1.0
    add.s $f3, $f1, $f2   # FP add to $f2

如果你有两个32位半部分的64位时间戳,你将不得不将它转换为2部分并添加,或者如果MIPS有一条指令,则在FP寄存器中组合成64位整数为了那个原因。或者是mtc1.d复制64位整数寄存器? (我没有使用MARS,我不确定它是否只模拟经典MIPS,或者它是否模拟了64位MIPS III或者添加了ISA 64位的任何修订版。)