hi there,

i am trying to write a lc3 assembly language program that takes two input numbers and prints out "x * y = z".

i can get it to work for numbers 0-9 however any numbers above that i get weird letters or symbols.

Any help is much appreciated. This is the first program i have written in lc3 assembly language so keeping it basic would be good

here is what i have so far:

Code:

.ORIG x3000
AND R3, R3, #0 ;r3 stores the sum, set r3 to zero
AND R4, R4, #0 ;r4 is the counter
LD R5, INVERSE_ASCII_OFFSET ;inverse ascii offset
LD R6, DECIMAL_OFFSET ;decimal offset
;storing first input digits
LEA R0, REQUESTMESG1 ;load the address of the 'REQUESTMESG1' message string
PUTS ;Prints the message string
GETC ;get the first number
OUT ;print the first number
ADD R1, R0, #0 ;store input value(ascii) to r1
ADD R1, R1, R5 ;get real value of r1
;storing second input digits
LEA R0, REQUESTMESG2 ;load the address of the 'REQUESTMESG1' message string
PUTS ;Prints the message string
GETC ;get the first number
OUT ;print the first number
ADD R2, R0, #0 ;store input value(ascii) to r2
ADD R2, R2, R5 ;get real value of r2
;setting up for multiplication loop
ADD R4, R2, #0 ;fill counter with multiplier
MULTIPLICATION:
ADD R3, R3, R1 ;add to sum
ADD R4, R4, #-1 ;decrease counter by one
BRp MULTIPLICATION ;continue loop until multiplier is 0
LEA R0, EMPTY
PUTS
ADD R0, R3, R6 ;move result to r0
OUT ;print result
HALT
REQUESTMESG1 .STRINGZ "\n\nenter first number: "
REQUESTMESG2 .STRINGZ "\nenter second number: "
EMPTY .STRINGZ "\n"
INVERSE_ASCII_OFFSET .fill xFFD0 ; Negative of x0030.
DECIMAL_OFFSET .fill #48
.END