我有MIPS的问题。我可以在堆栈上存储和写入浮点数而没有任何问题。但是,如果我尝试使用double执行相同的操作,则会显示以下消息:
Error in line 12: Runtime exception at 0x0040001c: address not aligned on doubleword boundary 0x7fffeff4
#Line12:#
ldc1 $f12, 0($sp) # Pop from stack
这是我的代码
.data
test: .double 22.75
.text
.globl main
main:
l.d $f4, test # Value to $f4
mfc1 $t0,$f4 # $f4 to $t0
addi $sp, $sp, -8 # Decrease SP
sw $t0, 4($sp) # Store first word
mfc1 $t0,$f5 # $f5 to $t0
sw $t0, 0($sp) # Store second word
ldc1 $f12, 0($sp) # Pop from stack
li $v0, 3 # Call API StdOut
syscall # Print result
li $v0, 10 # Call API
syscall # End of program
我真的不知道该怎么做。我使用错误的函数来恢复double值吗?
正如杰斯特所说:
ldc1 $f12, -4($sp) # Pop from stack
工作,但
l.d $f4, test
mfc1 $t0,$f4
addi $sp, $sp, -16
andi $sp, $sp, 0xFFFFFFF8
sw $t0, 8($sp)
mfc1 $t0,$f5
sw $t0, 0($sp)
ldc1 $f12, 0($sp) # Pop from stack
确实修复了错误,但$ f12中写的值不正确。 22.75转为5.322717027E-315。
我想到了。
mfc1.d $t0,$f4
代替
mfc1 $t0,$f4
解决了这个问题。