iOS汇编基础
x86_64汇编
X84中原有8个32位通用寄存器%eax,%ebx,%ecx,%edx,%esi,%edi,%ebp,%esp,
X86_64中分别被扩展为64位,并且多了8个寄存器。因此X86_64的寄存器如下:
- rax, eax, ax, ah, al;
- rbx, ebx, bx, bh, bl;
- rcx, ecx, cx, ch, cl;
- rdx, edx, dx, dh, dl;
- rsi, esi, si;
- rdi, edi, di;
- rbp, ebp;
- rsp, esp;
- r8-r15;
GCC中对这些寄存器的调用规则如下:
- %rax 作为函数返回值使用。
- %rsp 栈指针寄存器,指向栈顶
- %rdi,%rsi,%rdx,%rcx,%r8,%r9 用作函数参数,依次对应第1参数,第2参数。。。
- %rbx,%rbp,%r12,%r13,%14,%15 用作数据存储,遵循被调用者使用规则,简单说就是随便用,调用子函数之前要备份它,以防他被修改
- %r10,%r11 用作数据存储,遵循调用者使用规则,简单说就是使用之前要先保存原值
ARM处理器架构
ARM
现在的智能手机
ARM指令集
- armv7|armv7s|arm64都是ARM处理器的指令集
- v7
iPhone3GS、iPhone4、iPhone4S - v7s
iPhone5、iPhone5C - arm64
iPhone5S、iPhone6、iPhone6 Plus、iPhone6S、iPhone6S Plus
iPhoneSE、iPhone7、iPhone7 Plus、iPhone8、iPhone8 Plus、iPhoneX
iPad5、iPad Air、iPad Air2、iPad Pro、iPad Pro2
iPad mini with Retina display、iPad mini3、iPad mini4
iPod Touch6
- v7
- i386|x86_64 是Mac处理器的指令集
1
2
3
4
5 模拟器32位处理器测试需要i386架构,
模拟器64位处理器测试需要x86_64架构,
真机32位处理器需要armv7,或者armv7s架构,
真机64位处理器需要arm64架构。
编译错误
真机编译错误: No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386)
模拟器上编译错误:No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=armv7s, VALID_ARCHS=armv7 armv6)
iOS汇编教程
来自公主号:高级页面仔