C语言中调用汇编函数
汇编文件:
.text.code 32
/* 1.汇编子函数声明为全局的标号 .global mystrcopy */
.global mystrcopymystrcopy:
ldrb r2,[r1],#1
strb r2,[r0],#1
cmp r2, #0
bne mystrcopy
bx lr
C文件:
/* 2.C 程序要调用汇编函数,要声明该函数的原型(extern)*/
r0 r1
int main(void){
char buf[256];
mystrcopy(buf, “ABCD”);
}
===========================================
汇编调用C子函数:
C文件:
int add(int a, int b, int c,int d){/* 1.C程序中函数要是全局的(不加static修饰) */
return (a+b+c+d);
}
汇编文件:
.extern add /* 2.汇编中声明为外部的 */
mov r0, #1
mov r1, #2
mov r2, #3
mov r3, #4
bl add /* 3.按照汇编的方式调用 */
cmp r0,#0
==========================================
C中使用汇编的常量或变量:
汇编文件:
.data.global val /* 1.汇编中将变量声明为全局的 */
val:
.word 0x100
C文件:
extern int val; /* 2.C 程序中声明成外部标号 */
==========================================汇编中使用C的变量:
C文件:
int a; /* 1.C中变量声明为全局的 */
汇编文件:.extern a /* 2.汇编中声明外部 */
ldr r0, =a /* 3.汇编中如何使用 */
ldr r1,[r0]
==========================================