如何在MIPS中将整数值加载到双寄存器?

时间:2016-05-25 15:48:22

标签: mips

我有这段代码:

void test(int x)
 {
    cout<<x;
    double y=x+4.0;
    cout<<y;
 }
void main ()
 {
   test(7); // call the test in main 
 }

在MIPS中: 在我将参数x的值放在0($ fp)的堆栈中并跳转到test:

之后
lw $a0,0($fp) // load value of x and print it
li $v0,1       
syscall

lw $t1,0($fp)
sw $t1,0($sp)  // put the value of x in stack and point it by $sp

li.d $f0,4.0
s.d $f0,4($sp) // put the value 4.0 in stack and point it by $sp

l.d $f0,0($sp)
l.d $f2,4($sp)
add.d $f4,$f0,$f2

s.d $f4,8($sp) // put the result of add 

l.d $f12,8($sp) // print the value of y 
li $v0,3
syscall

我的问题是QTSPIM中y的结果是4 ....问题因为我在双重寄存器中加载一个整数值...我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:1)

您需要将整数值加载到fp寄存器中,然后将其转换为浮点格式。你有一个8字节的加载(它将加载你的4个字节的值,加上接下来的4个字节,无论它们是什么),所以你可能想要改变它,然后做一个cvt:

l.w $f0,0($fp)
cvt.d.w  $f0,$f0