This homework is, in style, similar to Lab 7. Be sure you understand the lab before attempting the homework.
Write an LC-2 assembly language program to perform the following three C statements:
R0 = R3 ^ R4 ;
R1 = R3 != R4 ;
R2 = R3 || R4 ;
Follow the following rules:
R0, R1, and
R2 based on the values of
registers R3 and R4.
R3 and R4.
R5, R6, and
R7 as "scratch" registers.
HALT
system call.
This answer was provided by John Tan and slightly edited by the instructor.
.ORIG x3000 ;load program at x3000 ;; R0 = R3 ^ R4 ;; R3 ^ R4 = ((R3' R4)' (R3 R4')')' NOT R5, R3 ;set R5 to R3' NOT R6, R4 ;set R6 to R4' AND R5, R5, R4 ;R5 = (R3' R4) AND R6, R3, R6 ;R6 = (R3 R4') NOT R5, R5 ;R5 = (R3' R4)' NOT R6, R6 ;R6 = (R3 R4')' AND R5, R5, R6 ;R5 = ((R3' R4)' (R3 R4')') NOT R0, R5 ;R0 = ((R3' R4)' (R3 R4')')' ;; R1 = R3 != R4 ADD R5, R3 #0 ;copying the value of R3 to R5 NOT R5, R5 ADD R5, R5, #1 ;R5 is now -R3 ADD R6, R5, R4 ;R4 - R3 BRz D ;skip to D if R4 - R3 = 0 AND R1, R1, #0 ADD R1, R1, #1 ;return one BR E ;skip to E D AND R1, R1, #0 ;return zero ;; R2 = R3 || R4 E ADD R3, R3, #0 ;look at R3 BRnp F ;if R3 !=0 then goto F ADD R4, R4, #0 ;look at R4 BRnp F ;if R4 != 0 then goto F AND R2, R2, #0 ;both R3 and R4 = 0, set R2 to 0 BR G ;skip to G F AND R2, R2, #0 ADD R2, R2, #1 ;at least one of R3 or R4 is true G HALT .END