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