ARM汇编基础

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字节,不足的话自动补全

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值