zxj123

zxj123

0个粉丝

92

问答

0

专栏

0

资料

zxj123  发布于  2012-12-24 15:22:42
采纳率 0%
92个问答
3204

汇编语言与C/C++的混合编程(ARM)

 
在应用系统的程序设计中,若所有的编程任务均用汇编语言来完成,其工作量是可想而知的,同时,不利于系统升级或应用软件移植,事实上,ARM体系结构支持C/C+以及与汇编语言的混合编程,在一个完整的程序设计的中,除了初始化部分用汇编语言完成以外,其主要的编程任务一般都用C/C++ 完成。

汇编语言与C/C++的混合编程通常有以下几种方式:

-    在C/C++代码中嵌入汇编指令。

-    在汇编程序和C/C++的程序之间进行变量的互访。

-    汇编程序、C/C++程序间的相互调用。

       在以上的几种混合编程技术中,必须遵守一定的调用规则,如物理寄存器的使用、参数的传递等,这对于初学者来说,无疑显得过于烦琐。在实际的编程应用中,使用较多的方式是:程序的初始化部分用汇编语言完成,然后用C/C++完成主要的编程任务,程序在执行时首先完成初始化过程,然后跳转到C/C++程序代码中,汇编程序和C/C++程序之间一般没有参数的传递,也没有频繁的相互调用,因此,整个程序的结构显得相对简单,容易理解。以下是一个这种结构程序的基本示例,该程序基于第五、六章所描述的硬件平台:

;*************************************************************************

; Institute of Automation, Chinese Academy of Sciences

;File Name:         Init.s

;Description:

;Author:            JuGuang,Lee

;Date:

;************************************************************************

IMPORT Main                     ;通知编译器该标号为一个外部标号

AREA    Init,CODE,READONLY       ;定义一个代码段

ENTRY                           ;定义程序的入口点

LDR R0,=0x3FF0000               ;初始化系统配置寄存器,具体内容可参考第五、六章

LDR R1,=0xE7FFFF80

STR R1,[R0]

LDR SP,=0x3FE1000               ;初始化用户堆栈,具体内容可参考第五、六章

BL  Main                        ;跳转到Main()函数处的C/C++代码执行

END                             ;标识汇编程序的结束

       以上的程序段完成一些简单的初始化,然后跳转到Main()函数所标识的C/C++代码处执行主要的任务,此处的Main仅为一个标号,也可使用其他名称,与C语言程序中的main()函数没有关系。

/*******************************************************************************

* Institute of Automation, Chinese Academy of Sciences

* File Name:        main.c

* Description:     P0,P1 LED flash.

* Author:           JuGuang,Lee

* Date:     

******************************************************************************/

void Main(void)

{

int i;

*((volatile unsigned long *) 0x3ff5000) = 0x0000000f;

while(1)

{

*((volatile unsigned long *) 0x3ff5008) = 0x00000001;

  for(i=0; i<0x7fFFF; i++);

      *((volatile unsigned long *) 0x3ff5008) = 0x00000002;

  for(i=0; i<0x7FFFF; i++);

  }

}
我来回答
回答0个
时间排序
认可量排序
易百纳技术社区暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区