title: LC3 Assembly Language
body: <p>I am trying to write a LC3 assembly language program that takes two input numbers and prints out <code>x * y = z</code>.</p>
  
  <p>I can get it to work for numbers <code>0-9</code> however any numbers above that I get weird letters or symbols.</p>
  
  <p>Also how can I make it so that it can not only take only 1 inputs per <code>GETC</code> but two numbers eg. <code>10 * 12= 120</code>?
  Any help would be appreciated! :)</p>
  
  <p>Here's what I have done so far</p>
  
  <pre><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, display1 ;load the address of the 'display1' 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, display2 ;load the address of the 'display2' 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
  ;----------------------
  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, stringResult
  PUTS
  ADD R0, R3, R6 ;move result to r0
  OUT ;print result
  HALT
  display1 .STRINGZ "\nenter the 1st no.: "
  display2 .STRINGZ "\nenter the 2nd no.: "
  stringResult .STRINGZ "\nResult: "
  INVERSE_ASCII_OFFSET .fill xFFD0 ; Negative of x0030.
  DECIMAL_OFFSET .fill #48
  .END
  </code></pre>