伪操作看得懂就行,其他的有要编程的要求 重点为 .LDR C/汇编混合编程 ATPCS

image.png

ATPCS

ARM-Thumb过程调用规范
PPT第四章P36可见例子。把例子背一下罢。

寄存器使用规则

  • R0-R3:用于传参,R0用于返回值
  • R4-R11:通用变量寄存器
    • R9:静态基址寄存器SB
    • R10:数据栈限制指针SL
    • R11:帧指针FP
  • R12:用作过程调用中间临时过渡寄存器IP
  • R13:堆栈指针
  • R14:连接寄存器LR
  • R15:PC

    数据栈的使用规则

    ATPCS规定数据栈为FD类型。并对数据栈的操作是8字节对齐的。

    参数的传递规则

    C和汇编混合编程

    在C中调用汇编函数

    C文件中

    C中声明函数原型,并加extern关键字。
    image.png

    汇编文件中

  1. 在汇编中开头用EXPORT(伪指令用.global)导出函数名,并用该函数名作为汇编代码段的标识
  2. 末尾用mov pc, lr 返回
  3. 就可以在C中使用该函数了。

image.png

在汇编中调用C函数

  1. 使用.extern声明C函数
  2. 将当前lr保存到sp中(需要减4)
  3. 将参数放入指定寄存器
  4. 使用bl指令跳转到声明的C函数中
  5. 随后将sp里的lr装进pc,sp需要加4(返回main函数)

image.png