ARM汇编基础

  • Post author:
  • Post category:其他


ios现在都是arm64汇编

x0 – x7  用于子程序调用时的参数传递,超过八个会放到线上传递

x0和w0时同一寄存器的不同尺寸,x0为8字节,w0为4字节,x0寄存器的低位4字节

x0/w0还可以用于返回值的传递   ;是注释符号

mov  x1, x0      ;将寄存器x0 赋值给x1

add   x0,x1,x2   ;x0 = x1 + x2

sub  x0,x1,x2   ;x0 = x1 – x2

mul  x0,x1,x2  ;x0 = x1 * x2

sdiv x0,x1,x2  ;x0 = x1 / x2

add x0, x0 , #0xF   ; x0 = x0 & #0xF  与操作

orr  x0,x0,  #9         ; x0 = x0 | #9    或操作

eor x0, x0, #0xF     ; x0 = x0 ^ #0xF  异或操作

寻址指令

L开头的从内存中取值      LDR   load Register  LDP  load Pair

S开头往内存中存值        SDR   store Register  STP  Store Pair

ldr  x0,[x1]    ;  从内存地址x1中取出值来给寄存器x0

ldp x1,x2 [x10, #0x10]   ;从内存地址 x10 + 10 取出两个64位的值  赋值给寄存器x1,x2

str x5, [sp, #24]  ; 偏移量为正 将寄存器x5里面的64位值存到内存地址sp + 24

stur  w0, [x29, #0x8]   偏移量为负的  将寄存器w0的值存入x29 – 0x8 的内存地址

大多数时候,寄存器可以用来计算,内存是存数据的,所以经常是寄存器和内存交换数据

堆: 当程序运行时,操作系统会为程序划分出来一段内存空间,起始位置0x1000,结束位置0x8000,

这段内存空间开始有一段静态数据,从起始位置开始分配内存

动态占用请求,新建对象,malloc

这种用户主动申请的而划分出来的,叫堆 heap  从低位到高位,   不能自动释放,只能手动释放,或者垃圾回收机制来回收

栈是一种因为函数运行而临时占用的内存区域,从高位到低位,每个函数都有一个帧frame,临时变量都存在这里,一层层栈,有多少个帧frame,    等函数运行结束后,就把帧释放掉了

arm64里面每次占用字节都是16字节,不足的话自动补全



版权声明:本文为qq_28551705原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。