В основном, код предназначен для получения некоторого пользовательского ввода и вывода общего количества символов, но, как только он достигает 10, он печатает символ ascii вместо фактического количества введенных символов.
Я знаю, что мне нужно вычесть 10 из общего количества и для каждых 10 вычтенных, добавить 1 в другой регистр или переменную и вывести это как значение 10 с, но не могу понять, как это настроить. Я совершенно новичок в этом, но попробовал несколько других вещей, но я не совсем понял, что я делал, поэтому не могу их объяснить. В настоящее время он печатает количество символов, если 9 или меньше. Да, я хорошо знаю, что это, вероятно, очень ужасный код, но любая помощь будет принята с благодарностью!
.orig x3000
;clear registers
and r0, r0, 0
and r1, r1, 0
and r2, r2, 0
and r3, r3, 0
and r4, r4, 0
and r5, r5, 0
and r6, r6, 0
and r7, r7, 0
Lea r0, EnterString
puts
LOOP
getc
add r1, r0, -10
brz END_LOOP
add r2, r2, #1
out
brnzp LOOP
END_LOOP
Lea r0, NumTens
puts
NEXTLOOP
add r2, r2, -10
brn END_NEXTLOOP
add r3, r3, #1
brzp NEXTLOOP
END_NEXTLOOP
Lea r0, NumChar
puts
ld r7, NumTensTotal
add r7, r7, r3
ld r0, compCharTotalOnes
add r0, r0, r2
out
Lea r0 FinSen
puts
Halt
EnterString .stringz "\nPlease enter a text: "
NumTens .stringz "\n"
NumChar .stringz "Totally, it has "
NumTensTotal .fill x30
compCharTotalOnes .fill x30
FinSen .stringz " characters including spaces"
.end
Если пользователь вводит: «Переполнение стека», программа должна сказать, что всего 14 символов.