1. 寄存器;
2. 常用指令;
3. 函数的堆栈;
PS:学习ARM64汇编时、一定要用IPhone5S及以上的真机调试程序。模拟器为X86汇编。
1. 寄存器;
1.1 通用寄存器:可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果;通用寄存器的长度取决于机器字长。
1.2 程序计数器:程序计数器是计算机处理器中的寄存器,它包含当前正在执行的指令的地址(位置)。当每个指令被获取,程序计数器的存储地址加一。在每个指令被获取之后,程序计数器指向顺序中的下一个指令。当计算机重启或复位时,程序计数器通常恢复到0。
1.3 堆栈指针:堆栈指针总是指向栈顶位置。一般堆栈的栈底不能动,所以数据入栈前要先修改堆栈指针,使它指向新的空余空间然后再把数据存进去,出栈的时候相反。堆栈指针,随时跟踪栈顶地址,按"先进后出"的原则存取数据。
栈 :是一种特殊的线性表,是一种只允许在表的一端进行插入或删除操作的线性表。表中允许进行插入、删除操作的一端称为栈顶。表的另一端称为栈底。栈顶的当前位置是动态的,对栈顶当前位置的标记称为栈顶指针。当栈中没有数据元素时,称之为空栈。栈的插入操作通常称为进栈或入栈,栈的删除操作通常称为退栈或出栈。
1.4 链接寄存器:当调用一个函数时,返回地址被自动保存到链接寄存器,在函数返回时有效。这使得快速进入和返回“叶”函数(不调用其它函数的函数)成为可能。如果函数是分支的一部分(即函数中又调用另一个函数),则链接寄存器必须入栈。
1.5 程序状态寄存器:
2. 常用指令;
2.1 mov:
2.2 add
2.3 sub
2.4 cmp
2.5 b
2.6 bl
2.7 条件域
2.8 内存操作
3. 函数的堆栈;
3.1 函数分类:
· 叶子函数:不调用其他函数的函数称为叶子函数;
· 非叶子函数: 调用其他函数的函数称为非叶子函数;
3.2 叶子函数的堆栈平衡;
3.3 非叶子函数的堆栈平衡;
(PS : 其中有部分章节是从前人的文章中搬运过来整理而成,这些文章里已经对部分知识点解释的很清楚明了了,我也没有更好的表达方式,所以站在巨人的肩膀上,我只是一个整理者加了部分自己的理解。)