首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MIPS -从堆栈读取双精度

MIPS -从堆栈读取双精度
EN

Stack Overflow用户
提问于 2019-03-22 03:01:45
回答 1查看 431关注 0票数 0

我对MIPS有问题。我可以在堆栈上存储和写入浮点数,没有任何问题。但是,如果我尝试对double执行相同的操作,则会出现以下消息:

代码语言:javascript
运行
复制
Error in line 12: Runtime exception at 0x0040001c: address not aligned on doubleword boundary 0x7fffeff4
#Line12:# 
ldc1 $f12, 0($sp)       #   Pop from stack  

这是我的代码

代码语言:javascript
运行
复制
.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

我真的不知道该怎么办。我是否使用了错误的函数来恢复双精度值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-22 03:13:35

正如Jester提到的:

代码语言:javascript
运行
复制
ldc1 $f12, -4($sp)       #   Pop from stack

有效,但是

代码语言:javascript
运行
复制
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。

我想通了。

代码语言:javascript
运行
复制
mfc1.d  $t0,$f4

而不是

代码语言:javascript
运行
复制
mfc1 $t0,$f4

解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55287546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档