arm64汇编基础

一.iphone X - arm64截图

arm64汇编基础_第1张图片
lldb输入命令register read
  • x0 - x7用来传参数,x0也存储返回值(如果参数大于8个,多余的参数放到栈里面)
  • x0 - x30 是31个通用整型寄存器
  • x29 : fp保存栈帧地址(栈底指针)
  • x30 : LR保存子程序结束后需要执行的下一条指令
  • sp 保存栈顶指针,使用 SP/WSP来进行对SP寄存器的访问
  • pc 总是指向即将要执行的下一条指令,在arm64中,软件是不能改写PC寄存器的
  • CPSR 状态寄存器
  1. 第31位(0-31) N(Negative): 记录相关指令(add、sub、orr等逻辑或算数)执行后,其结果是否为负.如果为负,N=1 非负,N=0
  2. 第30位 Z(Zero): 记录相关指令后,结果为0,Z=1 非0,Z=0
  3. 第29位 C(Carry): 进位标识符,一般进行无符号数的运算.
    加法运算:当运算结果产生了进位时(无符号数溢出), C=1 否则C=0
    减法运算(包括CMP):当运算产生了借位时(无符号数溢出),C=0 否则C=1

tips: arm64是递减栈
栈是从高地址向低地址扩算,堆是从低地址向高地址扩散

二. 常用指令

  1. str :store register 将寄存器写入内存,入栈
  2. ldr : load register 将内存读到寄存器,出栈
  3. bl : b代表跳转, L代表lr寄存器, 跳转并给lr寄存器赋值
  4. ret : 让cpu执行lr寄存器里面的东西
  5. adrp (adress page, 一般和add同时出现): 找到常量或者全局变量所在的内存页(内存地址是分页管理的,每10k为一页)

你可能感兴趣的:(arm64汇编基础)