MIPS - чтение дважды из стека - PullRequest
0 голосов
/ 21 марта 2019

У меня проблемы с 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

Я действительно не знаю, что делать. Я использую неправильную функцию для восстановления двойного значения?

1 Ответ

1 голос
/ 21 марта 2019

Как упоминал Шут:

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

решил проблему.

...