У меня есть код, который позволяет пользователю вводить 5 цифр, и они будут добавлены, и сумма будет отображаться. Если пользователь нажмет ENTER, будет отображена сумма, и если он нажмет q, программа остановится. Я новичок в LC3 и никогда не понимал, как изменить значение с ASCII на десятичное. Я не знаю, если значение не сохраняется или операция сумма не является правильным. Кто-нибудь знает, как это сделать?
Я уже пытался использовать x0030 (48) и вычесть его из суммы, но он не работает.
.ORIG x3000
RESTART
AND R0, R0, #0
AND R1, R1, #0
AND R2, R2, #0
AND R3, R3, #0 ;Clear all registers
AND R4, R4, #0
AND R5, R5, #0
AND R6, R6, #0
LEA R0, MESSAGE ;Load and print first prompt message
PUTS
ADD R4, R4, #4 ;Set counter
SUM
GETC ;Get input and echo it
OUT
ADD R1, R0, #0
LD R6, QKEY
NOT R6, R6
ADD R1, R6, R0 ;Check if user pressed the letter q
BRz DONE
LD R2, ENTER
NOT R2, R2 ;Check if user pressed ENTER key
ADD R1, R2, R0
BRz FINISH
ADD R1, R0, R1 ;Store sum value in R1
LEA R0, NEXT
PUTS ;Load and print next prompt
ADD R4, R4, #-1 ;Decrement counter
BRp SUM ;Loop
GETC ;Get final input and echo it
OUT
ADD R1, R0, #0
LD R6, QKEY
NOT R6, R6
ADD R1, R6, R0 ;Check if user pressed the letter q
BRz DONE
LD R2, ENTER
NOT R2, R2 ;Check if user pressed ENTER key
ADD R1, R2, R0
BRz FINISH
FINISH
LEA R0, OUTPUT ;Load and print prompt of sum
PUTS
LD R3, NEG30
NOT R3, R3
ADD R3, R3, #1
ADD R1, R1, R0
OUT
BR RESTART ;Restart program
DONE
LEA R0, QUIT
PUTS ;Load and print quit prompt
HALT
MESSAGE .STRINGZ "\n Enter Start Number (0 - 9): "
NEXT .STRINGZ "\n Enter Next Number (0 - 9): "
OUTPUT .STRINGZ "\n The sum of the numbers is: "
NEG30 .FILL x30
QUIT .STRINGZ "\n Thank you for playing!"
QKEY .FILL x70
ENTER .FILL x09
.END