ARM汇编入门:寄存器与指令跳转

在嵌入式开发或Android逆向研究时,学习arm汇编必不可少

寄存器(用户模式)

寄存器 特定名称 过程调用的角色
R16 CPSR(Computer Program Status Register) 状态寄存器
R15 PC(Program Counter) 程序计数器
R14 LR(Link Register) 链接寄存器(用于存放函数返回地址)
R13 SP(Stack Pointer) 栈指针
R12 IP(Internal Procedure ) 内部过程调用临时寄存器
R11 - ARM状态局部变量寄存器 - 8
R10 SL(Stack Limit) ARM状态局部变量寄存器 - 7/栈检查中的栈限制指针
R9 SB(Static Base) ARM状态变量寄存器 - 6/RWPI变体中的静态基址
R8 - ARM状态变量寄存器 - 5
R7 - 局部变量寄存器 - 4
R6 - 局部变量寄存器 - 3
R5 - 局部变量寄存器 - 2
R4 - 局部变量寄存器 - 1
R3 - 参数/结果/暂时寄存器 - 4
R2 - 参数/结果/暂时寄存器 - 3
R1 - 参数/结果/暂时寄存器 - 2
R0 - 参数/结果/暂时寄存器 - 1

指令跳转

//在arm汇编中,有两种调准方式
//1.通过跳转指令实现
//2.通过修改PC寄存器的值实现
//具体可以参考下面连接

Android ARM常用的汇编指令合集

其中寄存器的使用必须满足下面的规则:
(1)函数间通过寄存器 R0~R3 来传递参数,低于 32 位的函数返回值存于 R0。
(2)在函数中,使用寄存器 R4~R11 来保存局部变量。函数进入时必须保存所用到的局部变量寄存器的值,在返回前必须恢复这些
寄存器的值;对于函数中没有用到的寄存器则不必进行这些操作。在 Thumb 中,通常只能使用寄存器 R4~R7 来保存局部变量。
(3)寄存器 R12 用作函数间的 scratch 寄存器,记作 IP
(4)寄存器 R13 用作数据栈指针,记作 SP。函数调用前后必须保持堆栈平衡。
(5)寄存器 R14 称为连接寄存器,记作 LR。它用作保存函数的返回地址。如果在函数中保存了返回地址,寄存器 R14 则可以用作其他用途。
(6)寄存器 R15 是程序计数器,记作 PC。

发布了77 篇原创文章 · 获赞 44 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/lemisky/article/details/102582003