[讨论] ARM 内嵌汇编

luminix   2012-5-28 00:33 楼主
我想问个问题,就是X86上SSE上可以
int func(int a, int b)
{
   int c = 2;

   asm
   {
       mov eax, a;
       mov ebx, b;
       mov ecx, c;
    }
}

如果是ARM上, 下面的内嵌汇编似乎不行
int func(int a, int b)
{
   int c = 2;

   asm
   {
       mov r0, a;
       mov r1, b;
       mov r2, c;
    }
}

那我如何能够实现(内嵌汇编)把 a, b,c分别赋值给r0,r1,r2呢?

谢谢。

回复评论 (3)

在arm体系中,r0~r3是用于函数调用时参数传递的,r0用于记录返回值,r4~r11用于局部变量。如果不够用堆栈处理
点赞  2012-5-28 10:42
那内嵌汇编具体怎么实现呢?

我用
       mov r0, %0;
       mov r1, %1;
       mov r2, %2;
       mov r3  %3
       mov r4, %4
...........
这种方式,通过汇编代码发现,不能保证所有的结果都正确,因为寄存器不知道维护之前mov的寄存器之中的值。
点赞  2012-6-4 07:25

回复 板凳 luminix 的帖子

我之前发了一个笔记是关于混合编程的,虽然不是基于ARM的,但是给出了一些实例。
链接:https://bbs.eeworld.com.cn/thread-327421-1-1.html
另外arm在处理定义局部变量的时候,会由编译器自己决定是局部变量还是寄存器变量,需要小心
点赞  2012-6-4 10:48
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复