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:
.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