Question: can you help me by implementing a recursive subroutines in assembly to run on LC - 3 simulator. A recursive programming of displaying the Fibonacci
can you help me by implementing a recursive subroutines in assembly to run on LC simulator. A recursive programming of displaying the Fibonacci Sequence. The Fibonacci sequence is defined as:
Fn Fn Fn
Where, F and F
I think im close but i have a problem on line
right now i have
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 FIB's arg
ADD R R # ; push FIB's rv
JSR FIB
LDR R R #
STR R R # ; return value FIBinput
STR R R # ; int result FIBinput
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
FIB
;FnFnFn
;F F
; 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 RETURNFIB
ENDIF
; checking n
LDR R R #
ADD R R #
BRnp ENDIF
ADD R R #
STR R R #
BRnzp RETURNFIB
ENDIF
; i dont understand how if i comment these lines out it breaks the program
STR R R #
BRnzp RETURNFIB
ADD R R #
LDR R R #
ADD R R #
STR R R # ; push argument n
ADD R R # ; push return value
JSR FIB
LDR R R # ; return value
STR R R # ; put in return value xFF xFFA
ADD R R # ; pop return value
ADD R R # ; pop arg
JSR FIB
LDR R R #
ADD R R R
STR R R # ; complete calc and put return value xFF xFFA
RETURNFIB
LDR R R #
ADD R R # ; pop prev frame ptr
LDR R R #
ADD R R # ; pop return address
RET
GETNUM
ADD R R #
STR R R # ; push return addr
ADD R R #
STR R R # ; push prev frame ptr
ADD R R #
GETC
OUT
LDR R R #
ADD R R R
STR R R # ; return value
LDR R R #
ADD R R # ; pop prev frame ptr
LDR R R #
ADD R R # ; pop return address
RET
DISPLAY
ADD R R #
STR R R # ; push return addr
ADD R R #
STR R R # ; push prev frame ptr
ADD R R #
AND R R #
ADD R R # ; int tens
STR R R #
LDR R R # ; ASCII offset
AND R R # ; tens counter
ADD R R # ; start at at beginning of iteration
ADD R R # ; R
LDR R R # ; R int n
TENLOOP
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
