C语言调用汇编语言 实现字符串拷贝
2012-11-13 19:57
537 查看
首先用两个文件:
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()。
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()。
相关文章推荐
- ARM汇编程序---C语言调用ARM汇编实现字符串的拷贝
- ARM汇编程序---C语言调用ARM汇编实现字符串的拷贝
- C语言 编写程序实现字符串拷贝,不允许调用strcpy函数。
- C语言调用汇编实现字符串对换
- 字符串拷贝的简单C语言实现
- 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆
- android j使用JNI实现ava语言调用C语言
- 【龙芯1c库】龙芯1c上c语言写的函数调用汇编语言写的函数
- C语言switch语句的汇编语言实现
- C语言 编写程序实现内存拷贝,不考虑内存重叠。不允许调用memcpy函数
- C语言中嵌入汇编语言实现简单的加法
- C语言switch语句的汇编语言实现
- 利用汇编语言实现串口的通讯(一)(BISO调用)
- C语言与汇编语言相互调用原理以及实例
- 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
- 用C语言和汇编语言实现将1个整数分解成几个素数的乘积
- 汇编语言实现在80*25彩色字符模式下显示字符串
- 为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
- 【c语言】 my_strcpy 实现字符串拷贝
- C语言 编写函数实现内存重叠拷贝,不允许调用memmove函数