http://www.ethernut.de/en/documents/arm-inline-asm.html这个是官方文档,另外杜春雷的书上有部分介绍。
************************************************************************************************
下面是自己总结:
asm(code : output operand list : input operand list : clobber list);
整体格式介绍: 所有部分都可以为空。如果内容为空,本部分可以省略,冒号也可以省略。但是如果是中间一个部分是空的,后面有非空的部分。那么中间部分的冒号不能省略:
(code: : input list); 这里,中间的output是中间的,不能省略冒号,最后的clobber list 可以省略,冒号也可以省略。
************************************************************************************************
分部分介绍:
-----------------------------------------------------------------------------------------------------------
code部分:
code部分用双引号引起来。多条指令可以使用\n分开,也可以用\n\t
-----------------------------------------------------------------------------------------------------------
输出部分和输入部分:
格式是一样的,是一个列表,列表的成员之间用逗号隔开。
每个成员的格式如下:
[汇编中的符号]“符号的约束条件”(C语言中的符号)
在汇编代码中使用格式如下: %[汇编中的符号]
-----------------------------------------------------------------------------------------------------------
有这么几点需要注意吧:
1)在汇编部分,不可以定义变量,也就是说,所有操作的变量必须是C代码中定义好的。
2)汇编代码和C代码使用 分开的符号表,也就意味着,我们必须保证汇编中的符号和C中的符号可以重名。
************************************************************************************************
向前兼容:
以前的,gcc, 3.1以前。使用另外一种格式:
asm("mov %0, %1, ror #1" : "=r" (result) : "r" (value));
这个时候,使用%0 %1 %2 这个数字来意义对应输入输出参数,这里这个编号,应该是输入输出参数,统一编号。
************************************************************************************************
看看最后一个部分,clobber list:
这个部分有这么几个修饰:
r:
+:
=:
这个主题还需要深入学习!!!
阅读(2192) | 评论(0) | 转发(1) |