nba录像回放总决赛马刺:ARM汇编语言与嵌入式C语言混合编程――――内嵌汇编 - 火魔网

来源:百度文库 编辑:偶看新闻 时间:2024/05/05 17:48:47
当前位置: 火魔网 » 程序开发 » C/C++

ARM汇编语言与嵌入式C语言混合编程――――内嵌汇编

更新: 2011-03-22字体: 【大 中 小】点击: 18

在嵌入式程序设计中,有些场合(如对具体的硬件资源进行访问)必须用汇编语言来实现,可以采用在嵌入式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