MIPS构造循环

时间:2017-02-09 14:06:11

标签: loops assembly mips

好的,所以这可能是一个非常愚蠢的问题,但我还没有掌握大会的问题。我必须编写一个程序来计算一系列数字的总和。它的行为应该如下:

Enter the first integer in the series: 5
Enter the number of integers in the series: 3
Enter the offset between integers in the series: 4

The series is: 5, 9, 13.
The summation of the series is 27. 

Would you like to calculate another summation (Y/N)? y

Enter the first integer in the series: 4
Enter the number of integers in the series: 5
Enter the offset between integers in the series: 27

The series is 4, 31, 58, 85, 112.
The summation of the series is 290.

Would you like to calculate another summation (Y/N)? Y

Enter the first integer in the series: -16
Enter the number of integers in the series: -22
There must be a positive number of integers in the series.

Would you like to calculate another summation (Y/N)? n

这是我到目前为止所做的:

li $v0, 4   #put 4 in as main parameter in v0
la $a0, Q1  #syscall will print string query 1
syscall

在s0

中存储串联的第一个整数
li $v0, 5   #put 5 in as main parameter in v0
syscall     #syscall will read integer from Q1
move $s0, $v0   #move integer in v0 to s0

请求串行整数

li $v0, 4   #put 4 in as main parameter in v0
la $a0, Q2  #syscall will print string query 2
syscall

在s1

中存储串行的整数
li $v0, 5   #put 5 in as main parameter in v0
syscall     #syscall will read integer from Q2
move $s1, $v0   #move integer in v0 to s1

请求整数偏移量

li $v0, 4   #put 4 in as main parameter in v0
la $a0, Q3  #syscall will print string query 3
syscall

在s2

中存储整数偏移量
li $v0, 5   #put 5 in as main parameter in v0
syscall     #syscall will read integer from Q3
move $s2, $v0   #move integer in v0 to s1

设置计数器

li $s3, 1   #Set counter to zero
li $t0, 1   #iterator count is in t0

我只是好奇在哪里开始我的循环?我将如何打印整个系列?任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我不确定你在"设置计数器"部分,因为s1已包含多个系列成员。

s0包含当前元素。

你需要的所有信息(附加信息)是清除current_sum,让我们说s3

add $s3, $zero, $zero   ; or "move $s3, $zero" if you prefer the pseudo-ops

因此,对于您的第一个示例s0 - s3将在第一次循环迭代之前设置为[5, 3, 4, 0]。这就是你需要的一切("世界状态"),你要设置的任何其他值可能是特定子任务的临时值,比如显示一些值和类似值,但只要核心计算得到,这些四个值代表您所需要的一切,其他一切都可以基于它们。

如果s1已低于1<=0测试),则报错输入。

然后是循环算法:

  • 将当前元素(s0)添加到当前总和(s3; summing up all numbers
  • 显示当前元素(s0
  • ; handle the correct count of series' members
  • 减少计数器s1
  • 如果s1为零,则转到exit_loop
  • ; preparing for next loop iteration
  • 将偏移量(s2)添加到当前元素(s0
  • 显示", "
  • 跳到第一步

exit_loop:逻辑将涉及打印行尾,求和文本描述,当前总和值(s3),另一个新行,并要求重复y / n。

例如,在这样的迭代过程中会发展出4个核心值:

  • [5, 3, 4, 0] =&gt;显示"5, " +所有值的更新
  • [9, 2, 4, 5] =&gt;显示"9, " +所有值的更新
  • [13, 1, 4, 14] =&gt;将s3修改为27,显示"13"--s1,跳转到exit_loop

exit_loop核心值为[13, 0, 4, 27]时,代码会将27显示为序列总和。