嵌入式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看看编译器是怎么处理的,我们就怎样把参数取出来。