# Hinweis zur Benutzung dieses Rahmenprogrammes:
# Bei Programmstart wird vom Benutzer die Anzahl der
# Scheiben erfragt, die auf dem Anfangsturm liegen sollen.
# Hier ist eine Zahl im Intervall [1,15] einzugeben.
# Diese Zahl wird dann in der Variablen n abgelegt und
# muß bei der Realisierung des Hanoi-Algorithmus beachtet
# werden.
#
# Anstatt einer Liste (wie bei der funktionalen Lösung auf
# dem Aufgabenzettel) soll hier die Lösung auf dem Bildschirm
# ausgegeben werden. Dazu soll die Funktion "move" benutzt
# werden, die folgendermaßen verwendet wird: 
# Das Programmsegment
#  li %r3,1
#  li %r4,2
#  bl move
# führt zu der Ausgabe "1 -> 2" auf dem Bildschirm. Dies soll
# als ein Zug von Turm 1 nach Turm 2 interpretiert werden.
# (Da es einfacher ist, mit Zahlen zu hantieren als mit
# Zeichenketten, sollen die drei Türme in der Ausgabe die
# Nummern 1,2 und 3 anstatt der Namen A,B und C erhalten.
# Der Turm soll also von Turm 1 nach Turm 2 umgeschichtet
# werden, wobei Turm 3 als Hilfsturm verwendet wird.)
# Allgemein: Bei einem Zug steht die Nummer des Ausgangsturmes
# in Register r3, die Nummer des Zielturmes in Register r4.
# Der Aufruf "bl move" führt dann zu der gewünschten Ausgabe.

	.file	"hanoi.c"
gcc2_compiled.:
	.section	".rodata"
	.align 2
.LC0:
	.string	"%d -> %d\n"
	.section ".text"
	.align 2
	.globl move
	.type	 move,@function
move:
	stwu %r1,-32(%r1)
	mflr %r0
	stw %r31,28(%r1)
	stw %r0,36(%r1)
	mr %r31,%r1
	stw %r3,8(%r31)
	stw %r4,12(%r31)
	addis %r9,0,.LC0@ha
	addi %r3,%r9,.LC0@l
	lwz %r4,8(%r31)
	lwz %r5,12(%r31)
	crxor 6,6,6
	bl printf
.L1:
	lwz %r11,0(%r1)
	lwz %r0,4(%r11)
	mtlr %r0
	lwz %r31,-4(%r11)
	mr %r1,%r11
	blr
.Lfe1:
	.size	 move,.Lfe1-move
	.section	".rodata"
	.align 2
.LC1:
	.string	"Anzahl Scheiben: "
	.align 2
.LC2:
	.string	"%d"
	.section ".text"
	.align 2
	.globl main
	.type	 main,@function
main:
	stwu %r1,-16(%r1)
	mflr %r0
	stw %r31,12(%r1)
	stw %r0,20(%r1)
	mr %r31,%r1
	addis %r9,0,n@ha
	addi %r11,%r9,n@l
	li %r0,0
	stw %r0,0(%r11)
.L3:
	addis %r9,0,n@ha
	addi %r11,%r9,n@l
	lwz %r0,0(%r11)
	cmpwi %cr1,%r0,0
	bc 4,5,.L5
	addis %r9,0,n@ha
	addi %r11,%r9,n@l
	lwz %r0,0(%r11)
	cmpwi %cr1,%r0,15
	bc 12,5,.L5
	b .L4
.L5:
	addis %r9,0,.LC1@ha
	addi %r3,%r9,.LC1@l
	crxor 6,6,6
	bl printf
	addis %r9,0,.LC2@ha
	addi %r3,%r9,.LC2@l
	addis %r9,0,n@ha
	addi %r4,%r9,n@l
	crxor 6,6,6
	bl scanf
	b .L3
.L4:
.START:	
.END:	
.L2:
	lwz %r11,0(%r1)
	lwz %r0,4(%r11)
	mtlr %r0
	lwz %r31,-4(%r11)
	mr %r1,%r11
	blr
.Lfe2:
	.size	 main,.Lfe2-main
	.comm	n,4,4
	.ident	"GCC: (GNU) 2.8.1"
