this is a LC3 assembly language code it is supposed to multiply using shift and
ID: 3844497 • Letter: T
Question
this is a LC3 assembly language code it is supposed to multiply using shift and add
;Lab#5: MULTIPICATION SHIFT AND ADD METHOD
; Inputs: X,Y
; Outputs: X.Y
.ORIG x3000
LDI R0,X ; MULTIPLIER
LDI R1,Y ; MULTIPLICAND
JSR MULT
STI R2, RESULTMUL ;X.Y
HALT
X .FILL x3100
Y .FILL x3101
RESULTMUL .FILL x3102
MULT
ADD R3,R3,#1;SIGN
ADD R0,R0,#0
BRp POSX
NOT R0,R0 ;-X
ADD R0,R0,#1
ADD R3,R3,#0
POSX
ADD R1,R1,#0
BRp POSY
NOT R1,R1 ;-Y
ADD R1,R1,#1
ADD R3,R3,#0
POSY
ADD R6, R6, #14 ; I=14 to loop 15 times because 16th bit is sign bit
ADD R2, R2, #0
ADD R5, R5, #0
LOOP
AND R4, R4, #0
ADD R4, R4, #1
AND R5, R0, R4 ;;I NEED HELP HERE
BRnz ISONE
ADD R2, R2, R1
ISONE
ADD R1, R1, R1
ADD R6, R6,#-1
BRp LOOP
ADD R3,R3,#0
BRp POSP
NOT R2,R2
ADD R2,R2,#1
POSP
RET
.END
Explanation / Answer
; Inputs: X,Y
; Outputs: X.Y
.ORIG x3000
LDI R0,X ; MULTIPLIER
LDI R1,Y ; MULTIPLICAND
JSR MULT
STI R2, RESULTMUL ;X.Y
HALT
X .FILL x3100
Y .FILL x3101
RESULTMUL .FILL x3102
MULT
ADD R3,R3,#1;SIGN
ADD R0,R0,#0
BRp POSX
NOT R0,R0 ;-X
ADD R0,R0,#1
ADD R3,R3,#0
POSX
ADD R1,R1,#0
BRp POSY
NOT R1,R1 ;-Y
ADD R1,R1,#1
ADD R3,R3,#0
POSY
ADD R6, R6, #14 ; I=14 to loop 15 times because 16th bit is sign bit
ADD R2, R2, #0
ADD R5, R5, #0
LOOP
AND R2, R2, #0
ADD R4, R2, #1 ;; R4 contains bit mask (x0001)
AND R5, R0, R4 ;; is corresopnding
BRnz ISONE ;; bit of multiplier one
ADD R2, R2, R1 ;; multiplier bit 1 add
ISONE
ADD R1, R1, R1 ;; shift the multiplicand bits
ADD R6, R6,#-1 ;; check if higher bits then -1
BRp LOOP
ADD R3,R3,#0
BRp POSP
NOT R2,R2
ADD R2,R2,#1
POSP
RET
.END
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.