Towers of Hanoi: Difference between revisions

+ MIPS Assembly (MARS)
(+ MIPS Assembly (MARS))
Line 2,385:
Move plate 2 from tower 2 to tower 3
Move plate 1 from tower 1 to tower 3</pre>
 
=={{header|MIPS Assembly}}==
<!--
Python equivalent:
def hanoi(n, From='A', To='B', Aux='C'):
def output():
print("Move disk %d from rod %s to rod %s" % (n, From, To))
if n==1:
output()
return
hanoi(n-1, From, Aux, To)
output()
hanoi(n-1, Aux, To, From)
hanoi(3)
--><lang mips>
# Towers of Hanoi
# MIPS assembly implementation (tested with MARS)
# Source: https://stackoverflow.com/questions/50382420/hanoi-towers-recursive-solution-using-mips/50383530#50383530
 
.data
prompt: .asciiz "Enter a number: "
part1: .asciiz "\nMove disk "
part2: .asciiz " from rod "
part3: .asciiz " to rod "
 
.text
.globl main
main:
li $v0, 4 # print string
la $a0, prompt
syscall
li $v0, 5 # read integer
syscall
 
# parameters for the routine
add $a0, $v0, $zero # move to $a0
li $a1, 'A'
li $a2, 'B'
li $a3, 'C'
 
jal hanoi # call hanoi routine
 
li $v0, 10 # exit
syscall
 
hanoi:
 
#save in stack
addi $sp, $sp, -20
sw $ra, 0($sp)
sw $s0, 4($sp)
sw $s1, 8($sp)
sw $s2, 12($sp)
sw $s3, 16($sp)
 
add $s0, $a0, $zero
add $s1, $a1, $zero
add $s2, $a2, $zero
add $s3, $a3, $zero
 
addi $t1, $zero, 1
beq $s0, $t1, output
 
recur1:
 
addi $a0, $s0, -1
add $a1, $s1, $zero
add $a2, $s3, $zero
add $a3, $s2, $zero
jal hanoi
 
j output
 
recur2:
 
addi $a0, $s0, -1
add $a1, $s3, $zero
add $a2, $s2, $zero
add $a3, $s1, $zero
jal hanoi
 
exithanoi:
 
lw $ra, 0($sp) # restore registers from stack
lw $s0, 4($sp)
lw $s1, 8($sp)
lw $s2, 12($sp)
lw $s3, 16($sp)
 
addi $sp, $sp, 20 # restore stack pointer
 
jr $ra
 
output:
 
li $v0, 4 # print string
la $a0, part1
syscall
li $v0, 1 # print integer
add $a0, $s0, $zero
syscall
li $v0, 4 # print string
la $a0, part2
syscall
li $v0, 11 # print character
add $a0, $s1, $zero
syscall
li $v0, 4 # print string
la $a0, part3
syscall
li $v0, 11 # print character
add $a0, $s2, $zero
syscall
 
beq $s0, $t1, exithanoi
j recur2
</lang>
 
=={{header|МК-61/52}}==
Anonymous user