在从事嵌入式C语言的开发过程中为了提高效率经常会用到C语言的内联汇编。在对DSP程序做优化时,将部分C代码变为汇编指令可以大大提高程序效率。C语言简洁易读,容易组织规模较大的代码,而汇编效率高,gcc编译器提供了一种扩展语法可以在C代码中使用内联汇编(Inline Assembly)。其用__asm__来表示汇编指令。
__asm__其完整的内联格式为:asm(”汇编语句:(=r)输出:输入:寄存器集合”),其中r为限定符,=为输出指示,‘r’代表寄存器,‘m’代表 内存变量,‘f’为浮点寄存器,破坏描述符通知编译器我们使用了哪些寄存器或内存,由逗号隔开的字符串组成,如“%eax,%ebx”。然后一些内联汇编指令并不需要要这种完整的格式,比如最常用的__asm__(“nop”),它指CPU的一个机器周期内什么也不执行,主要用于汇编中跳转指令、乘法指令等指令后执行若干指令的延时。
下面举例说明内联汇编的使用:
#include<stdio.h>
int main()
{
int a=1,b=3;
__asm__(
"movl