ARM汇编程序返回指针

时间:2018-01-03 00:30:59

标签: c assembly arm

我目前正在开发一个项目,我需要将指向ARM程序集函数的指针返回到C程序。

我目前通过将double推入堆栈然后返回堆栈指针的地址来解决此问题。

但是我不确定这是否是最好的(最安全的)方式,因此我在这里要求确认这是一个很好的方法,或者替代解决方案

另外一个问题是,根据任务,我不允许另外传递另一个变量,我也不允许使用C malloc函数。

编辑:我通过在.data中创建变量来解决问题,然后只返回该字段的地址。

1 个答案:

答案 0 :(得分:1)

你应该想想你将如何做纯C!您无法在堆栈上分配double。您可以在调用汇编函数之前保留内存。实施例

void my_assembly(double* value) {
    *value = (...);
}

void main(void) {
    double value;

    my_assembly(&value);
}

或者将它分配到汇编函数中:

double* my_assembly(void) {
    double *value = malloc(sizeof(double));
    *value = (...);
    return value;
}

void main() {
    double* value = my_assembly();
}

另一种选择是返回双倍! ARM's Procedure call Standard5.4 Result Return说:

  

在r0和r1中返回双字大小的基本数据类型(例如,长长,双和64位容器化向量)