Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Please, create a program in LC-3 Assembly Language code. The program has to encr

ID: 3766945 • Letter: P

Question

Please, create a program in LC-3 Assembly Language code. The program has to encrypt ASCII.

Instructions:

- The key is 6 and stored at x3100.

- They are stored at x3110 to x311F. The last ASCII code of the text string must be EOT (x04).

- The least significant bit (LSB) of the code will be toggled. That is, if it is a 1, it will be replaced by 0 and vice verse.

- The key will be added to the result of step 1 above.

- The result should be stored at location x3120 to x312F. For example, if the input (plain text) is A, toggles lower 4 bits, and the encryption key is 6, the program should take the ASCII value of A, 01000001, toggle bit [3:0], producing 01001110 and then add the encryption key, 6. The final output character would be 01000110, which is the ASCII value F.

Explanation / Answer

.ORIG x3000

;CLEAR REGISTERS

AGAIN AND R0, R0, 0     ;CLEAR R0

AND R1, R1, 0           ;CLEAR R1

AND R2, R2, 0           ;CLEAR R2

AND R3, R3, 0           ;CLEAR R3

AND R4, R4, 0           ;CLEAR R4

AND R5, R5, 0           ;CLEAR R5

AND R6, R6, 0           ;CLEAR R6

;ENCRYPT/DECRYPT PROMPT

LEA R0, PROMPT_E        ;LOADS PROMPT_E INTO R0

PUTS                ;PRINTS R0

GETC                ;GETS INPUT

OUT             ;ECHO TO SCREEN

STI R0, MEMX3100        ;X3100 <- R0

;KEY PROMPT

LEA R0, PROMPT_K        ;LOADS PROMPT_E INTO R0

PUTS                ;PRINTS R0

GETC                ;GETS INPUT

OUT             ;ECHO TO SCREEN

STI R0, CYPHERKEY       ;X3101 <- R0

;MESSAGE PROMPT

LD R6, MEMX3102         ;R6 <- MEMX3102

LEA R0, PROMPT_M        ;LOADS PROMPT_E INTO R0

PUTS                ;PRINTS R0

LOOP1 GETC          ;GETS INPUT

OUT             ;ECHO TO SCREEN

ADD R1, R0, #-10        ;R1 <- R0-10

BRZ NEXT            ;BRANCH NEXT IF ENTER

STR R0, R6, #0          ;X3102 <- R0

ADD R6, R6, #1          ;INCRIMENT COUT

LD R2, NUM21            ;R2 <- -12546

ADD R5, R6, R2          ;R5 - R2

STI R5, MEMX4000        ;MEMX4000 <- R5

LD R1, NUM20            ;R1 <- NUM20

ADD R1, R6, R1          ;CHECK FOR 20

BRN LOOP1           ;CREATES WHILE LOOP

;Function choose

NEXT LDI R6, MEMX3100       ;R6 <- X3100

LD R1, NUM68            ;R1 <- -68

ADD R1, R6, R1          ;CHECKS FOR D INPUT

BRZ DECRYPT

;ENCRYPT FUNCTION(DEFAULT)

LD R4, MEMX3102         ;R6 <- X3102

LOOP2 LDR R1, R4, #0        ;R1 <- MEM[R4+0]

LDI R5, ASCII           ;R5 <- ASCII

ADD R1, R1, R5          ;STRIPS ASCII

AND R6, R1, #1          ;R6 <- R1 AND #1

BRZ LSBOI           ;BRANCH IF LSB = 0

ADD R1, R1, #-1         ;R1 <- R1-1

BRNZP KEYLOAD           ;BRANCH TO KEYLOAD

LSBOI ADD R1, R1, #1        ;R1 <- R1+1

KEYLOAD LDI R2, CYPHERKEY   ;R2 <- CYPHERKEY

ADD R1, R1, R2          ;R1 <- R1+R2

STR R1, R4, #21         ;MEM[R4+21] <- R1

ADD R4, R4, #1          ;R4 <- R4 + 1

LD R5, MEMX4000         ;R5 <- COUNT

NOT R5, R5          ;NOT R5

ADD R5, R5, R4          ;CHECK FOR NEGATIVE

BRN LOOP2           ;LOOP

BRNZP NEXT2         ;BRANCH WHEN DONE

;DECRYPT FUNCTION DECRYPT LD R4, MEMX3102      

;R4 <- X3102 LOOP3 LDR R1, R4, #0      

;R1 <- MEM[R4+0] LDI R5, ASCII         

;R5 <- ASCII ADD R1, R1, R5       

;STRIPS ASCII LDI R2, CYPHERKEY    

;R2 <- CYPHERKEY NOT R2, R2        

;R2 <- NOT R2 ADD R1, R1, R2           

;R1 <- R1 - CYPHERKEY AND R6, R1, #1        

;R6 <- R1 AND #1 BRZ LSBOI2        

;BRANCH IF LSB = 0 ADD R1, R1, #-1         

;R1 <- R1-1 BRNZP NEXTTASK1        

;BRANCH TO KEYLOAD LSBOI2 ADD R1, R1, #1       

;R1 <- R1+1 NEXTTASK1 STR R1, R4, #21  

;MEM[R4+21] <- R1 ADD R4, R4, #1           

;R4 <- R4 + 1 LD R5, MEMX4000          

;R5 <- COUNT NOT R5, R5        

;NOT R5 ADD R5, R5, R4         

;CHECK FOR NEGATIVE BRN LOOP3          

;LOOP