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

时间:2023-03-09 16:23:54
汇编和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;

}