内联汇编功能无法正常返回

时间:2013-07-12 08:49:41

标签: c assembly inline-assembly isa

我已经创建了一个汇编指令,我们称之为 foo ,我正试图在C程序内的内联汇编函数中运行。我发表了以下声明:

asm int myFunction(int aa, int bb, int cc)
{
    @[
        .target aa
    ]
    foo @{aa}, @{bb}, @{cc}
}

foo 的返回值存储在 aa 中,这似乎可以正常工作。问题是我调用函数时作为 aa 的输入参数的变量在 foo 之前备份并在之后恢复。所以 foo 可以工作,但它的输出永远不会离开内嵌汇编块。

foo 的典型调用是:

int main()
{
    register int x = 1;
    register int y = 2;
    register int z = -1;

    x = myFunction(x, y, z);
    printf("%d ", x);
}

我已经尝试将 aa 声明为'clobber',然后直接读取 x ,但它也不会起作用。该问题可能与我的变量声明有关吗?我正在使用一个舒适的编译器,如果它有助于了解它。

有趣的是 printf(“%d”,myFunction(x,y,z)); 正常工作......遗憾的是,我需要提取结果,而不仅仅是打印它!

如何避免让编译器备份输入变量? 谢谢!

0 个答案:

没有答案