Ошибки рекурсии MIPS - PullRequest
       6

Ошибки рекурсии MIPS

0 голосов
/ 10 мая 2018

Может кто-нибудь сказать мне, что не так с моим кодом рекурсии ниже.Предполагается, что это рекурсивная функция от десятичной до двоичной функции.Я просто не вижу, что не так.Я новичок в MIPS, поэтому я не до конца понимаю все, но из своего понимания это то, что я получил.Я жестко запрограммировал число, и я должен получить вывод 101000, но он не будет загружать ничего, кроме сообщения.

  .data
msg1:.asciiz "Output (40) = "
.text
.globl main

    la $a0,msg1             # load string as parameter
    li $v0, 4                   # load operation "print string"
    syscall                     # request "print string" for msg1

    addi $t0, $zero, 40 
    move $a0, $t0
    li $t2, 2
    jal d2b

    add $a0, $v0, $zero         # load the value of $v0 into $a0
    li $v0, 1                   # load operation "print integer"
    syscall                     # request "print integer"


d2b:    li $t1, 0           # t1 = 0
    bgt $a0, $t1, skip      # if a0 > t1 no
    li $v0, 0           # load v0 as 0
    jr $ra              # print this shit out
skip:   subu $sp, $sp, 32       # sp down 32
    sw $ra   20($sp)        # save $ra
    sw $fp,  16($sp)        # save $fp
    addiu $fp,  $sp, 28     # set up $ fp
    sw $a0, 0($fp)          # save n
    divu $a0, $t2           # divide n / 2
    mflo $t3            # quota
    mfhi $t4            # rem
    move $a1, $t4           # rem keep
    move $a2, $t3           # quota keep
    addi $a1, 10            # adding rem + 10
    jal d2b             # call recursive —> d2b(n/2)
    lw $a0, 0($fp)          # restore n
    multu $v0, $a2          # rem+10 *d2b(n/2)
    lw $ra, 20($sp)         # load $ra
    lw $fp, 16($sp)         # load $fp
    addiu $sp, $sp, 32      # pop stack
    jr $ra              # return 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...