第七章 ARM 反汇编基础(七)(AArch64 汇编指令集)

AArch64 汇编指令集

  • arm64-v8a 对应两套架构的指令集
    • AArch32(简称“A32”)的 ARM、Thumb、Thumb-2 指令集
    • AArch64(简称“A64”)的 64 位指令集

AArch64 指令编码

  • AArch64 指令根据指令不同的位域分布将指令集分成了编码组(Encoding Group),在每个编码组下细分指令所属的类别:
28 27 26 25 24 编码组
0 0 - - - 不可预料
1 0 0 - - 数据处理(立即数)指令
1 0 1 - - 分支、异常生成与系统指令
- 1 - 0 - 加载与存储指令
- 1 0 1 - 数据处理(寄存器)指令
0 1 1 1 - 数据处理 SIMD 与浮点指令
1 1 1 1 - 数据处理 SIMD 与浮点指令
  • 可看出,只有 bits[28:24] 这五个位会影响指令的编码组,最后的 0b0111 与 0b1111 同属 SIMD 与浮点指令编码组
  • AArch64 虽属 64 位指令系统,但指令长度仍为 32 位。AArch64 与 AArch32 最大的不同体现在寄存器的使用上。如,AArch32 中,将 R1 寄存器的值传入 R0 寄存器,对应的指令为 MOV R0, R1;而在 AArch64 中,对应的指令有 32 位的 MOV W0, W1 和 64 位的 MOV X0, X1。用 32 位还是 64 位的寄存器,主要根据指令最高位 bit[31] 的 sf 域的值是否为 1 决定,若为 1,使用 64 位寄存器;否则使用 32 位寄存器。通常在具体指令的伪代码描述部分会有如下一行,用来说明寄存器使用位数的判断方法:
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值