iOS汇编
arm64,x86,armv7
生成汇编文件
xcrun --sdk iphoneos clang -S -arch arm64 main.c -o main.s
寄存器
- 通用寄存器
- 64bit:x0-x28
- 32bit:w0-w28(属于x0-x28的低32bit)
- x0-x7通常拿来存放函数的参数,更多的参数使用堆栈来传递
- x0通常拿来存放函数的返回值
- 程序计数器
- pc(Program Counter)
- 记录CPU当前的指令是哪一条指令
- 存储着当前CPU正在执行的指令的地址
- 类似8086汇编的ip寄存器
- 堆栈指针
- sp(stack Point)
- fp(Frame Point),也就是x29
- 链接寄存器
- lr(Link Register),也就是x30
- 存储着函数的返回地址
- 程序装填寄存器
- cpsr(Current Program Status Register)
- spsr(Saved Program Status Register),异常状态下使用
指令
- mov
- ret
- 函数返回
- 将lr(x30)寄存器的值给pc寄存器
- add
- sub
- cmp
- 将两个寄存器相减
- 相减的结果会影响cpsr寄存器的标志位
- b
- 跳转指令
- 可以带条件跳转,一般跟cmp配合使用
- bl
- 带返回的跳转指令
- 执行的操作
- 将吓一跳指令的地址存到lr(x30)寄存器中
- 跳转到标记处开始执行代码
- 条件域
- EQ:equal,相等
- NE:not equal,不相等
- GT:great than,大于
- GE,greate equal,大于等于
- LT,less than,小于
- LE,less equal,小于等于
- 内存操作
- load,从内存中读取数据
- ldr、ldur
- ldp(p是pair的简称)
- store,往内存中写入数据
- str,stur
- stp
- 零寄存器,里面存储的值是0
- wzr(32bit,Word zero register)
- xzr(64bit)
- load,从内存中读取数据
iOS汇编
v6
iPhone、iPhone3G
iPod Touch、iPod Touch2
v7
iPhone3GS、iPhone4、iPhone4S
iPad、iPad2、iPad3(The New iPad)
iPad mini
iPod Touch3G、iPod Touch4、iPod Touch5
v7s
iPhone5、iPhone5C
iPad4
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
函数的堆栈
函数的类型
- 叶子函数
- 非叶子函数
网友评论