MIPS汇编中的无限循环

时间:2015-10-17 19:10:53

标签: assembly recursion

我将在前面加上两件事。一,我绝对没有装配经验。其中两个用于我大学的编程项目。我试图递归地解决河内塔问题,我有一个基本的结构轮廓,我只是想填写我想出来的最新情况。我当前的问题是,当我有一个应该是结束消息的syscall时,我的输出无限循环。问题是,当我包含它时,它会无限循环,但随着它的删除,它只会通过我所拥有和结束,就像我希望它与那里的消息一样。以下是我到目前为止的情况:

#############################################
#  $a0 - Origin Peg                         #
#  $a1 - Intermediate Peg                   #
#  $a2 - Destination Peg                    #
#  $a3 - N discs                            #
#  $ra - for return                         #
#############################################

.data

startMsg: .asciiz "Moving n discs"  #will have to change to account for n
moveMsg:  .asciiz "move a disc: "
arrow:    .asciiz " -> "
endMsg:   .asciiz "End of process"

.text
.globl main

 main:
    li $a3, 4           #Four Discs loaded into register a3

    li $v0, 4
    la $a0, startMsg    #Load address for first output message
    syscall             #Display message

    jal recHanoi

  li $v0, 4
    la $a0, endMsg      #Load address for last output message
    syscall             #Display end message        

    jr $31

recHanoi:
        subu $sp, $sp, 32
        sw $a0, 0($sp)
        sw $a1, 4($sp)
        sw $a2, 8($sp)

        li $v0, 4
        la $a0, arrow   #Load address for first output message
        syscall             #Display message

        #will do recursive calculation stuff here
        #
        #.
        #.
        #.
        #
        j restore

restore:
        lw $a0, 0($sp)
        lw $a1, 4($sp)
        lw $a2, 8($sp)
        addu $sp, $sp, 32

        jr $ra  

当我删除jal之后的三行时,没有无穷大。这不一定是目前不能继续前进,但我想更好地了解究竟是什么导致了这一点,因为目前我并不明白。是否存在某种类型的注册冲突,这是其根源还是什么?

编辑:我应该提一下输出是什么。这是消息“过程结束”一遍又一遍。这就是为什么这对我来说如此陌生,因为我认为它会在某些时候跳入我的recHanoi,但事实并非如此。

Edit2:抱歉,结束信息无法启动

0 个答案:

没有答案