ARM——arm彙編和c/c++的混合編程

1)爲何要混合編程?
例子:LInux內核中的一些代碼就包含有彙編和c代碼

2)彙編和c/c++混合編程的方式

3)C語言嵌入彙編

如在linux內核代碼中的asm volatile{ }彙編代碼,asm開頭表示該段代碼爲彙編

例子:C語言中嵌入arm彙編,實現一個copy函數

#include<stdio.h>

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語言調用匯編

例子: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

5)彙編調用C語言

例子:
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彙編常用操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章