在家庭作业中,我得到了一个递归 C 函数来计算我需要转换为 ARM 程序集的整数分区。我对 ARM 汇编的了解:
1) R0
将保存调用的返回值
2) R1
, R2
, R3
为参数寄存器
代码如下:
int count_partitions(int n, int m) {
if (n == 0)
return 1;
else if(n < 0)
return 0;
else if (m == 0)
return 0;
else
return count_partitions(n - m, m) + count_partitions(n, m - 1);
}
我相信我已经正确完成了前 3 个 if & else-if
语句。我对最终 else
语句的逻辑是找到 count_partitions(n, m-1),将其存储到堆栈中,然后找到 count_partitions(n-m, m)
,并添加那是我从堆栈中获得的先前返回值 - 但是我的代码似乎不起作用?
我附上了我尝试过的解决方案,并对不同的 C 代码段及其相应的汇编代码进行了颜色编码。谁能告诉我哪里出了问题?
最佳答案
您可以在 CMP 命令后使用它并跳转您的函数:
BEQ标签;分支相等
BNE标签;分支不等于
蓝牙标签;分支小于等于
BLT标签;分支小于
BGE标签;分支大于等于
BGT标签;分支大于
关于将递归 C 函数转换为 ARM 程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36713250/