嵌入式||ARM硬件启动程序||C和汇编混合编程

嵌入式5.1.2课前提问

1,基于ARM的硬件启动程序主要包括哪些工作?

分配中断向量表;初始化存储器系统;初始化各工作模式下的堆栈;初始化有特殊要求的硬件模块;初始化用户程序的执行环境;切换处理器的工作模式;调用主应用程序。

2,C程序和ARM汇编程序之间相互调用时必须遵守什么规则?

AAPCS规则

3,该规则规定堆栈使用什么类型的堆栈?

满递减堆栈

4,规定,当参数不多于4个时,通过什么寄存器传递?多于4个时,使用什么传递参数?

参数不超过4个时,可以使用寄存器R0~R3来进行参数传递

多于四个堆栈传递

5,子程序的返回结果如何返回?

在这里插入图片描述

6,汇编程序调用C程序的方法为?

1.C语言调用汇编

程序的入口是main,在main里调用汇编的函数。

在C语言中,要extern 一个函数声明即可,然后这个函数在汇编里面实现。

在汇编里面,用EXPORT 把C语言定义的函数名引进来,再开始编写函数名开始的段


```c
#include<stdio.h>
extern int sum(int a,int b,int c,int d,int e,int f);
int main(){
    int result = sum(1,2,3,4,5,6);  
    return 0; 
}

汇编代码可新建一个sum.asm文件,在工程中添加这个文件即可


    AREA    EXAMPLE,CODE,READONLY
        EXPORT    sum
        ENTRY
        
sum
        ADD R0,R0,R1
        ADD R2,R2,R3
        ADD R0,R0,R2
        
     LDR    R4,[SP]
     LDR R5,[SP,#4]
    
    ADD R4,R4,R5
    ADD R0,R4,R0
    BX LR    
    END

函数传参:
4个以内的参数,直接存放在R0~R3 这4个寄存器里面。

4个以后的参数放在堆栈里。

如果函数有返回值,那么返回值放在R0里。

Debug看看编译器是怎么处理的,我们就怎样把参数取出来。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值