MIPS - 从堆栈中读取两倍

问题描述 投票:0回答:1

我有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值吗?

assembly mips mars-simulator
1个回答
1
投票

正如杰斯特所说:

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

解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.