嵌入式之家

 找回密码
 现在注册

QQ登录

只需一步,快速开始

搜索
热搜: ARM cortex
查看: 6191|回复: 1

汇编和C的接口

[复制链接]

该用户从未签到

55

主题

168

帖子

1767

积分

金牌会员

Rank: 6Rank: 6

积分
1767
发表于 2016-4-19 09:20:07 | 显示全部楼层 |阅读模式
      在多种情况下,汇编代码和C程序可以混合使用,例如:
      * 在C程序代码中使用嵌入汇编时(或GNU工具链的内联汇编)。
      * 当C程序代码调用单独文件中用汇编实现的函数或子例程时。
      * 当汇编程序调用C函数或子例程时。
      在这些情况下,有一点非常重要,也就是要理解参数或返回值是如何在调用程序和被调用函数间传递的。这些交互机制由《ARM架构过程调用标准》指定。
      对于简单的情况,当调用程序需要将参数传递给子例程或函数时,它会使用寄存器R0~R3,其中R0为第一个参数,R1为第二个等等。类似的,R0用于函数结束时的返回值,R0~R3和R12可以被函数或子例程修改,而R4~R11的内容在进入函数时则需要恢复到之前的状态,它们可以由栈的PUSH和POP处理。
    如果一个C函数被汇编代码调用,需要考虑R0~R3和R12寄存器内容被修改的可能性。若之后还要使用这些寄存器的内容,它们就需要被保存在栈中,待C函数完成后再进行恢复。由于这些代码实例调用汇编函数或子例程时,大多只会影响小部分寄存器,或者在结束时会恢复寄存器内容,因此无需对寄存器R0~R3和R12进行保存。
   
回复

使用道具 举报

  • TA的每日心情
    开心
    2020-6-18 22:00
  • 签到天数: 1 天

    [LV.1]初来乍到

    101

    主题

    192

    帖子

    1645

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    1645
    发表于 2016-5-6 23:13:54 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 现在注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|嵌入式之家 ( 京ICP备14038168号-1 )

    GMT+8, 2025-5-1 16:22 , Processed in 0.023683 second(s), 26 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表