在嵌入式程序设计中,有些场合(如对具体的硬件资源进行访问)必须用汇编语言来实现,可以采用在嵌入式C语言程序中嵌入汇编语言或嵌入式C语言调用汇编语言来实现。
内嵌汇编
内嵌的汇编指令与通常的ARM指令有所区别,是在嵌入式C程序中嵌入一段汇编代码,这段汇编代码在形式上表现为独立定义的函数体,遵循过程调用标准。
1.语法格式
在嵌入式C程序中内嵌汇编使用关键字“__asm”。在ARM开发工具编译环境下与GNU ARM编译环境下的内嵌汇编在格式上略有差别。
(1)ARM开发工具编译环境下内嵌汇编语法格式
在ARM开发工具编译环境下的内嵌汇编语言程序段,可以直接引用C语言中的变量定义。具本的语法格式如下:
__asm
指令;[指令]
指令;[指令] //注释
…
[指令]
示例:
/* main.c */
void __main(void)
int var=0xAA;
__asm //内嵌汇编标识
{
MOV R1,var
CMP R1,#0xAA
}
while(1);
}
(2)GNU ARM环境下内嵌汇编语法格式
在GNU ARM编译环境下内嵌汇编语言程序段,不能直接引用C语言中的变量定义。如果有多条汇编指令需要嵌入,则可用“\”将它们归为一条语句。具本的语法格式如下:
__asm
(
“指令;[指令;]\
指令;[指令;]\
… \
[指令;]”
);
示例:
/* main.c */
void __main(void)
int var=0xAA;
__asm
(
" MOV R5,#0xAA;\ /*注意:这里不要直接使用C代码中提供的变量*/
MOV R6,#0xBB;\
CMP R1,#0;"
);
while(1);
}
本文出自:
邱铁 编著. ARM嵌入式系统结构与编程. 清华大学出版社. 2009.3