在MIPS汇编语言中,我需要编写一个函数来计算连续数字的升序和降序。
给定数组“A”和整数“a,B,n”,写出一个函数:
if(a < b)
A[0] = A[0] + a
A[1] = A[1] + b
A[2] = A[2] + a
A[3] = A[3] + b
...
A[2n-1] = A[2n-1] + b
else
A[0] = A[0] + b
A[1] = A[1] + a
A[2] = A[2] + b
A[3] = A[3] + a
...
A[2n-1] = A[2n-1] + a
不知道下一步该怎么做。架构地址是32位长。
我首先声明:a0 = a,a1 = B,a2 = n,a3 = A
然后道:
add $t0, $a3, $a3 #stopping condition
xor $t1, $t1, $t1 # index = 0
slt $t2, $a0, $a1 # if a0 less than a1, then set t2 = 1, else, t2 = 0
bne $t2, $0, foo1 # if t2 != 0 then branch to foo1, which is the (a < b) sum loop
1条答案
按热度按时间w1e3prcc1#
不知道下一步该怎么做。
您需要解决两个部分:
1.第一部分是你展示的代码使用了......的,这是非常非正式的:以至于它实际上是不完整的代码。这并不是编写伪代码的标准方法,但它是一个开始。建议,然后完成该代码,以便删除...的部分。您可能需要使用某种循环来完成此操作。建议使用更正式的伪代码或(即没有...'s),或者更好的是在工作的C代码中,这样你就可以测试它;在将其转换为程序集之前,您需要有该代码,我重申,这里最好的方法是 * 在尝试程序集版本之前 * 完成该操作,这样您就知道要为程序集编写什么代码。
1.第二部分是问题的分解:你需要知道什么才能把你的伪代码转换成汇编代码?
您可能需要学习MIPS中的if-then-else语句、MIPS中的数组引用、赋值语句以及函数签名和MIPS参数传递的概念。
这些项目中的每一个都可以独立于您要编写的整个程序进行研究,每个项目都有关于stackoverflow的大量文章,尽管许多其他网站都有关于MIPS汇编的类似说明。
一旦你有了可以工作的伪代码或C代码(没有...的),学习了if-then-else、循环、数组引用和带参数的函数,你就可以把你的代码逐行翻译成汇编代码。