需要帮助将此C代码转换为LEGv8程序集。 (作业)
unsigned long long f(unsigned long long a[], int n) {
if (n == 0) return a[n];
return a[n] + f(a, n - 1);
}
我对在LEGv8程序集中编写基本函数非常熟悉,但递归方面让我失望。
提前谢谢。
答案 0 :(得分:0)
由于您的任务是执行编译器所做的事情(将C转换为汇编),您不需要知道这是递归的。 C编译器也不会知道。
判断源是否正在使用递归是IMHO NP完全问题,就像判断代码是否包含无限循环和其他NP完成任务一样,编译器甚至懒得去尝试评估这样的属性,他们当然可以在没有这些信息的情况下编译类似的代码。
虽然在这种简单的情况下,他们可能会注意到,并且可能通过展开少量调用或针对相当小的输入将事物评估为常数来优化它,这个可以作为for
循环求和转换{ {1}}数组n
的元素,但在此任务中再次没有您的业务。
因此,如果只有递归会让你失望,那么请忘记这是递归,只需按行,逐行指令将其编译为汇编语言。