51 C语言与汇编语言混编

本文介绍了如何在51单片机的C程序中内嵌汇编语句,以及C程序如何调用汇编函数和汇编如何调用C函数。通过示例详细展示了不同情况下的代码实现,包括通过寄存器传递参数的混合调用。这种方法虽然存储空间效率较低,但在特定场景下仍具有实用性。
摘要由CSDN通过智能技术生成

1.在C中内嵌汇编语句

   在#pragma asm 与#pragma endasm 中加入要内嵌的汇编语句

例子:

 

   #include <reg52.h>

   void main()

  {

     P0^1=1;

    #pragma asm

    汇编延时程序

    #pragma endasm

     P0^1=0;

}

 

2.C程序调用汇编

 (1)C文件格式

    C程序调用汇编函数之前必须先用extern对函数加以声明

       例子:

     #include<reg51.h>

    extern void DLY1s();

    void main()

    {

       P2=0xff;

       DLY1s(); 

       P2=0;

    }

   (2)汇编文件格式

       用NAME定义模块名,PUBLIC声明为公共函数,RESG为汇编函数起始标志

例子1:

;;************************************
    ;Delay time 1s
;;************************************
      NA

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言汇编语言混合编程时,我们可以使用C语言调用汇编语言编写的函数或者在汇编语言中调用C语言编写的函数。这种混合编程可以提高程序的效率和性能,因为汇编语言可以更加细致地控制计算机硬件资源。 下面是一个简单的示例,展示如何在C语言中调用汇编语言编写的函数: ```c #include <stdio.h> // 声明汇编语言编写的函数 extern int asmAdd(int a, int b); int main() { int a = 10, b = 20; int sum = asmAdd(a, b); printf("Sum of %d and %d is %d\n", a, b, sum); return 0; } ``` 上面的程序中,我们声明了一个汇编语言编写的函数`asmAdd`,并在C语言的`main`函数中调用该函数。下面是这个汇编语言函数的实现: ```assembly // 汇编语言实现的函数 asmAdd section .text global asmAdd asmAdd: ; 汇编语言实现的函数体 add eax, edx ret ``` 注意,在汇编语言中,我们需要使用`global`关键字来标识需要被C语言调用的函数。在上面的示例中,我们将`asmAdd`函数标识为全局函数,以便在C语言中调用。 在C语言中调用汇编语言编写的函数时,需要注意传递参数和返回值的方式。在上面的示例中,我们将两个整数作为参数传递给了`asmAdd`函数,并将返回值作为整数类型返回。在汇编语言中,参数和返回值通常使用寄存器来传递和保存。在上面的示例中,我们使用`eax`和`edx`寄存器来保存参数,并将结果存储在`eax`寄存器中返回给C语言。 总之,C语言汇编语言混合编程可以提高程序的效率和性能,但是需要注意参数和返回值的传递方式,并且需要掌握一定的汇编语言编程技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值