寄存器
ARM一共有33个寄存器,0-30是通用寄存器,31和32是专用寄存器(31是sp寄存器,32是pc寄存器),所以是31个通用寄存器,两个特殊寄存器,当然,还有几个是状态寄存器,
前31个寄存器的访问方式是:
- 使用X0~X30来访问时,是64位数据
- 使用W0~W30访问时,是低32位的数据
对于特殊寄存器来说:
- 32bit的时候,作为栈帧寄存器(stack point,SP)的时候,用WSP来访问
- 64bit的时候,作为栈帧寄存器(stack point,SP)的时候,用SP来访问
- 32bit的时候,作为零寄存器(Zero register)的时候,用WZR来访问
- 64bit的时候,作为零寄存器(Zero register)的时候,用WZ来访问
常用寄存器如下:
- X0 ~X7:传递函数的参数,如果有更多参数,则通过栈来传递
- X0:
- 既可以当参数的返回值,又可以当参数的传递
- 这里的X0,X1可以直接跟msg_Send一样绑定,第一个参数是self,第二个参数是选择子,第三个参数之后就是真正的参数。
- X0:
- SP,上述的栈指针寄存器,维护栈指针,指向栈的顶端。
- FP(Frame Point),X29,栈指针寄存器,指向栈的底部
- LR (Link Register)X30,链接寄存器,存储的是函数调用完成的返回地址
- 函数栈为什么知道这个,就是使用LR指针。
- PC(Programe Counter): 程序寄存器,表示的是程序的下一行地址的位置。
- X19寄存器:i0S中有很多self这样的标识自身,这个地址就是放在X19上
常用指令
- SVC:调一个系统调用
函数
- X0-X7放函数的参数,
- X0作为函数的返回值,如果是结构体的话,那么就将用X8兼容一下
- X19基本都是self,基本调一下