ARM
汇编语言与嵌入式
C
语言混合编程
————
内嵌汇编
在嵌入式程序设计中,有些场合(如对具体的硬件资源进行访问)必须用汇编语言来实
现,可以采用在嵌入式
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
(
“
指令;[指令;]
\
指令;[指令;]
\
… \
[
指令;
]”
);