这是我对MIPS的第一次尝试,我设计了一种可能算法的伪代码描述。代码大纲如下:
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
从这里,我不明白for循环如何在MIPS中工作,我不明白这是否是正确的方法。读取数字然后存储整数的整个想法并不是我脑海中的处理。另外,我不确定我是否使用适当的循环命令。对这些问题的任何帮助都会很棒!
答案 0 :(得分:0)
如果我做对了你想做的事情,你的算法似乎有点奇怪而且太麻烦了。
您可以使用简单的for循环计算一个总和,直到某个数字。如在C:
scanf("%d", &num);
for(i=0;i<num;i++)
sum=sum+i;
像一个数组一样。
在MARS参考卡的帮助下,您可以得到类似的结果:
.text
main:
li $v0, 5 #read a number from the keyboard
syscall
addi $s0, $v0, 1 #s0= the number from the keyboard + 1 (the limit)
li $t0, 1 #counter set to 1
loop:
beq $t0, $s0, exit #if the counter becomes equal tothe limit, exit the loop
add $t1, $t1, $t0 #add the counter to the sum to this point
addiu $t0, $t0, 1 #add 1 to the counter for each loop
j loop #go to the "loop" label above
exit:
li $v0, 1
move $a0, $t1
syscall
li $v0, 10
syscall