0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何写要被C调用的汇编函数

麦辣鸡腿堡 来源:Microchip微芯 作者:Microchip微芯 2023-01-22 14:54 次阅读

问:我该怎么写一个将被C调用的汇编函数?

答:一个最简单的学习怎么写汇编的方式是,先用C写这个代码的简单版本,然后用编译器将它编译成为汇编代码。然后你就可以用这个输出的汇编代码作为你自己汇编函数的模板。例如:

你说你想写一个带有“long”类型参数的汇编子程序,那么首先用C写一个函数:

void MyAsmFunc(unsigned long parameter)
{
}

好了,现在编译它产生汇编代码。PICC编译器的-S选项可以。

picc -16f877 -S file.c

这个命令将产生"file.as",打开它,它看起来像下面这样:


; param _parameter assigned to ?_MyAsmFunc+0
_MyAsmFunc$parameter set ?_MyAsmFunc+0
psect text1,local,class=CODE,delta=2
global _MyAsmFunc
signat _MyAsmFunc,4216
psect text1
_MyAsmFunc
bcf 3,6
bcf 3,5
return


因为PICC编译器会让函数的bank回零。所以我们在这里看到它在return之前把bank回到bank0。从这个汇编代码开始,你可以扩充你的汇编代码。函数的参数可以使用_MyAsmFunc$paramter符号来访问。这个符号访问的是第一个字节,其余的字节就在符号上加偏移量,例如:

_MyAsmFunc$parameter+2

这将引用第三个字节。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4345

    浏览量

    62953
  • 编译器
    +关注

    关注

    1

    文章

    1642

    浏览量

    49273
收藏 人收藏

    评论

    相关推荐

    汇编C语言中的定义和调用

    单片机开发或多或少都会接触一些汇编代码,今天就来说说关于汇编C中的定义和调用,以及举例说明嵌套汇编代码。
    发表于 08-29 14:07 1477次阅读

    汇编语言模块调用C++函数实例

    现在编写一个简单的应用程序,提示用户输入整数,通过移位的方式将其与 2 的幕 (2¹〜2ⁿ) 相乘,并用填充前导空格的形式再次显示每个乘积。输入-输出使用 C++。汇编模块将调用 3 个 C
    发表于 10-11 09:52 965次阅读

    C函数调用机制与栈帧原理详解

    当一个C函数调用时,函数的参数如何传递、堆栈指针如何变化、栈帧是如何被建立以及如何被消除的,一直缺乏系统性的理解,因此决定花时间学习下函数
    发表于 06-08 10:49 1457次阅读
    <b class='flag-5'>C</b><b class='flag-5'>函数</b><b class='flag-5'>调用</b>机制与栈帧原理详解

    如何使用内联函数调用汇编函数

    C/C++中调用汇编代码中的函数使用内联函数调用汇编函数
    发表于 04-02 06:57

    C汇编是怎样进行函数调用的?

    C汇编是怎样进行函数调用的?分为哪几种情况?
    发表于 04-27 07:00

    如何写一个简易的printf函数

    如何写一个简易的printf函数
    发表于 04-28 06:47

    汇编调用C1、用c编写函数

    汇编调用C1、用c编写函数 int jc(int n),其功能是返回n!,保存为1c.c,编写
    发表于 12-20 07:59

    C++教程之函数的递归调用

    C++教程之函数的递归调用 在执行函数 f 的过程中,又要调用 f 函数本身,称为
    发表于 05-15 18:00 35次下载

    如何在c51程序中调用汇编函数

    一个整型变量。例中,先用c51写出这个函数的主体,然后用SRC控制指令编译产生asm文件,进一步修改这个asm文件就得到我们所要的汇编函数。该方法让编译器自动完成各种段的安排,提高了
    发表于 11-02 15:57 4285次阅读

    Linux汇编C互相调用

      一. 概述  汇编通过call指令调用C函数,call指令主要有两个功能:1.将下一条指令的地址保存在栈顶;2.设置eip指向被
    发表于 04-02 14:46 441次阅读

    C汇编如何互相调用

    一、gcc 内联汇编 内联汇编即在C中直接使用汇编语句进行编程,使程序可以在C程序中实现C语言不
    的头像 发表于 12-25 15:50 3056次阅读

    EE-128:C++中的DSP:从C++调用汇编类成员函数

    EE-128:C++中的DSP:从C++调用汇编类成员函数
    发表于 04-16 17:04 2次下载
    EE-128:<b class='flag-5'>C</b>++中的DSP:从<b class='flag-5'>C</b>++<b class='flag-5'>调用汇编</b>类成员<b class='flag-5'>函数</b>

    C语言代码中调用汇编函数需要注意什么

    来看下混合语言工程中,就比如在汇编程序中调用C函数,或者在C语言代码中调用汇编
    的头像 发表于 11-12 11:04 2878次阅读

    汇编调用C函数

    大多数情况下,可能只需要一到两个简单的汇编函数,所以就想将这些汇编代码嵌入C代码的文件中。多数开发工具都有一种被称作内联汇编的特性,而ARM
    发表于 08-05 10:07 4649次阅读

    EE-128:C语言中的DSP:从C调用汇编类成员函数

    电子发烧友网站提供《EE-128:C语言中的DSP:从C调用汇编类成员函数.pdf》资料免费下载
    发表于 01-07 13:48 0次下载
    EE-128:<b class='flag-5'>C</b>语言中的DSP:从<b class='flag-5'>C</b><b class='flag-5'>调用汇编</b>类成员<b class='flag-5'>函数</b>