我已经创建了一个汇编指令,我们称之为 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)); 正常工作......遗憾的是,我需要提取结果,而不仅仅是打印它!
如何避免让编译器备份输入变量? 谢谢!