Question: I need to implement a recursive subroutines in assembly. A recursive programming displaying the Fibonacci Sequence. The Fibonacci sequence is defined as: F ( n
I need to implement a recursive subroutines in assembly. A recursive programming displaying the Fibonacci Sequence. The Fibonacci sequence is defined as:
Fn Fn Fn
Where, F and F
Im doing it by editing the triangle function in the below code
ORIG x
LD R STACKPTR
LEA R GLOBALVARS
ADD R R #
STR R R # ; push return address
ADD R R #
STR R R # ; push prev frame ptr
ADD R R # ; set frame ptr
ADD R R #
AND R R #
STR R R # ; push int input
ADD R R #
STR R R # ; push int result
ADD R R #
ADD R R # ; globals offset
PUTS
ADD R R # ; push getnum's rv
JSR GETNUM
LDR R R #
STR R R # ; int input getnum
ADD R R # ; pop getnum's rv
ADD R R #
LDR R R #
STR R R # ; push triangle's arg
ADD R R # ; push triangle's rv
JSR TRIANGLE
LDR R R #
STR R R # ; return value triangleinput
STR R R # ; int result triangleinput
ADD R R # ; pop arg
ADD R R # ; pop rv
ADD R R #
ADD R R #
ADD R R #
PUTS ; first part of response
ADD R R #
LDR R R #
STR R R # ; push display's arg int input
JSR DISPLAY
ADD R R # ; pop arg
ADD R R #
ADD R R #
ADD R R #
ADD R R #
PUTS ; second part of response
ADD R R #
LDR R R #
STR R R # ; push display's arg int result
JSR DISPLAY
ADD R R # ; pop arg
ADD R R # ; pop result
ADD R R # ; pop input
LDR R R #
ADD R R # ; pop prev frame ptr
LDR R R #
ADD R R # ; pop return address
HALT
GLOBALVARS
NEGASCII FILL # ; #
ASCII FILL x ; #
PROMPT STRINGZ "Please enter a number n: ; #
RESULTSTRINGZ
F ; #
RESULTSTRINGZ ; #
STACKPTR FILL x
TRIANGLE
; trianglentrianglen trianglen
ADD R R #
STR R R # ; push return addr
ADD R R #
STR R R # ; push prev frame ptr
ADD R R #
; BASE CASES
; checking n
LDR R R #
BRnp ENDIF
ADD R R #
STR R R #
BRnzp RETURNTRIANGLE
ENDIF
; checking n
LDR R R #
ADD R R #
BRnp ENDIF
ADD R R #
STR R R #
BRnzp RETURNTRIANGLE
ENDIF
; checking n
LDR R R #
ADD R R #
BRnp ENDIF
ADD R R #
STR R R #
BRnzp RETURNTRIANGLE
ENDIF
ADD R R #
LDR R R #
ADD R R #
STR R R # ; push argument n
ADD R R # ; push return value
JSR TRIANGLE
LDR R R # ; return value
ADD R R R
ADD R R R ; trianglen
STR R R # ; put in return value xFF xFFA
ADD R R # ; pop return value
ADD R R # ; pop arg
ADD R R #
LDR R R #
ADD R R #
STR R R # ; push argument n
ADD R R # ; push return value
JSR TRIANGLE
LDR R R # ; return value
ADD R R R
ADD R R R ; return value
; trianglentrianglen
LDR R R #
NOT R R
ADD R R # ; two's
ADD R R R
STR R R # ; xFF xFFA
ADD R R # ; pop return value
ADD R R # ; pop arg
ADD R R #
LDR R R #
ADD R R #
STR R R # ; push arg n
ADD R R # ; return value
JSR TRIANGLE
LDR R R # ; return value
ADD R R # ; popping rv
ADD R R # ; pop arg
LDR R R #
ADD R R R
STR R R # ; complete calc and put return value xFF xFFA
RETURNTRIANGLE
LDR R R #
ADD R R # ; pop prev frame ptr
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
