首先用两个文件:
1、创建c.c这个文件,里面内容为:
#include <stdio.h>
/*声明汇编语言中的代码段*/
extern void strcopy(const char *s,char *d);
int main(int argc,char **argv){
const char *source = "hello,world";/*存放源字符串,注意字符串末尾会自动加上\0*/
char des[20];/*存放目的字符串*/
strcopy(source,des);/*第一个参数为源地址,第二个参数为目的地址*/
printf("des is %s\n",des);/*输出拷贝字符串内容*/
}
2、创建asm.s这个文件,内容为:
AREA strCopy,CODE,READONLY
EXPORT strcopy ;声明外部可以使用
CODE32
strcopy
LDRB R2,[R0],#1 ;R0中保存的是源地址,取出内容(一个字节)后自动加1
STRB R2,[R1],#1 ;将取出来的内容放入目的地址,目的地址然后自动加1
CMP R2,#0; ;判断是否取到字符串末尾
BNE strcopy ;没到末尾则继续拷贝
MOV PC,LR ;拷贝成功则返回
END
最后,编译运行就能得到其结果。
注意:在asm.s这个文件当中不能加入ENTRY这个入口,否则就有两个程序入口了,另一个位main()。