Translate the LC/2 assembly program given in problem 7.9 (page 153) of the textbook to binary.
One sure way to solve the problem is to type it into the computer and run it through the LC-2 assembler. The output of the assemble is shown below:
(0000) 3000 0011000000000000 ( 1) .ORIG x3000 (3000) 5B60 0101101101100000 ( 2) AND R5 R5 #0 (3001) 56E0 0101011011100000 ( 3) AND R3 R3 #0 (3002) 16E8 0001011011101000 ( 4) ADD R3 R3 #8 (3003) A211 1010001000010001 ( 5) LDI R1 A (3004) 1460 0001010001100000 ( 6) ADD R2 R1 #0 (3005) 1482 0001010010000010 ( 7) AG ADD R2 R2 R2 (3006) 16FF 0001011011111111 ( 8) ADD R3 R3 #-1 (3007) 0A05 0000101000000101 ( 9) BRNP AG (3008) 2810 0010100000010000 ( 10) LD R4 B (3009) 5244 0101001001000100 ( 11) AND R1 R1 R4 (300A) 927F 1001001001111111 ( 12) NOT R1 R1 (300B) 1261 0001001001100001 ( 13) ADD R1 R1 #1 (300C) 1481 0001010010000001 ( 14) ADD R2 R2 R1 (300D) 0A0F 0000101000001111 ( 15) BRNP NO (300E) 1B61 0001101101100001 ( 16) ADD R5 R5 #1 (300F) F025 1111000000100101 ( 17) NO TRAP x25 (3010) FF00 1111111100000000 ( 18) B .FILL xFF00 (3011) 4000 0100000000000000 ( 19) A .FILL x4000
Write an LC/2 assembly program to compute the following:
R2 = R3 & 0x0505 ;
if (R2 == R4)
R2 = R2 + 3 ;
This solution saves and restore R1, even though the homework requirement does not require that the value of R1 be preserved.
.ORIG x3000 Home6 ST R1, Hm6Sv1 ; Save R1 LD R2, Cx0505 ; R2 := R3 & 0x0505 ; AND R2, R3, R2 ADD R1, R2, #0 ; R1 is R2 NOT R1, R2 ; R1 is ~R2 ADD R1, R1, #1 ; R1 is -R2 ADD R1, R1, R4 ; R1 is R4-R2 BRnp Hm6NZ ; branch if R4 != R2 ADD R2, R2, #3 ; R2 := R2 + 3 Hm6NZ LD R1, Hm6Sv1 HALT Hm6Sv1 .BLKW 1 Cx0505 .FILL x0505 .END