Как правильно вывести суммы строковых гласных и не гласных на языке ассемблера PCspim MIPS? - PullRequest
0 голосов
/ 03 апреля 2020

Я новый пользователь StackOverflow и мне интересно, что именно не так с моим кодом? Прямо сейчас вывод всегда будет отображать 0 гласных и 2 не гласных независимо от ввода строки.

##
##  num-vowel.s
##

#################################################
#                                               #
#               text segment                    #
#                                               #
#################################################

        .text
        .globl __start
__start:                    # execution starts here


    la $a0,prompt1      # print prompt on terminal
    li $v0,4            # system call to print
    syscall             # out a string

    la $v0,str
    li $a1,82
    li $v0, 8       # syscall 8 reads string/letter
    syscall

    li $t1, 0           # initialize the index and start at 0
    li $t3, 0       # initialize the vowel count and start at 0
    li $t4, 0       # initialize the non-vowel count and start at 0

loop:
    lb $t0 str($t1)

    li $t2, 'a'
    beq $t0, t2, isVowel    # Tests the string letter input for vowels
    nop         # nop is the same as sll zero, zero, 0

    li $t2, 'A'
    beq $t0, t2, isVowel    
    nop

    li $t2, 'e'
    beq $t0, t2, isVowel
    nop

    li $t2, 'E'
    beq $t0, t2, isVowel
    nop

    li $t2, 'i'
    beq $t0, t2, isVowel    
    nop

    li $t2, 'I'
    beq $t0, t2, isVowel
    nop

    li $t2, 'o'
    beq $t0, t2, isVowel
    nop

    li $t2, 'O'
    beq $t0, t2, isVowel    
    nop

    li $t2, 'u'
    beq $t0, t2, isVowel
    nop

    li $t2, 'U'
    beq $t0, t2, isVowel
    nop

    addi $t4, $t4, 1    # if not a vowel, increment non vowel sum

    j next
    nop

isVowel:
    addi $t3, $t3, 1    # if it is a vowel, increment vowel sum

next:
    addi $t1, $t1, 1

    beqz $t0, done      # once the program reaches the null char, perform output
    nop

    j loop
    nop

done:
    la $a0,vowelMsg1    # print vowelMsg1
    li $v0,4            
    syscall


    move $a0, $t3
    li $v0, 1       # Prints the vowel sum
    syscall


    la $a0,vowelMsg2    # print vowelMsg2
    li $v0,4            
    syscall


    la $a0,vowelMsg3    # print vowelMsg3
    li $v0,4            
    syscall


    move $a0, $t4
    li $v0, 1       # Prints the non-vowel sum
    syscall


    la $a0,vowelMsg4    # print vowelMsg4
    li $v0,4            
    syscall


        li $v0, 10      # Program end, bye!
        syscall



#################################################
#                       #
#               data segment            #
#                       #
#################################################

        .data

    vowelSum:   .word 0
    nonVowelSum:    .word 0

    prompt1:    .asciiz "Enter a sentence and/or a word: "
    str:        .word 80
    strEnd:     .word 0

    vowelMsg1:  .asciiz "What you have entered has "

    vowelMsg2:  .asciiz " vowels.\n"

    vowelMsg3:  .asciiz "What you have entered has "

    vowelMsg4:  .asciiz " non-vowels.\n"



##
##  end of file num-vowel.s

1 Ответ

0 голосов
/ 03 апреля 2020

Вы объявили str как эквивалент: int str = 80;

Вы хотите использовать .space 80 вместо .word 80.

Вы также ставите &str в $v0 до вашего исходного чтения строки syscall, тогда как он принадлежит $a0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...