Неожиданное поведение, когда пользователь вводит 10 или 11 символов - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь заставить пользователя ввести 10-символьную строку, использовать цикл для ее итерации, сохранить сумму первых 10 значений ascii и вывести сумму в конце

.data
    Prompt:         .asciiz "Enter a 10 character string: "
    CharString: .space  32  #Reserves the space for the input --> 20 in case user wants to enter more than 10 characters
#               even though the program will only read the first 10
.text 

    main:
        la $s1, 0   #Sum
        li $v0, 4
        la $a0, Prompt #Prompts user for input
        syscall

        li $v0, 8   #Syscall code for user input (of 10 characters?)
        la $a0, CharString  #Reading from the output
        li $a1, 11      #Max length to be read as input
        syscall #Making the read syscall
        move $t0, $a0   #Saves/duplicates input string (a0) into the t0 register for easier access
        syscall
    loop:
        lb $a0, 0($t0)                      #Initializing the address for the character of the string
        add $s1, $s1, $a0 #Adds the current ascii value to the sum
        addi $t0, $t0, 1 #iterates
        #add $s1, $a0, $s1 #Adds the current ascii value to the sum
        blt $t0, 10, loop
        beq $t0, 10, endPrint
    endPrint:
        add $s1, $s1, $zero
        li $v0, 1                   # Syscall code for printing out an integer
        move $a0, $s1               # Transfer $s1 to $a0 for printing
        syscall
        li $v0, 10      # system call code for exit = 10
        syscall
    li $v0, 10 #Exit syscall
    syscall

Я ожидал, что код прочитает то, что пользователь вводит, и выполнит операцию суммирования значений ascii первых 10 символов, но это не так.

Если я введу 10 символов в качестве ввода, выводравно 10, и если я введу более 10 символов, возвращается только значение ascii 11-го символа.

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