将递归 C 函数转换为 ARM 程序集?

标签 c recursion assembly arm

在家庭作业中,我得到了一个递归 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 代码段及其相应的汇编代码进行了颜色编码。谁能告诉我哪里出了问题?

enter image description here

最佳答案

您可以在 CMP 命令后使用它并跳转您的函数:

BEQ标签;分支相等

BNE标签;分支不等于

蓝牙标签;分支小于等于

BLT标签;分支小于

BGE标签;分支大于等于

BGT标签;分支大于

关于将递归 C 函数转换为 ARM 程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36713250/

相关文章:

assembly - 计算 DW 数组中等于 1 的元素个数

assembly - 正确编译多个 asm 文件并将其链接到 .vfd - 对于 Oracle VM?

c - C中的内积函数

c - Linux 内核替换 key

c++ - 如果 cin 中没有输入任何内容,如何停止递归?

generics - Kotlin - 如何生成无法具体化的递归函数?

c - 子进程的进程和状态有问题

c++ - Pthread读写锁问题

javascript - 嵌套数组上的递归过滤器

Linux 上的 C++/汇编 IDE