I am using the LC3 assembler to write two programs taking a user input string of
ID: 672936 • Letter: I
Question
I am using the LC3 assembler to write two programs taking a user input string of characters, storing it to an array labeled ARRAY, and then outputting it to the console using PUTS and PUTSP. I have finished the PUTS.asm program, since it only needed to store a single character per 16 bit word to sequential array locations. My issue is figuring out how to store the characters to the array, two characters per 16 bit word, so that I can just call LEA R0, ARRAY and then PUTSP to print out the packed array. My specific question would be: how do I go about packing the array; how do you store two characters per 16 bit word?
Explanation / Answer
; Initialization
; .ORIG x3000
AND R2, R2, #0 ; R2 is counter, initially 0
LD R3, PTR ; R3 is pointer to characters
GETC ; R0 gets character input
LDR R1, R3, #0 ; R1 gets first character ;
; Test character for end of file
;
TEST ADD R4, R1, #-4 ; Test for EOT (ASCII x04)
BRz OUTPUT ; If done, prepare the output
; Test character for match. If a match, increment count.
; NOT R1, R1
ADD R1, R1, R0 ; If match, R1 = xFFFF
NOT R1, R1 ; If match, R1 = x0000
BRnp GETCHAR ; If no match, do not increment
ADD R2, R2, #1 ;
; Get next character from file.
;
GETCHAR ADD R3, R3, #1 ; Point to next character.
LDR R1, R3, #0 ; R1 gets next char to test
BRnzp TEST ;
; Output the count.
;
OUTPUT LD R0, ASCII ; Load the ASCII template
ADD R0, R0, R2 ; Covert binary count to ASCII
OUT ; ASCII code in R0 is displayed.
HALT ; Halt machine
;
; Storage for pointer and ASCII template
;
ASCII .FILL x0030
PTR .FILL x4000 .END
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.