感谢看帖子和回帖子的人,别笑话,刚自学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语言的数组差不多,但不能说是一样的,因为二者不具有可比性。
其实学习嵌入式软件一开始可以不必太过于执着这些东西,就好比你修一条路,你不必一寸一寸的修,没一寸都修得光滑如镜,因为那样只有你把路全部修完了才能通行。你可以先简单的平整出一条土路来,人可以走了,然后再一点点的精修。过于纠结于一点往往会钻牛角尖。