Я пытаюсь заставить пользователя ввести 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-го символа.