Как записать int в строку в Mips - PullRequest
0 голосов
/ 10 ноября 2018

Я спрашиваю пользователя для ввода и хочу заменить каждый символ слова на количество символов в верхнем регистре в этом слове

Пример: Вход: 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
...