c - ARM 汇编器返回指针

标签 c assembly arm

我目前正在开发一个项目,需要从 ARM 汇编函数向 C 程序返回一个指向 double 的指针。

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

但是我不确定这是否是最好(最安全)的方法,因此我在这里要求确认这是一种好方法还是替代解决方案。

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

编辑:我通过在 .data 中创建一个变量解决了这个问题,然后只需返回该字段的地址即可。

最佳答案

你应该想想你将如何使用纯 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 Standard 5.4 结果返回说:

A double-word sized Fundamental Data Type (e.g., long long, double and 64-bit containerized vectors) is returned in r0 and r1

关于c - ARM 汇编器返回指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48069689/

相关文章:

php - 为什么 C 打印的值与 PHP 打印的值不同?

assembly - 在汇编/编译/链接时构建静态 IDT 和 GDT 所需的解决方案

android - "bitsperlong.h": trouble cross-building Perf for ARM (Android)

为内核模块创建 DKMS 包,依赖于内核头文件

c++ - OSX gcc 找不到已安装的库

c++ - 内联汇编或单独的汇编文件

assembly - NOPL在x86系统中有什么作用?

linux - bin/sh/1 arm-linux-gnueabi-g++ 在 eclipse 中找不到

c++ - 默认情况下使用 g++ 而不是 arm 编译器进行构建?

c - 如何通过读取字符串来完成程序?