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

    Source: geocities.com/wonlin/Assembly

               ( geocities.com/wonlin)