首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >跳转到手臂上的裸功能

跳转到手臂上的裸功能
EN

Stack Overflow用户
提问于 2015-05-28 09:45:29
回答 2查看 713关注 0票数 0

这个问题很简单。

我的代码是:

代码语言:javascript
运行
复制
__attribute__ ((naked)) void function(int arg1, int arg2, int arg3)
{
   _asm("push {r0-r6}\n"
        "       .... ");
   if(checkSomeValue(arg3))
       callSomeFunction(arg1, arg2);       
}

asm代码与我所期望的一样:

代码语言:javascript
运行
复制
push {r0-r6}
....
instruction of if ~ callSomefunction

但是..。结果是:

代码语言:javascript
运行
复制
str r1, [sp+0x0c]
str r2, [sp+0x08]  // back up register for if~ callsomefunction statement
push {r0-r6}
...

如何将asm代码放在函数的开头?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-29 08:33:51

我的方式:

代码语言:javascript
运行
复制
__attribute__ ((naked)) void function(int arg1, int arg2, int arg3)
{
    _asm("push {r0-r6}\n"
         "bl calleeFunction\n"
         "pop {r0-r6}\n"
         "b backToOriginal\n"
    );
}

void calleeFunction(int arg1, int arg2, int arg3)
{
   if(checkSomeValue(arg3))
      callSomeFunction(arg1, arg2);      
}
票数 3
EN

Stack Overflow用户

发布于 2019-08-29 04:03:45

现代c没有义务按任何特定的顺序采取行动。

使用C11,指令

代码语言:javascript
运行
复制
atomic_signal_fence(memory_order_acq_rel);

用于对语句强制执行顺序。在非C11编译器中,使用其他特定于编译器的命令:

代码语言:javascript
运行
复制
gnu: __volatile__      
intel: __memory_barrier()
MS: ReadWriteBarrier()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30502936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档