Say I have a value (eg. 1234) that I load into R0. How could I print this value to the console?
I'm assuming you would like to print a number out to the console but you're getting random characters if anything.
This happens when the LC3 tries to interpret your number as an ASCII character. Example: The number 8 in ASCII is the backspace character.
To make your program work you will need to add 48 (decimal) or x30 (hex) to your number before you can print it to the console.
.ORIG x3000
AND R0, R0, #0 ; Clear R0
LD R0, NUM ; load our number into R0
LD R2, ASCII ; load the ascii offset into R2
ADD R0, R0, R2
OUT
HALT ; Trap x25
NUM .fill x02 ; Our Number to print
ASCII .fill x30 ; Our ASCII offset
.END
In your example you want to print off an array of characters like 1234. The concept for this is pretty similar but we'll need to work with pointers and a for loop.
.ORIG x3000
AND R0, R0, #0 ; Clear R0
AND R1, R1, #0 ; Clear R1
AND R3, R3, #0 ; Clear R3
LEA R0, NUM ; pointer [mem]NUM
ADD R1, R1, R0 ; Store the pointer address of R0 into R1
LD R2, ASCII ; load the ascii offset into R2
FOR_LOOP
LDR R4, R1, #0 ; load the contents of mem address of R1 into R4
BRz END_LOOP
ADD R4, R4, R2 ; Add our number to the ASCII offset
STR R4, R1, #0 ; Store the new value in R4 into [mem] address R1
ADD R1, R1, #1 ; move our memory pointer down one
BRnzp FOR_LOOP ; loop again until we get an x00 char
END_LOOP
PUTs ; print our string starting from [mem]address in R0
HALT ; Trap x25
ASCII .fill x30 ; Our ASCII offset
NUM .fill x01 ; Our Number to print
.fill x02
.fill x03
.fill x04
.END