assembly - MIPS - 从堆栈中读取双精度
问题描述
我有 MIPS 的问题。我可以毫无问题地在堆栈上存储和写入浮点数。但是如果我尝试用双精度做同样的事情,会出现以下消息:
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
我真的不知道该怎么办。我是否使用错误的函数来恢复双精度值?
解决方案
正如小丑所说:
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
解决了这个问题。
推荐阅读
- shopify - Shopify 页面模板产品循环
- javascript - 仅在 jQuery 中覆盖特定元素的委托事件处理程序
- swiftui - (SwiftUI 变更检测)这段代码有什么问题?
- jupyter-lab - jupyter 实验室重新打开以前关闭/关闭的笔记本
- python - 使用python查找我的应用程序的时间使用情况
- apache - 更新 SSL 证书后出现错误。阿帕奇网络服务器
- chart.js - Chartjs添加数据时出乎意料的视觉动画效果
- python - 修改 django-invitations 包以允许团队功能
- winapi - windows桌面新文件夹c++
- javascript - 如何正确使用返回承诺的类方法?