Chinaunix首页 | 论坛 | 博客
  • 博客访问: 143105
  • 博文数量: 26
  • 博客积分: 413
  • 博客等级: 一等列兵
  • 技术积分: 255
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-18 01:29
文章分类

全部博文(26)

文章存档

2013年(15)

2012年(11)

我的朋友

分类: 嵌入式

2013-01-13 16:22:38

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) |
给主人留下些什么吧!~~