Mercurial > hg > Applications > Tokio
diff Examples/6502/a.s65 @ 0:cfb7c6b24319
Initial revision
author | kono |
---|---|
date | Thu, 30 Aug 2007 14:57:44 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Examples/6502/a.s65 Thu Aug 30 14:57:44 2007 +0900 @@ -0,0 +1,46 @@ +;; +;; ackerman function + +;; procedure name ACK +;; ACK(X,Y) +;; == if X=0 then Y+1 +;; else if Y=0 then ACK(X-1,1) +;; else ACK(X-1, ACK(X,Y-1)) + +;; calling sequence +;; +;; X on x +;; Y on y +;; non compile 11.86 sec on Sun 140 +;; compile 7.54 sec on Sun 140 + +start cld + ldx #1 + ldy #1 + jsr ack + brk + +ack cpx #0 + bne xneqzero +xeqzero iny + tya + rts + +xneqzero cpy #0 + bne yneqzero + dex ;; x <- x-1 +yeqzero ldy #1 + jmp ack ;; tail recursion + +yneqzero txa + pha + dey ;; y <- y-1 + jsr ack ;; ack x,y-1 + tay + pla + tax + dex ;; x <- x-1 + jmp ack ;; tail recursion + + end +;;