Адрес MIPS вне диапазона 0x00000008, проблемы во время двойной загрузки от $ sp - PullRequest
0 голосов
/ 20 октября 2018

Я должен написать программу, которая будет вычислять факториал двойников в MIPS.Вот моя попытка, но я вышел за пределы допустимой ошибки и не знаю, как с ней справиться

The exercise description

.data

    x: .double 2.1
    theAnswer: .double 0.0
    one: .double 1.0

.text

.globl main


main:


    l.d $f2, one
    l.d $f14, x 
    jal mfact
    li $v0, 3
    s.d $f0, theAnswer
    l.d $f12, theAnswer
    syscall
    li $v0, 10
    syscall

.globl mfact
mfact:

    andi $sp, 0xfffffff8
    addi $sp, $sp, -16

    sw $ra, ($sp)
    s.d $f12, 8($sp)

    #base case
    l.d $f0, one
    c.le.d $f14,$f0
    bc1t exit


    mov.d $f12, $f14
    sub.d $f14, $f14, $f2
    jal mfact
    #multipling the numbers 
    mul.d $f0, $f12, $f0    

    exit:   #poping out
        lw $ra, ($sp)
        l.d $f12, 8($fp) #there is the RUNTIME EXCEPTION : OUT OF RANGE 0x0000008
        addu $sp,$sp,16
        jr $ra
...