Я спрашиваю пользователя для ввода и хочу заменить каждый символ слова на количество символов в верхнем регистре в этом слове
Пример:
Вход: AaAA
вывод: 3333 (4 буквы - 3 заглавные буквы)
Работает часть для подсчета букв в слове в верхнем регистре (хранится в $ t5)
Однако я не могу заменить, например, «3333» на «AaAA». Я пытаюсь сделать это с помощью sb в разделе word_replace. В моем выводе я вижу поля вместо цифр.
Вот мой код:
.data
prompt: .asciiz "Enter a string: "
msgout: .asciiz "Output string: "
input: .space 256
output: .space 256
.text
.globl main
main:
li $v0, 4 # Print enter a string prompt
la $a0, prompt
syscall
li $v0, 8 # Ask the user for the string they want to reverse
la $a0, input # We'll store it in 'input'
li $a1, 256 # Only 256 chars/bytes allowed
syscall
la $t2, ($a0) # t2 - input string
word:
li $t1, 0 # Normal counter
li $t5, 0 # Uppercase counter
word_countUppercase:
add $t3, $t2, $t1 # $t2 is the base address for our 'input' array, add loop index
lb $t4, 0($t3) # load a byte at a time according to counter
bltu $t4, ' ', word_prereplace # We found end of word
addi $t1, $t1, 1 # Advance our counter (i++)
bltu $t4, 'A', word_countUppercase
bgtu $t4, 'Z', word_countUppercase
addi $t5, $t5, 1 # Advance our counter (i++)
j word_countUppercase
word_prereplace:
la $t2, ($a0) # t2 - input string
li $t1, 0 # Normal counter
word_replace:
add $t3, $t2, $t1 # $t2 is the base address for our 'input' array, add loop index
lb $t4, 0($t3) # load a byte at a time according to counter
bltu $t4, ' ', exit # We found end of word
sb $t5, output($t1) # Overwrite this byte address in memory
addi $t1, $t1, 1 # Advance our counter (i++)
j word_replace
exit:
li $v0, 4 # Print msgout
la $a0, msgout
syscall
li $v0, 4 # Print the output string!
la $a0, output
syscall
li $v0, 10 # exit()
syscall