ARM——arm汇编和c/c++的混合编程

1)为何要混合编程?
例子:LInux内核中的一些代码就包含有汇编和c代码
ARM——arm汇编和c/c++的混合编程_第1张图片
ARM——arm汇编和c/c++的混合编程_第2张图片

2)汇编和c/c++混合编程的方式
ARM——arm汇编和c/c++的混合编程_第3张图片
3)C语言嵌入汇编
ARM——arm汇编和c/c++的混合编程_第4张图片
如在linux内核代码中的asm volatile{ }汇编代码,asm开头表示该段代码为汇编
ARM——arm汇编和c/c++的混合编程_第5张图片
例子:C语言中嵌入arm汇编,实现一个copy函数

#include

void my_strcopy(char *src,char *dest)
{
        char ch;
        __asm{//汇编
        loop:
                LDRB ch,[src],#1
                STRB ch,[dest],#1
                CMP ch,#0
                BNE loop
                }
}

int main()
{
        char *src ="hello arm";
        char dest[64];
        my_strcopy(src,dest);
        printf("%s\n",dest);
        return 0;
}

4)C语言调用汇编
ARM——arm汇编和c/c++的混合编程_第6张图片
例子:C语言代码中调用汇编代码
Mymain.c文件代码

extern void my_strcopy(char *src,char *dest);

int main()
{
        char *s ="hello arm";
        char d[64];
        my_strcopy(s,d);
}

MyArm.c文件代码

AREA myARM,CODE,READONLY
        EXPORT my_strcopy

my_strcopy
loop
        LDRB R4,[R0],#1
        CMP R4,#0
        BEQ     over
        STRB R4,[R1],#1
        B loop
over
        END

ARM——arm汇编和c/c++的混合编程_第7张图片

5)汇编调用C语言
ARM——arm汇编和c/c++的混合编程_第8张图片
例子:
MyArm.c文件代码

int cFun(int a,int b,int c)
{
    return a+b+c;
}

Mymain.c文件代码

AREA myARM,CODE,READONLY
        IMPORT cFun
    ENTRY
START
    MOV R0,#1 //给函数cFun的a传值
    MOV R1,#2 //给给函数cFun的b传值
    MOV R2,#3 //给给函数cFun的c传值
    BL cFun
    MOV R4,R0
    
    END

6汇编常用操作
ARM——arm汇编和c/c++的混合编程_第9张图片

你可能感兴趣的:(ARM嵌入式开发)