在上篇文章
【3分钟秒懂】结合汇编代码解析C函数入参与PowerPC芯片寄存器的关系
中我们已经知道PowerPC共有8个通用寄存器(r3,r4....r10)用于传递函数参数。
如果我们定义一个C函数,其入参超过8个,超出部分的参数将会怎么传递到函数体里呢?
下面我们通过一个函数实例进行分析和解答:
如下定义一个入参个数为9的函数,函数内部的具体代码不是本文的重点,可以忽略。
void CmnRingBufferWrite( UINT8 ringBufTotalItems,
UINT8* pcur_writeIdx,
UINT8 cur_readIdx,
UINT8* psrc,
UINT8* pdst,
UINT8 itemSize,
UINT32* msgCnt,
UINT32 Cnt,
UINT32* discardMsgCnt)
{
...........
}
调用该函数并分析调用处的编译出的汇编代码 可知前8个入参被存入了r3到r10,第9个入参被存入了栈指针指向的空间。
000026bc 189a8009 43