内联汇编的使用原理:
在内嵌汇编中,可以将C语言变量指定为汇编指令的操作数,而且不用去管如何将C语言变量的值读入哪个寄存器,以及如何将计算结果写回C变量,你只要告诉程序中C语言变量与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作。
使用内嵌汇编,要先编写汇编指令模板,然后将C语言变量与指令的操作数相关联,并告诉GCC对这些操作有哪些限制条件
int add_func2(int a, int b, int c, int d)
{
int val;
asm volatile (
"add r0, r0, r1\n\t"
"add r0, r0, r2\n\t"
"add r0, r0, r3\n\t"
:"=r"(val)
:"r"(a),"r"(b),"r"(c),"r"(d)
:"memory"
);
1.
"r" 用寄存器来保存参数
"i" 是立即数
"m" 一个有效的内存地址
"x" 只能做输入
+ : 表示参数的可读可写
无: 表示参数只读
= : 表示只写
& : 只能做输出
2.
%0 输出列表和输入列表的第1个成员
%1 输出列表和输入列表的第2个成员
%2 输出列表和输入列表的第3个成员
... 依次类推
3. 冒号部分可以省略,要省略全部省略,否则全部写上