Это моя первая попытка MIPS, и я разработал псевдокод описания возможного алгоритма. Контуры код выглядит следующим образом:Как создать программу, которая найдет сумму целых чисел от 1 до N, где N - значение, считанное на клавиатуре?
main: Print: "Please input a value for N ="
read v0
If(v0 >0)
{
t0 = 0
while(v0 > 0) do
{
t0 = t0 + v0
v0 = v0 +v0 -1
}
print: The sum of integers from 1 to N is = ", t0
go to main
}
else
print: "Honest Abe"
так, с этим контуром, я сделал несколько в попытке перевести это в MIPS, но целых переменных, хранящих и читать их в заблуждение меня. Моя попытка реального кода:
.data
Prompt: .asciiz "\n Please input a value for N="
Result: .asciiz "\n The sum of integers from 1 to N is "
Bye: .asciiz "\n ***Honest Abe***"
.text
main:
li $v0,4 #load $v0 with print_string code
la $a0, Prompt #load $a0 with the message to be displayed
syscall
bgz $v0, else
li $t0, 0
while:
bgz $v0
add $t0,$t0,$v0
addi $v0,$vo -1
Отсюда, я не понимаю, как для петель работать в MIPS и я не понимаю, если это даже правильный подход. Вся идея чтения в цифрах и последующего хранения целых чисел не обрабатывается в моей голове. Кроме того, я не уверен, что я использую соответствующие команды для цикла. Помогите с любым из этих вопросов было бы здорово!
Один способ создать цикл для MIPS делает прыжок на метку без условия (J время). Другой - цикл с условием, использующим команды 'slt' и' beq', или просто 'bgt' для' while (v0> 0) '. – Coursal
Ну, во-первых, вам не нужен цикл, так как уравнение для арифметического ряда равно (n/2) * (n min + n max), поэтому в вашем случае (считая от 1) это (n/2) * (1 + п) –