1
1
一、实验目的
2
2
二、实验内容
+2+...+N
(实现字符串拷贝功能)
(选做)
3
3
三、预备知识
1. ARM汇编、 C语言
2. RVDS工具
4
4
硬件:PC 机Pentium100 以上
软件:Windows操作系统,RVDS软件
5
5
五、实验原理
ARM中的C和汇编混合编程:
6
6
汇编语言中使用C定义的全局变量
在汇编和C之间进行一些数据的传递,最简便的办法就是使用全局变量。
在汇编中调用C中定义的全局变量,需要在汇编中IMPORT 对应的全局变量。
IMPORT 伪指令用于通知编译器要使用的标号或变量在其他的源文件中定义。
例如:,:
IMPORT a
7
7
汇编中调用C函数
要在汇编中调用C文件中定义的函数,主要做两方面的工作:
首先:需要在汇编中IMPORT 对应的C函数名。
其次:在调用该C函数之前还需要通过汇编语言传递该函数的
参数。
C和汇编之间的参数传递是通过ATPCS(ARM Thumb Procedure Call Standard)的规定来进行的。简单的说就是如果函数有不多于四个参数,对应的用ARM寄存器R0-R3来进行传递,多于4个时借助栈。函数的返回值通过R0来返回。
8
8
/*asmfile */
AREA asmfile, CODE, READONLY
IMPORT cFun
ENTRY
MOV R0, #22
MOV R1, #11
BL cFun
MOV R4,R0 (函数返回值保存在R0中)
END
/*C file, called by asmfile */
int cFun(int a,int b)
{
return a-b;
}
9
9
C中调用汇编函数
在C中调用汇编文件中的函数,要做的主要工作有两个:
一:是在C中声明函数原型,并加extern关键字;
二:是在汇编中用EXPORT导出函数名,并用该函数名作为汇
编代码段的标识,最后用mov pc,lr返回。然后,就可以
在C中使用该函数了。
EXPORT伪指令用于在程序中声明一个全局的标号,该标号可在其他的文件中引用。
10
/*C file*/
extern void fun (int *p); 声明函数原型
int main()
{int i;fun(&i);printf("%d\n", i);return 0;
}
/*ASMFILE*/
AREA asmfile, CODE, READONLY
EXPORT fun 导出函数名
fun
MOV R1,#1
STR R1,[R0]
MOV PC,LR 返回语句
END
C中调用汇编函数
uestc微机原理第一次实验 来自淘豆网www.taodocs.com转载请标明出处.