Chinaunix首页 | 论坛 | 博客
  • 博客访问: 399006
  • 博文数量: 138
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1620
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-10 16:55
个人简介

当你比别人优秀一点点,别人会嫉妒你。当你比别人优秀很多,别人会羡慕你。

文章分类

全部博文(138)

文章存档

2016年(2)

2015年(2)

2014年(15)

2013年(119)

我的朋友

分类: 嵌入式

2013-03-10 16:56:55

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:
+:
=:

这个主题还需要深入学习!!!










阅读(452) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~