arm64_汇编的用法

// 记录下 常用的 arm64 汇编的用法

定义一些变量

int_a =3 
.equ int_a 3
或者 直接 #define int_a 3 
也是可以的

1.7 数据类型
x86 上的“字”是 16 位,“双字”是 32 位。ARM的“字”是32位,“双字”是64位。

宏的使用

.macro 开始
.endm 结束

 // load a 64-bit immediate using MOV
  .macro movq Xn, imm
      movz    \Xn,  \imm & 0xFFFF
      movk    \Xn, (\imm >> 16) & 0xFFFF, lsl 16
      movk    \Xn, (\imm >> 32) & 0xFFFF, lsl 32
      movk    \Xn, (\imm >> 48) & 0xFFFF, lsl 48
  .endm

  // load a 32-bit immediate using MOV
  .macro movl Wn, imm
      movz    \Wn,  \imm & 0xFFFF
      movk    \Wn, (\imm >> 16) & 0xFFFF, lsl 16
  .endm

使用的话:

  movl    w0, 0x12345678

条件编译
.ifdef BIND
      // assemble code to bind
    .else
      // assemble code for connect
    .endif

保存寄存器

stp,ldp 可以同时操作 两个寄存器,用法基本与 str /ldr 一样…

// push {x0}
    // [base - 16] = x0
    // base = base - 16 
    str    x0, [sp, -16]!
    // pop {x0}
    // x0 = [base]
    // base = base + 16
    ldr    x0, [sp], 16
    // push {x0, x1}
    stp    x0, x1, [sp, -16]!
    // pop {x0, x1}
    ldp    x0, x1, [sp], 16

汇编中,函数最后一定要写ret,否则会一直按顺序执行下去。他会认为下一个函数名只是下个代码块的标记。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值