天气: 大风
心情: 平静
在GNU-arm下,由于不可以在内嵌汇编中使用C的变量,给内嵌汇编的使用带来了一定的局限性,我们可以通过构造函数的方式,利用C语言的传参特性,将我们需要的地址、数据(这里面指的是变量,如果是常
量的话就没有必要这么麻烦了)传递给内嵌汇编的代码,内嵌汇编通过访问响应的寄存器内容即可。
下面给出一个C语言嵌入汇编程序来实现字符串拷贝的操作。
/*ini.s*/
.global _start
.extern Main
.text
_start:
LDR R0,=Main
BX R0
Stop:
B Stop
.end
/*main.c*/
#include<string.h>
#include<stdio.h>
void Asm_cpy(char* ,char* );
void Main()
{
int size;
char *dst_str;
char *src_str="Good morning,DaLian\0";
size = strlen(src_str)+1;
dst_str=(char*) malloc(size);
Asm_cpy(src_str,dst_str);
while(1);
}
void Asm_cpy(char* src,char* dst)
{
__asm (
"asm_l:\
LDRB R2,[R0],#1;\
STRB R2,[R1],#1;\
TEQ R2,#0;\
BNE asm_l;"
);
}