一、ARM64汇编-内存操作ldr指令
load,从内存中读取数据
ldr 、 ldur
ldp (p是pair的简称)
1.1 ldr

ldr x0, [x1]
打印a 的地址值

ldr指令:从内存中读取数据
ldr x0, [x1]

ldr指令:从内存中读取数据
ldr w0, [x1]。改为准确的读取a的地址值 这样读取的就是a的地址值

1.2、-ldur指令
ldr w0, [x1, #0x4] 就是x1 内存地址值+一个立即数 然后再赋值给w0
ldr w0, [x1, #0x4]! 内存地址值+一个立即数 然后再赋值给w0 同时修改x1的值

ldr w0, [x1, #-0x4] 右边是正数的话就是ldr
ldur w0, [x1, #0x4] 右边是负数的话就是ldur
1.3 ldp
ldp指令:从内存中读取数据,放到一对寄存器中
ldp w0, w1, [x2, #0x10]
先取 [x2, #0x10] 开始的前四个字节给w0 ,再取接着的四个字节给w1

浮点数的赋值


二、ARM64汇编-str、stur、stp指令
store,往内存中写入数据
str 、stur
stp
零寄存器,里面存储的值是0
wzr (32bit , Word Zero Register)
xzr (64bit)
str指令:往内存中写入数据
str x0, [x1]

stur 和 stp 同上面的读取类似


2.1 零寄存器,里面存储的值是0
wzr (32bit , Word Zero Register)
xzr (64bit)


三、 程序计数器和链接寄存器
程序计数器
o pc (Program Counter)
。 记录CPU当前指令的是哪---条指令
。 存储着当前CPU正在执行的指令址 。 类似于8086汇编的ip寄存器
链接寄存器
lr (Link Register),也就x30 。
存储着函数的返回地址


三、堆栈
函数的类型
。 叶子函数
。 非叶子函数
3.1 叶子函数 函数的堆栈平衡
xcrun --sdk iphoneos clang -S -arch arm64 main.c -o main.s

sub sp, sp, #32 ; =16 和add x29, sp, #16 ; fp = sp + 16 申请和释放内存流程

3.2 非叶子函数的堆栈平衡

