![]() |
| ||
| Question on my code in tower of hanoi 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 |
| ||
| Re: Question on my code in tower of hanoi I have a question for you. Did you try to debug your code with SPIM simulator? If answer is no then try it. |
| All times are GMT -4. The time now is 6:10 pm. |
Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC