汇编和C/C++的混合编程方式

常用的有三种方式:

在C/C++代码中嵌入汇编指令

汇编调用C/C++

C/C++中调用汇编

实例一:

在C中嵌入汇编:

void string_copy(char *dst,const char *str)

{

  char ch;

  __asm

  {

    loop

      LDRB  ch,[str],#1

      STRB  ch,[dst],#1

      CMP    ch,#0

      BNE loop 

  }

}

int main()

{

  char *a="hello world!"

  char b[64];

  string_copy(a,b);

  return 0;

}

实例2:在C语言中调用汇编

C语言中调用汇编步骤:

1、汇编export

2、C语言定义 extern function

3、C语言使用

c语言和汇编语言之间的参数传递是通过对应的用R0-R3来进行的,即R0传递第一个参数,R1传递第二个参数,多余4个时借助于栈完成。函数的返回值通过R0来传递。这个规定叫做ATCPS(ARM Thumb Procedure Call Standard)

myArm.s

  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

myMain.c

extern void my_strcopy(char *dtr,char*str);

int main()

{

  char *a="hello world!"

  char b[64];

  my_strcopy(a,b);

  return 0;

}

 实例3:汇编调用C语言

这个用的最多

汇编中使用C语言步骤:

c语言实现函数

汇编import函数名

BL函数名

myArm.s

  AREA  myARM,CODE ,READONLY

  IMPORT c_fun

  ENTRY

start

  mov R0,#1

  mov R1,#2

  mov R2,#3

  BL  c_fun

  end

myMain.c

int c_fun(int a,int b,int c)//从汇编中调到这里,此时a=1,b=2,c=3

{

  return a+b+c;//从这里再返回去,此时R0=6;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值