当前位置: 代码迷 >> 驱动开发 >> ARM 基础知识请问
  详细解决方案

ARM 基础知识请问

热度:99   发布时间:2016-04-28 10:42:55.0
ARM 基础知识请教
感谢看帖子和回帖子的人,别笑话,刚自学ARM,很多不懂。

1.参数个数固定的子程序参数传递规则。 
  *第一个整参数通过R0 - R3来传递。其他通过数据栈传递。
  其他的通过数据栈来传递。
  这句话的意思是不是 第一个参数要是整数的,通过R0-R3当中的一个来传递。要是第一个参数不是整数,则找到第一个整数传递,其余的参数(包括第一个整数之前)的都通过数据栈来传递?

2.子程序结果返回规则。 
  *结果为32位的整数可以通过R0返回。 
  *结果为64位整数时,通过R1R0返回,依次类推。
  子程序的返回值,结果为64位整数时,R1R0当中,R1中存放是低位数据,R0当中存放的是高位数据?

3.这个定义的数据区,后面的数字是要填充的数值么
  src DCD 1,2,3,4,5,6,7,8
  意思是分配了一段内存,8个字节的大小?里面的数据位1,2,3,4,5,6,7,8 吗?src这个名字为这段内存的基地址?
  可以把他类似的理解为高级语言当中的 数组分配么 char array【8】?


------解决方案--------------------
ARM中的传递规则是这样,如果函数有多个参数,前四个参数如果都是小于等于32bits的参数(就是你说的整参数,如unsigned int以下的变量,指针等),分别放在R0,R1,R2,R3中传递,后面多于四个的参数放在堆栈中。如下面例子

void func(int param0, int param1, int param2, int param3, int param4);

调用这个函数时, param0放在R0中,param1放在R1中,param2放在R2中,param3放在R3中,param4放在堆栈中。

剩下的就如同你所说的。

至于第3个么,DCD是32bits的,src是8个32bits数据的首地址,DCB才是8bits的定义,它与C语言的数组差不多,但不能说是一样的,因为二者不具有可比性。


其实学习嵌入式软件一开始可以不必太过于执着这些东西,就好比你修一条路,你不必一寸一寸的修,没一寸都修得光滑如镜,因为那样只有你把路全部修完了才能通行。你可以先简单的平整出一条土路来,人可以走了,然后再一点点的精修。过于纠结于一点往往会钻牛角尖。
  相关解决方案