汇编与C融合编程

----->汇编程序和C程序混合调用(精要总结)

1.C语言中如何调用汇编语言实现的函数

2.C语言中如何使用汇编语言定义的变量

3.汇编语言中如何调用C语言的函数

4.汇编语言中如何调用C语言定义的变量

1.C语言中如何调用汇编语言实现的函数

  比较两个字符串是否相等的函数my_strcmp

  .text

.code 32

  .global  my_strcmp

my_strcmp:

  ldrb  r2,[r1],#1  @r1是“ledon”首地址

  ldrb  r3,[r0],#1  @r0是buf的首地址

  cmp  r2,#0

  beq  cmd_end

...

cmp_end:

  sub   r0, r2,r3

  bx  lr

 

extern  void  my_strcmp(char *d, const  char *s);

 

main.c

  int  main(void)  

  {

char  buf[256];

     uart0_gets(buf);

     my_strcmp(buf, “ledon”);

                 r0     r1   (默认从r0,r1,r2开始)

     如果成功,调用ledon命令的处理函数

}

1.汇编函数的名字声明为全局标号.global  my_strcmp

2.C程序中如要调用这个汇编函数,需要声明该函数的函数原型(与调用普通函数相同)

extern  void  my_strcmp(char *d, const  char *s);

                              r0              r1

3.按照C语言的方式调用该函数

 

2.C语言中如何使用汇编语言定义的变量

  .data

  .global  yy

yy:

.word  0x100

  1.汇编中将该变量声明为全局变量

  2.在C语言中声明该变量为外部变量

extern  int  yy;

  3.按照C的方式使用该变量

 

3.汇编语言中如何调用C语言的函数

  int  add(int  a, int  b, int  c, int  d)

  {

return  (a+b+c+d);

}

 

  1.C程序中该函数定义为全局,不能加static

  2.汇编程序中将该函数声明为外部标号

     .extern   add

  3.按照汇编的方式调用

mov   r0,  #1    ->a

mov   r1,  #2    ->b

mov   r2,  #3    ->c

mov   r3,  #4    ->d

bl     add        

cmp   r0,  #0

关键是:参数传递的规则

int  add(int  a, int  b, int  c, int  d)

          r0      r1      r2   r3

 

4.汇编语言中如何调用C语言定义的变量

  int  a;

  1.C中变量声明为全局

  2.汇编程序中声明该变量为外部变量

.extern  a

  3.按照汇编方式使用

ldr  r0, =a

ldr  r1, [r0]

 

小结:

被调用方:

  将被调用的函数或者变量都要定义为全局的

调用方:

  声明被调用的函数的函数原型或变量都要为外部标号

 

C程序调用汇编函数

将用汇编实现的字符串比较函数替换掉用C实现的字符串比较函数

1.汇编函数(字符串比较函数)定义为全局标号

2.在C程序中将该汇编函数声明函数原型extern

3.替换C的字符串比较函数,用汇编函数


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值