iOS汇编教程笔记
基础简介
- iOS 设别的 CPU 使用 ARM 架构设计,ARM 芯片的指令集选用 RISC
 - 
mov r0, #42- 目标是第一个 ,即:把42移动到寄存器 r0中
 
 - 
ldr r2, [r0]- 把 r0中的值装载在寄存器 r2中
 
 - 
add r4, r2, r3- 把寄存器 r2, r3中的值进行 add 操作,加的结果放到寄存器 r4中
 
 - 
str r0, [sp, #8]- 把寄存器 r0中的内容存储到栈指针(sp)+8的位置
 - 与 
ldr相反 –ldr把内存中的内容存储到寄存器中 
 - 
add r0, r1- 把 
r0与r1中的内容相加储存到r0中 - 如果 add 指令只有两个参数,那么就把第一个参数当做目标寄存器
 
 - 把 
 
函数调用约定
- 
ARM 的 CPU 有16个寄存器:r0 到 r15,每隔寄存器为32bit
- r0 – r3:存储传递给函数的参数值
 - r4 – r11:存储函数的局部变量
 - r12;内部过程调用暂时寄存器
 - r13:存储栈指针(sp) – 保存栈顶指针
 - r14;链接寄存器(link register)- 存储着当被调用函数返回时,将要执行的吓一条指令的地址
 - r15:程序计数器(program counter),存储着当前执行指令的地址,每条程序被执行后,该计数器自增
 
 - 
在汇编代码中,以”.”开头的都不是汇编指令,阅读时可以忽略
 - 代码中以冒号结尾的代码行(例如 
_addFunction和Ltim0:),称之为『label』。这些标签的作用是给汇编代码段指定相关的名字,实际上是一个函数的入口 - 这个标签(_addFunction)是必须有的,别的代码调用 
addFunction函数时,并不需要知道该函数具体在什么地方,通过简单的一个符号或者标签就可以进行调用。在最终生成的程序二进制文件时,链接器(link register)会把这个标签转换为实际的地址- 编译器总是会在函数名前面加一个下划线
_,这是一个约定 
 - 编译器总是会在函数名前面加一个下划线
 - 其他所有的标签都是以
L开头,这些通常称为局部标签(local label),只会在函数内部使用 - 注释是以
@字符开头