Assembly 使用TI code composer studio的C代码内联汇编(用于ARM)

Assembly 使用TI code composer studio的C代码内联汇编(用于ARM),assembly,arm,code-composer,Assembly,Arm,Code Composer,有人能告诉我如何使用TI code composer studio(用于ARM)在C代码中执行内联汇编代码吗 我找了又试,但什么也没用 例如,当我尝试以下非常简单的代码时: asm("push r0\n"); 还是这个 __asm("push r0\n"); 我总是得到: [E0002]指定助记符的非法推送r0 1个程序集错误,没有程序集警告 我读到一些东西说我以前的代码是GCC风格的,TI编译器不接受它!。那么我如何执行自己的内联汇编代码呢?我不知道ARM代码生成器工作室。但我知道一个TI

有人能告诉我如何使用TI code composer studio(用于ARM)在C代码中执行内联汇编代码吗

我找了又试,但什么也没用

例如,当我尝试以下非常简单的代码时:

asm("push r0\n");
还是这个

__asm("push r0\n");
我总是得到:

[E0002]指定助记符的非法推送r0

1个程序集错误,没有程序集警告


我读到一些东西说我以前的代码是GCC风格的,TI编译器不接受它!。那么我如何执行自己的内联汇编代码呢?

我不知道ARM代码生成器工作室。但我知道一个TI Code Composer工作室,如果这是真的,我可以给你一些提示。使用asm volatile(“…”)可能会有所帮助。但是使用这种方法,你不能访问C变量。使用所谓的内在函数/方法要好得多,这些函数将C链接到汇编程序。以下是TI文件的链接:第7.5.4节。下面是我得到这个想法的链接:

我终于找到了解决方案

主要问题将通过在组装说明之前添加空格或制表符来解决,如下所示:

asm(" MOVS R0, #5\n");
这行不通:

asm("MOVS R0, #5\n");
在push中,我们必须将寄存器放在大括号中{R0}

asm(" PUSH {R0}\n");

希望能有所帮助。

我真的是指TI ccs(我编辑了名称)。不幸的是,volatile方法不起作用,我仍然得到同样的错误。我会读你寄给我的,告诉你我得到了什么。谢谢。也许这就像写大写PUSH和使用{}作为寄存器列表一样简单。但这只是猜测
asm(“PUSH{r0}\n”)
我真的应该读一下你的最后一句话TI编译器应该知道ARM mneomonics,但如果不知道,则PUSH是
STMDB sp!的别名!,reglist
正如您在这里看到的(“PUSH{r0}\n”)不起作用:(.我正在阅读您发送给我的链接(它们有点复杂,但我正在尝试)。链接的文档是他们的DSP编译器,而非arminline程序集是非常特定于编译器的,因此不期望内联程序集将从一个编译器版本或品牌移植到另一个编译器版本或品牌。即(空间)这很奇怪,但没关系,从中吸取了教训。感谢您告诉我们您的解决方案。这需要空间,以便汇编程序不会将指令解释为标签。与普通汇编文件相同。