4. ARM寄存器
2019-03-20 本文已影响0人
郑行_aover
1. 简书-ARM寄存器讲解
2. ARM寄存器解析
3. ARM64汇编-寄存器和指令
4. 堆栈基础-windows
5.堆栈基础-linux篇-32位
1. 关于寄存器的说明
- R0-R3:用作传入函数参数,传出函数的返回值。在子程序调用之前,可以将r0-r3用于任何用途,被调用函数在返回之前不必恢复r0-r3.如果调用函数需要再次使用这几个寄存器的内容,则必须保留这些内容。
- R4-R11:被用来存放函数的局部变量。如果被调用函数使用了这些寄存器,在返回之前必须恢复这些寄存器的值
- R12: 是内部调用暂时寄存器ip。它在过程链接胶合代码中用于此角色。可以将其用于任何用途。被调用函数在返回之前不必恢复r12.
- R13: 是栈指针SP,指向栈顶。.它不能用于任何其它用途。sp中存放的值在退出被调用函数时必须与进入时值相同。
- R14: 是链接寄存器LR。如果保存了返回地址,则可以在调用之间将r14用于其它用途,程序返回时要恢复。
- R15: 是程序计数器PC。用于执行可执行文件中的指令地址。
2. PC寄存器
- 为指令指针寄存器,它指示了CPU当前要读取指令的地址
- 在内存或者磁盘上,指令和数据没有任何区别,都是二进制信息
- CPU工作时候把有的信息看做指令,有的信息看做数据,为同样的信息赋予不同的意义
- 比如 比如 1110 0000 0000 0011 0000 1000 1010 1010
- 可以当做数据 0xE003008AA,也可以当做指令 mov x0, x8
- CPU根据什么将内存中的信息看做指令
- CPU将PC指向的内容看做指令
- 如果内存中某段内容被CPU执行过,那么它所在的内存单元必然被PC指向过。
3. SP、fp、LR寄存器
- sp寄存器时刻保存我们的栈顶的地址
- fp寄存器,会保存我们的栈底的地址
- LR 程序链接寄存器:1. 用于保存函数的返回地址。 2. 异常处理后的返回地址,例如中断。
4. CPSR、SPSR
- CPSR当前状态寄存器,其中每一位的bit都有意义。用于指示正负、加减、中断等的状态
- SPSR 系统状态寄存器,用于异常保护的CPSR的备份,异常时保存CPSR的值。异常退出时将该值恢复到CPSR,以保障程序正常运行。
5. 关于堆栈寄存器
- rsp、esp、sp:栈指针寄存器,内存放着一个指针,永远指向系统栈的栈顶。(sp16位| esp32位|rsp64位)
- rbp、ebp、bp:基址指针寄存器,该指针永远指向系统栈上栈帧的底部。
- rip、eip、ip: 指令寄存器,该指针永远指向下一条待执行的指令地址。
- ss:寄存器存放的段地址。
说明: PC和ip其实是一回事儿。都是指令寄存器,指向当前执行指令的下一条指令。