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汇编常用操作

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值