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

    文章

    3903

    浏览量

    61310
  • 编译器
    +关注

    关注

    1

    文章

    1577

    浏览量

    48625
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    请问cubesuite+ 如何写延时函数

    如题。是新建一个。c文件延时然后再调用到主函数中?
    发表于 08-06 20:35

    汇编调用c函数为什么需要设置栈

    ,之前的pc值存在lr中),在子程序执行完毕后,再把栈中的lr值pop出来,赋值给pc,这样就实现了子函数的正确的返回。 2. 传递参数 C语言函数调用时,会传给被
    发表于 07-31 11:11

    汇编调用c函数中的子函数不能成功点灯

    老师,请教一个汇编调用函数到问题。我定义来两个文件led.c(led_on 点灯, led_off 熄灯), test.c文件 (
    发表于 03-04 04:23

    为什么汇编调用C函数一旦调用了其他函数就会重启?

    一个标题是在是难以说明所遇问题。(其实我这个问题是在调试一个中断程序出现的,然后进行分解,研究,最后确定中断重启有可能就是此贴问题。)我现在用汇编写代码,然后调用C语言函数,但是如果这
    发表于 08-01 05:45

    如何写带大缓冲区和内部中断的uart函数

    字节而不是128字节。有时也丢失了字节。在PSoC Creator好的例子中,没有使用大缓冲区的UART。请你帮助我,告诉你如何写这个函数。AuthyScB.Cyrkk.Access 02.Zip1.1兆字节
    发表于 10-14 10:32

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

    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

    Linux汇编与C互相调用

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

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

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

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

    来看下混合语言工程中,就比如在汇编程序中调用C函数,或者在C语言代码中调用汇编函数需要注意什么,稍不留意结果就可能是无法预测的。比如程序在一
    的头像 发表于 11-12 11:04 2519次阅读

    汇编调用C函数

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