i have written the following codes to implement the tower of hanoi
but it doesn't work properly.....
i have spent almost a week to find out the problem,
but i still don't know what's going on...
can any one can help me ???
Really Thanks for your kindly help!!

Below is my code :

.data
msg0: .asciiz "Enter number of disks:"
msg1: .asciiz "Move disk 1 from TOWER "
msg2: .asciiz "Move disk "
msg3: .asciiz " from TOWER "
msg4: .asciiz " to TOWER "
msg5: .asciiz "\n"

    .text
    .globl __start
    __start:    


la $a0,msg0 #Print "Enter number of disks:"
li $v0,4
syscall

li $v0,5        #cin, $v0=input value
syscall

addi $t0,$zero,6    #$t0=6
move $a2,$v0    #$a2=number of disc,initialized by input value
addi $t7,$zero,1    #$t7=from,initialize to 1
addi $a1,$zero,3    #$a1=to,initialize to 3
move $t1,$t0    #$t1=temp,initialize to $t1=6

addi $sp,$sp,-20        #create a stack with 5 boxes
sw $ra,16($sp)      #$ra |retun address|
sw $t7,12($sp)      #$t7 |from         |
sw $a1,8($sp)       #$a1 |to           |
sw $a2,4($sp)       #$a2 |numberof disc|
sw $t1,0($sp)       #$t1 |temp         |<---$sp

jal hanoi                       # call hanoi

#lw $ra,16($sp)     # -----------------(*)

lw $ra,16($sp)      #$ra |retun address|
lw $t7,12($sp)      #$t7 |from         |
lw $a1,8($sp)       #$a1 |to           |
lw $a2,4($sp)       #$a2 |numberof disc|
lw $t1,0($sp)       #$t1 |temp         |<---$sp

addi $sp,$sp,20
#jr $ra


hanoi:


sub $t1,$t0,$t7
sub $t1,$t1,$a1     #temp = 6-from-to



addi $sp,$sp,-20                    #create a stack with 5 boxes

sw $ra,16($sp)      #$ra |retun address|
sw $t7,12($sp)      #$t7 |from         |
sw $a1,8($sp)       #$a1 |to           |
sw $a2,4($sp)       #$a2 |numberof disc|
sw $t1,0($sp)       #$t1 |temp         |<---$sp

bne $a2,1,recurse # if (n =/= 1) recurse

li $v0,4
la $a0,msg1
syscall
li $v0,1
move $a0,$t7
syscall
li $v0,4
la $a0,msg4
syscall
li $v0,1
move $a0,$a1
syscall
li $v0,4
la $a0,msg5
syscall

endcase: # exit code

addi $sp,$sp,20     #delete a stack with 5 boxes

lw $ra,16($sp)      #$ra |retun address|
lw $t7,12($sp)      #$t7  |from             |
lw $a1,8($sp)       #$a1 |to                 |
lw $a2,4($sp)       #$a2 |numberof disc|
lw $t1,0($sp)       #$t1  |temp             |<---$sp

jr $ra # return

recurse:

addi $a2,$a2,-1

move $a1,$t1

jal hanoi # call hanoi

li $v0,4    #--------------------(**)
la $a0,msg2
syscall
li $v0,1
move $a0,$a2
syscall
li $v0,4
la $a0,msg3
syscall
li $v0,1
move $a0,$t7
syscall
li $v0,4
la $a0,msg4
syscall
li $v0,1
move $a0,$a1
syscall
li $v0,4
la $a0,msg5
syscall

lw $ra,16($sp)      #$ra |retun address|
lw $t7,12($sp)      #$t7 |from         |
lw $a1,8($sp)       #$a1 |to           |
lw $a2,4($sp)       #$a2 |numberof disc|
lw $t1,0($sp)       #$t1 |temp         |<---$sp
addi $sp,$sp,20     #delete a stack with 5 boxes

addi $a2,$a2,-1

move $t7,$t1


jal hanoi # call hanoi

j endcase # goto exit code (return)---------------------(***)

---------------------------------End of Mips Code ------------------------


--------------------------Corresponding C++ Codes--------------------

void hanoi(int from, int to, int num)
{
    int temp = 6 - from - to; //find the temporary
                              //storage column  
    if (num == 1){
        cout << "move disc 1 from " << from 
             << " to " << to << endl;
    }
    else {
        hanoi(from, temp, num - 1);
        cout << "move disc " << num << " from " << from
             << " to " << to << endl;
        hanoi(temp, to, num - 1);
    }
}

int main() {
    int num_disc;  //number of discs

    cout << "Enter number of disc";
    cin >> num_disc;

    hanoi(1, 3, num_disc);
    return 0;   
}
-------------------------------------------------------------------------------

Expected Ouptut :

Enter number of disks: 3
Move disk 1 from TOWER 1 to TOWER 3
Move disk 2 from TOWER 1 to TOWER 2
Move disk 1 from TOWER 3 to TOWER 2
Move disk 3 from TOWER 1 to TOWER 3
Move disk 1 from TOWER 2 to TOWER 1
Move disk 2 from TOWER 2 to TOWER 3
Move disk 1 from TOWER 1 to TOWER 3

I have a question for you. Did you try to debug your code with SPIM simulator? If answer is no then try it.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.