一、iOS汇编
1、真机:arm64汇编寄存器指令 堆栈2、模拟器:x86汇编二、lldb(lldb)register read x0(lldb)register read w0(lldb)register write x0 0x002a1b(lldb)register read w0(lldb)register read
三、生成汇编文件
xcrun -sdk iphoneos clang -S -arch arm64 main.c -o main.s
四、寄存器1、 通⽤寄存器64bit的:x0 ~ x2832bit的:w0 ~ w28(属于x0 ~ x28的低32bit)x0 ~ x7通常拿来存放函数的参数,更多的参数使用堆栈来传递 x0通常拿来存放函数的返回值2、 程序计数器pc(Program Counter) 记录CPU当前指令的是哪一条指令 存储着当前CPU正在执⾏的指令的地址 类似于8086汇编的ip寄存器3、 堆栈指针sp(Stack Pointer)fp(Frame Pointer),也就是x29 4、 链接寄存器lr(Link Register),也就是x30存储着函数的返回地址 5、 程序状态寄存器cpsr(Current Program Status Register)spsr(Saved Program Status Register),异常状态下使⽤![程序状态寄存器1](https://upload-images.jianshu.io/upload_images/8285086-429a8c7b1240c185.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)![程序状态寄存器2](https://upload-images.jianshu.io/upload_images/8285086-df56d274823a76c4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)五、怎么编写汇编指令1、在Xcode的OC文件中内嵌写入
__asm{ "mov x0, 100"}
#ifndef arm_h#define arm_hvoid test();int add(int a, int b);int sub(int a, int b);#endif /* arm_h */
arm.s
// 声明一个代码段.text.global _test, _add, _sub// 内部\私有函数mycode:mov x0, #0x1mov x1, #0x2add x2, x0, x1ret// test函数的实现_test:; bl指令(函数调用)bl mycodemov x3, #0x2mov x4, #0x1; b指令带条件; mov x0, #0x5; mov x1, #0x5; cmp x0, x1; bgt mycode; mov x0, #0x5; ret; mycode:; mov x1, #0x6; b指令; b mycode; mov x0, #0x5; mycode:; mov x1, #0x6; cmp指令; mov x0, #0x1; mov x1, #0x3; cmp x0, x1; mov指令; mov x0, #0x8; mov x1, x0; add指令; mov x0, #0x1; mov x1, #0x2; add x2, x0, x1; sub指令; mov x0, #0x5; mov x1, #0x2; sub x2, x0, x1ret// add函数的实现_add:add x0, x0, x1ret// sub函数的实现_sub:sub x0, x0, x1ret