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-3 simulator. A recursive programming of displaying the Fibonacci Sequence. The Fibonacci sequence is defined as:
F(n)= F(n-1)+ F(n-2)
Where, F(0)=0 and F(1)=1
I think im close but i have a problem on line 116
right now i have
.ORIG x3000
LD R6, STACK_PTR
LEA R4, GLOBAL_VARS
ADD R6, R6, #-1
STR R7, R6, #0 ; push return address
ADD R6, R6, #-1
STR R5, R6, #0 ; push prev frame ptr
ADD R5, R6, #0 ; set frame ptr
ADD R6, R6, #-1
AND R0, R0, #0
STR R0, R6, #0 ; push int input =0
ADD R6, R6, #-1
STR R0, R6, #0 ; push int result =0
ADD R0, R4, #0
ADD R0, R0, #2 ; globals offset
PUTS
ADD R6, R6, #-1 ; push getnum's rv
JSR GETNUM
LDR R0, R6, #0
STR R0, R5, #-1 ; int input = getnum()
ADD R6, R6, #1 ; pop getnum's rv
ADD R6, R6, #-1
LDR R0, R5, #-1
STR R0, R6, #0 ; push FIB's arg
ADD R6, R6, #-1 ; push FIB's rv
JSR FIB
LDR R0, R6, #0
STR R0, R5, #2 ; return value = FIB(input)
STR R0, R5, #-2 ; int result = FIB(input)
ADD R6, R6, #1 ; pop arg
ADD R6, R6, #1 ; pop rv
ADD R0, R4, #0
ADD R0, R0, #15
ADD R0, R0, #13
PUTS ; first part of response
ADD R6, R6, #-1
LDR R0, R5, #-1
STR R0, R6, #0 ; push display's arg (int input)
JSR DISPLAY
ADD R6, R6, #1 ; pop arg
ADD R0, R4, #0
ADD R0, R0, #15
ADD R0, R0, #15
ADD R0, R0, #2
PUTS ; second part of response
ADD R6, R6, #-1
LDR R0, R5, #-2
STR R0, R6, #0 ; push display's arg (int result)
JSR DISPLAY
ADD R6, R6, #1 ; pop arg
ADD R6, R6, #1 ; pop result
ADD R6, R6, #1 ; pop input
LDR R5, R6, #0
ADD R6, R6, #1 ; pop prev frame ptr
LDR R7, R6, #0
ADD R6, R6, #1 ; pop return address
HALT
GLOBAL_VARS
NEG_ASCII .FILL #-48 ; #0
ASCII .FILL x30 ; #1
PROMPT .STRINGZ "Please enter a number n: " ; #2
RESULT_1.STRINGZ "
F(" ; #28
RESULT_2.STRINGZ ")=" ; #32
STACK_PTR .FILL x6000
FIB
;Fn=F(n-1)+F(n-2)
;F(0)=0 F(1)=1
; 3*triangle(n-1)-3*triangle(n-2)+ triangle(n-3)
ADD R6, R6, #-1
STR R7, R6, #0 ; push return addr
ADD R6, R6, #-1
STR R5, R6, #0 ; push prev frame ptr
ADD R5, R6, #0
; BASE CASES
; checking n ==0
LDR R0, R5, #3
BRnp END_IF_0
ADD R0, R0, #0
STR R0, R5, #2
BRnzp RETURN_FIB
END_IF_0
; checking n ==1
LDR R0, R5, #3
ADD R0, R0, #-1
BRnp END_IF_1
ADD R0, R0, #1
STR R0, R5, #2
BRnzp RETURN_FIB
END_IF_1
; i dont understand how if i comment these 2 lines out it breaks the program
STR R0, R5, #2
BRnzp RETURN_FIB
ADD R6, R6, #-1
LDR R0, R5, #3
ADD R0, R0, #-1
STR R0, R6, #0 ; push argument (n-1)
ADD R6, R6, #-1 ; push return value
JSR FIB
LDR R0, R6, #0 ; return value
STR R0, R5, #2 ; put in return value x5FF8+2= x5FFA
ADD R6, R6, #1 ; pop return value
ADD R6, R6, #1 ; pop arg
JSR FIB
LDR R1, R5, #2
ADD R0, R0, R1
STR R0, R5, #2 ; complete calc and put return value x5FF8+2= x5FFA
RETURN_FIB
LDR R5, R6, #0
ADD R6, R6, #1 ; pop prev frame ptr
LDR R7, R6, #0
ADD R6, R6, #1 ; pop return address
RET
GETNUM
ADD R6, R6, #-1
STR R7, R6, #0 ; push return addr
ADD R6, R6, #-1
STR R5, R6, #0 ; push prev frame ptr
ADD R5, R6, #0
GETC
OUT
LDR R1, R4, #0
ADD R0, R1, R0
STR R0, R5, #2 ; return value
LDR R5, R6, #0
ADD R6, R6, #1 ; pop prev frame ptr
LDR R7, R6, #0
ADD R6, R6, #1 ; pop return address
RET
DISPLAY
ADD R6, R6, #-1
STR R7, R6, #0 ; push return addr
ADD R6, R6, #-1
STR R5, R6, #0 ; push prev frame ptr
ADD R5, R6, #0
AND R0, R0, #0
ADD R6, R6, #-1 ; int tens =0
STR R0, R6, #0
LDR R3, R4, #1 ; ASCII offset
AND R2, R2, #0 ; tens counter
ADD R2, R2, #-1 ; start at -1,++ at beginning of iteration
ADD R0, R0, #-10 ; R0=-10
LDR R1, R5, #2 ; R1= int n
TEN_LOOP

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!