; Gatlin Johnson ; HW #8 ; 17 April 2009 ; ; fib-8.asm .ORIG x3000 MAIN LD R6, STACKSTART ; load start of stack ; Put initial call to fibonacci here ADD R5, R6, -1 ADD R6, R6, -1 AND R1, R1, 0 ;ADD R1, R1, 5 LD R1, INPUT ADD R6, R6, -1 STR R1, R6, 0 JSR FIB LDR R1, R6, 0 ST R1, OUTPUT ADD R6, R6, 1 ADD R6, R6, 1 FUN_END HALT ;;; FIB function definition FIB ADD R6, R6, -1 ADD R6, R6, -1 STR R7, R6, 0 ADD R6, R6, -1 STR R5, R6, 0 ADD R6, R6, -1 ADD R5, R6, 0 STR R1, R6, -1 STR R2, R6, -2 STR R3, R6, -3 ADD R6, R6, -3 ; actual function starts here LDR R1, R5, 4 ; strategy: if it's greater than 0 or 1, RECURSE ; otherwise, just store 1 in R2 AND R3, R3, 0 ADD R3, R1, -2 BRp RECURSE ; we got here, so just stick a 1 in AND R2, R2, 0 ADD R2, R2, 1 FINISH_FIB STR R2, R5, 3 ADD R6, R6, 3 LDR R3, R6, -3 LDR R2, R6, -2 LDR R1, R6, -1 ADD R6, R6, 1 LDR R5, R6, 0 ADD R6, R6, 1 LDR R7, R6, 0 ADD R6, R6, 1 RET RECURSE AND R3, R3, 0 AND R2, R2, 0 ADD R6, R6, -1 ADD R2, R1, -1 STR R2, R6, 0 JSR FIB LDR R3, R6, 0 ADD R6, R6, 1 ADD R6, R6, 1 AND R2, R2, 0 ADD R6, R6, -1 ADD R2, R1, -2 STR R2, R6, 0 JSR FIB LDR R2, R6, 0 ADD R6, R6, 1 ADD R6, R6, 1 ADD R2, R3, R2 BR FINISH_FIB STACKSTART .FILL xd000 INPUT .FILL x16DA OUTPUT .FILL x0000 .END