我对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
我真的不知道该怎么办。我是否使用了错误的函数来恢复双精度值?
发布于 2019-03-22 03:13:35
正如Jester提到的:
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
解决了这个问题。
https://stackoverflow.com/questions/55287546
复制相似问题