944,155 Members | Top Members by Rank

Ad:
  • Assembly Discussion Thread
  • Unsolved
  • Views: 8085
  • Assembly RSS
Mar 24th, 2006
0

Question on my code in tower of hanoi

Expand Post »
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
Similar Threads
Reputation Points: 10
Solved Threads: 0
Newbie Poster
kennethwcn is offline Offline
1 posts
since Mar 2006
Mar 29th, 2006
0

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.
Reputation Points: 251
Solved Threads: 29
Posting Whiz in Training
andor is offline Offline
274 posts
since Jun 2005

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in Assembly Forum Timeline: Give a try....
Next Thread in Assembly Forum Timeline: does anybody know any asm site for g4 (macintosh) assembly ?





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC