c/c++语言开发共享在C中使用ASM命令

关于在c中使用ASM,我有一个小问题。 我想执行指令:

LDR PC,=0x123456 

这给了我错误“操作数中的意外令牌”。

 asm("LDR PC,=0x123456"); 

这给出了“无效约束”。

 asm("LDR PC," : "m" (0x123456)); 

这样做的正确方法是什么?

    你正在使用这个:

     asm("LDR PC,=0x123456"); 

    这不是标准的ARM汇编指令,而是作为编译器扩展提供的伪指令。 编译时,此伪指令将转换为其他汇编指令。 看来clang不支持这个编译器扩展(参见这个主题 )。 您应该自己转换为汇编指令,请参阅ARM文档以了解LDR伪指令的转换方式。

    您可以在普通C中实现您想要的效果:

     ((void (*)(void))0x123456)(); 

    或者如果你更喜欢更详细:

     typedef void FN(void); ((FN*)0x123456)(); 

    我同意@Étienne。 我尝试使用mi Google工具链进行编码。 它工作正常。

    我想你应该阅读手册如何将编译器的指令更改为指令(通常是两个mov指令)。

      以上就是c/c++开发分享在C中使用ASM命令相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/550127.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐