之前每次看内联汇编都有一些地方看不明白,"=r","r","%0","%1"这些符号看不明白,本次总结一下这些内容吧,虽然很简单,但是手不能懒!
首先,C语言中为什么要内联汇编以及其带来的好处这个我就不说了。C语言中使用汇编要通过函数asm(),即__asm__()的别名,两者是一样的。
常见的内联汇编有下面两种形式:
asm(
"mov r0, r0\n\t"
"mov r0, r0\n\t"
"mov r0, r0\n\t"
"mov r0, r0"
);
例1
asm(
"mov %[result], %[value], ror #1"
: [result] "=r" (y)
: [value] "r" (x)
:
);
例2
第一种和一般汇编文件中的汇编程序是一样的,这里不多说了。着重看第二种,为什么要有第二种形式呢?这就和为什么要内联汇编有很大关系了,一般都是在一个C的函数中会使用内联汇编,汇编代码一般会与C函数的代码有数据交换,也就是