org $1000
n: equ 8
stpeg: equ 10
endpeg: equ 12
intpeg: equ 14
parmsize: equ 8
CR: equ 13
start: lea prompt,a0
move.w #35,d0
jsr strout
jsr decin
jsr newline
move.w #'m',-(sp)
move.w #'r',-(sp)
move.w #'l',-(sp)
move.w d0,-(sp)
jsr hanoi
jsr stop
hanoi: link a6,#0
movem.l d0-d1/a0,-(sp)
move.w (n,a6),d1
cmpi.w #1,d1
bne.s recur
move.b (stpeg,a6),src
move.b (endpeg,a6),dest
lea movemsg,a0
move.w #14,d0
jsr strout
jsr newline
bra endhanoi
recur: subq #1,d1
move.w (endpeg,a6),-(sp)
move.w (intpeg,a6),-(sp)
move.w (stpeg,a6),-(sp)
move.w d1,-(sp)
bsr hanoi
move.b (stpeg,a6),src
move.b (endpeg,a6),dest
lea movemsg,a0
move.w #14,d0
jsr strout
jsr newline
move.w (stpeg,a6),-(sp)
move.w (endpeg,a6),-(sp)
move.w (intpeg,a6),-(sp)
move.w d1,-(sp)
jsr hanoi
endhanoi: movem.l (sp)+,d0-d1/a0
unlk a6
move.l (sp),(parmsize,sp)
adda.w #parmsize,sp
rts
stop: jsr newline
stop #$2700
newline: movem.l d0-d1,-(sp)
clr.l d1
move #0,d0
trap #15
movem.l (sp)+,d0-d1
rts
charout: movem.l d0-d1,-(sp)
move.l d0,d1
move #6,d0
trap #15
movem.l (sp)+,d0-d1
rts
charin: move.l d1,-(sp)
move #5,d0
trap #15
move.l d1,d0
move.l (sp)+,d1
rts
decout: movem.l d0-d1,-(sp)
move.l d0,d1
move #3,d0
trap #15
movem.l (sp)+,d0-d1
rts
decin: move.l d1,-(sp)
move #4,d0
trap #15
move.l d1,d0
move.l (sp)+,d1
rts
strout: movem.l d0-d1/a0-a1,-(sp)
move.l d0,d1
movea.l a0,a1
move.b #1,d0
trap #15
movem.l (sp)+,d0-d1/a0-a1
rts
strin: movem.l d1/a0-a1,-(sp)
move.l d0,d1
move.l a0,a1
move.b #2,d0
trap #15
move.b #$13,(0,a1,d1.w)
addq.l #1,d1
move.l d1,d0
movem.l (sp)+,d1/a0-a1
rts
stroutendl: movem.l d0-d1/a0-a1,-(sp)
move.l d0,d1
movea.l a0,a1
move.b #0,d0
trap #15
movem.l (sp)+,d0-d1/a0-a1
rts
prompt: dc.b 'enter the number of disks desired: '
movemsg: dc.b 'move '
src: ds.b 1
dc.b ' to '
dest: ds.b 1
dc.b CR
end $1000
               (
geocities.com/wonlin)