Цикл MIPS «Я люблю информатику» основан на числе, которое пользователь вводит в консоли. - PullRequest
0 голосов
/ 05 ноября 2019

Я всего несколько недель изучаю 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
...