Я всего несколько недель изучаю mips с использованием MARS. Я пытаюсь зациклить "Я люблю компьютерные науки", основываясь на int, который пользователь вводит в командной строке. Поэтому, если пользователь введет 4 в приглашении, «Я люблю информатику» 4 раза выведет на консоль. Я также добавил, чтобы вывести сумму зацикленных времен. Сумма выводилась на консоль идеально, пока я не начал пытаться заставить программу зацикливаться на основе int, введенного пользователем. Я испортил это часами и действительно застрял. Я знаю, что эта программа, вероятно, заполнена ошибками новичка, но ниже приводится то, что у меня есть.
.data
userPrompt : .asciiz "Enter a number: "
love: .asciiz "I love computer science! "
sumMessage: .asciiz "The sum of integers from 1 to N is: "
list: .word 0
.text
addi $t3, $zero, 1 # $t3 = int count = 1;
addi $t1, $zero, 0 # $t3 = int sum = 0
li $v0, 4 # system call code for print_str
la $a0, userPrompt # address of string to print
syscall # print the string
li $v0, 5 # read_int syscall
syscall
while:
move $t0, $v0
ble $t0, $t3, exit #while input <= limit
addi $t1, $t1, 1 #increment counter
syscall #call
j while #jumps back to the top of loop
cs:
li $v0, 4 # syscall code to print a string
la $a0, love
syscall # print a space
j while
stored:
addi $t7, $zero, 1 # t7 has the number to be stored.
la $s1, list # $s1 = address
initlp:
bgt $t7, $t0, initDone # exit loop after storing user input integers. t0 has that value.
sw $t7, ($s1) # list[i] = $t7
addi $s1, $s1, 4 # step to next array cell
addi $t7, $t7, 1 # increment the register $t7 to next number
b initlp
initDone:
la $s1,list # load base addr
addi $t7, $zero, 1 # t7 = counter
move $t2, $zero # t2 will store the sum.
loop:
bgt $t7, $t0, printSum # add the numbers
lw $t4,0($s1) # load
addi $s1,$s1,4 # increment pointer
add $t2,$t2,$t4 # update sum
addi $t7, $t7, 1 # increment the loop counter
b loop
printSum: # print sum message
li $v0,4
la $a0,sumMessage
syscall
# print value of sum
li $v0,1
addi $a0,$t2,0
syscall
exit:
# exit
li $v0, 10
syscall
Программа заканчивается после ввода числового значения для цикла. Сум работал, пока я не попытался зациклить "Я люблю информатику".
Expected output:
Enter a number: 5
I love computer science!
I love computer science!
I love computer science!
I love computer science!
I love computer science!
The sum of integers from 1 to N is: 15