Question: Hello. I need help understanding the following LC3 code. The purpose of this program is to create an LC3 program that given the day, month

Hello. I need help understanding the following LC3 code. The purpose of this program is to create an LC3 program that given the day, month and year will return the week. Please place comments in the lines of code that do not have them. Some parts I already understand. Please clearly explain the steps.

.ORIG x3000

Step1

LD R3, M ;LOAD MONTH

LD R4, Y ;Load the value for Month

ADD R0, R0, R3 ;R0 <- R3

JSR MONTH ;Jumping to subroutine Month

ST R0, SAVEREG0 ;Saving the value for Month

STEP2

AND R0, R0, #0

ADD R0, R0, R4 ;R0 <- R4

JSR SEP ;SEPARATE

ST R1, SAVEREG1 ;Save ye - C

ST R0, SAVEREG2 ;Save ar - D

STEP3

;calculate (13 x (m + 1))

LD R0, SAVEREG0 ;Load month

ADD R0, R0, #1 ;M+1

AND R1, R1, #0

ADD R1, R1, #13

AND R2, R2, #0 ;R2 IS PRODUCT

JSR MULT ;R2 <- 13 X (M+1)

;calculate (13 x m - 1)/5

STEP4 AND R0, R0, #0

AND R1, R1, #0

ADD R0, R0, R2 ;R0 <- (13m)

ADD R1, R1, #5

NOT R1, R1

ADD R1, R1, #1

AND R2, R2, #0 ;R2 QUO

JSR DIVIDE ;R2 <- (13(M+1))/5

;calculate (k + (13m-1)/5)

STEP5

LDI R0, K ;LOAD K INTO R0

ADD R6, R0, R2 ;R6 <- K + (13(M+1))/5

;calculate (k + (13m-1)/5 + D)

STEP6

LD R0, SAVEREG2 ;R0 <- D

ADD R6, R6, R0 ;R6 <- K+(13(M+1))/5 + D

;calculate D/4

STEP7

AND R1, R1, #0

ADD R1, R1, #4

AND R2, R2, #0

NOT R1, R1

ADD R1, R1, #1

JSR DIVIDE ;R2 <- D/4

;calculate K+(13-1)/5+D+D/4-2C

STEP8

ADD R6, R6, R2 ;R6 <- K+(13(M+1))/5+D+D/4

;calculate -2C

LD R0, SAVEREG1 ;LOAD C INTO R0

AND R1, R1, #0

ADD R1, R1, #2

AND R2, R2, #0

JSR MULT

NOT R2, R2

ADD R2, R2, #1

;add -2C

ADD R6, R6, R2 ;R6 <- R6 -2C

STEP9

;calculate C/4

AND R1, R1, #0

ADD R1, R1, #4

NOT R1, R1

ADD R1, R1, #1

AND R2, R2, #0

JSR DIVIDE ;R2 <- C/4

;calculate K+(13-1)/5+D+D/4+C/4-2C

ADD R6, R6, R2 ;R6 <- R6 + C/4 = F

;calculate F%7

AND R0, R0, #0

AND R1, R1, #0

AND R2, R2, #0

ADD R0, R0, R6

ADD R1, R1, #7

NOT R1, R1

ADD R1, R1, #1

JSR DIVIDE ;-R3 <- F%7

ADD R3, R0, #0

STI R3, FINAL

;DISPLAY

LEA R0, DAYS

DISLOOP

ADD R3, R3, #0

BRz DISPLAY

ADD R0, R0, #10

ADD R3, R3, #-1

BR DISLOOP

DISPLAY

PUTS

HALT

MONTH

ADD R0, R0, #-2

BRnz MONTH1 ;if m<=2

BRp MONTH2 ;if m>2

MONTH1

ADD R0, R0, #14 ;if m=1 -> m=11

ADD R4, R4, #-1

RET

MONTH2

ADD R0, R0, #2 ;if m=3~12 -> m=1~10

RET

SEP

AND R3, R3, x0 ;R3 - ADDER

ADD R3, R3, #15

ADD R3, R3, #15

ADD R3, R3, #15

ADD R3, R3, #15

ADD R3, R3, #15

ADD R3, R3, #15

ADD R3, R3, #10

NOT R3, R3 ;Negate R3 to obtain positive version

ADD R3, R3, #1

AND R2, R2, #0 ;RETURN - remainder

AND R1, R1, #0 ;return - quo

BR SEPLOOP

SEPLOOP

ADD R0, R0, R3 ;R1 <- R0 - 100

BRnz SEPEND

ADD R1, R1, #1 ;Counter

BR SEPLOOP

SEPEND

NOT R3, R3

ADD R3, R3, #1

ADD R0, R0, R3 ;R0 <- REMAINDER

ADD R2, R0, R3 ;R2 <- R0 + R3 = QUO

RET

MULT

ADD R2, R2, R0

ADD R1, R1, #-1

BRz RETURN

BR MULT

DIVIDE

ADD R0, R0, R1

ADD R2, R2, #1

;COMPARE X AND Y

AND R3, R3, #0

ADD R3, R0, R1

BRn RETURN

BR DIVIDE

RETURN RET

K .FILL x31F0 ;Location for the usual number of the month

M .FILL x31F1 ;Location for Month

Y .FILL x31F2 ;Location for Year

FINAL .FILL x31F3 ;Location for Day of the week

SAVEREG0 .FILL x0 ;m

SAVEREG1 .FILL x0 ;ye - C

SAVEREG2 .FILL x0 ;ar - D

DAYS .STRINGZ "Sunday " ;Printing Sunday

.STRINGZ "Monday " ;Printing Monday

.STRINGZ "Tuesday " ;Printing Tuesday

.STRINGZ "Wednesday" ;Printing Wednesday

.STRINGZ "Thursday " ;Printing Thursday

.STRINGZ "Friday " ;Printing Friday

.STRINGZ "Saturday" ;Printing Saturday

.END

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 Databases Questions!