本文没有面面俱到地解释每一个PowerPC寄存器,只抽取相关的寄存器结合汇编代码解析C函数入参与芯片寄存器的关系,让你3分钟内秒懂。
1. PowerPC 通用寄存器简介
PowerPC 处理器有 32 个 GPR(通用寄存器)分别是:r0,r1,r2…r31
与本文相关的通用寄存器为下面粗体部分:
r0
r1 堆栈指针SP
r2
r3 作为第一个参数和返回值。
r4-r10 函数或系统调用开始的参数。
r11
r12
r13
r14-r31
2. 代码实例解析C函数入参与芯片寄存器的关系
2.1 以一个3个参数的C函数为例子(无需关注函数内部实现)
代码如下:
//write by liuyanqiu
void GetSystemStackInfo(UINT16 *pcurUsed,
UINT16 *pmaxUsed,
UINT16 *pthreshold)
{
extern UINT32 *pxSystemStackPointer;
extern UINT32 _stack_addr[];
extern UINT32 _stack_end[];
UINT32 * system_stack_ram;
const UINT32 ulCheckValue = ( UINT32 ) 0xa5a5a5a5;
system_stack_ram=_stack_end;
while(*system_stack_ram == ulCheckValue)
{
system_stack_ram++;
}
*pmaxUsed=(_stack_addr-system_stack_ram)*4;
*pthreshold=(_stack_addr-_stack_end)*4;
*pcurUsed=(_stack_addr-pxSystemStackPointer)*