ARM Cortex-A系列编程指南之ARMv8 A -- 第六章 A64指令集

多数写应用程序的开发者不需要写汇编程序,但是当需要高度优化的代码的时候,汇编代码就变得很有用。这种情况包括写编译器代码,或者需要实现低层级特性但是C语言中又没有;启动代码、设备驱动、或者开发操作系统时也需要。会阅读汇编代码,也会对调试C语言时有帮助,特别是了解C语言和这些指令直接的映射关系。

6.1 指令助记符

A64的汇编语言重载实现了指令助记符,并根据操作数寄存器的名字来进行区分。比如ADD指令,有不同的参数,我们只需要记住ADD这个指令,汇编器会自动根据参数(操作数)来选择正确的调用:

ADD W0, W1, W2                 // add 32-bit registers
ADD X0, X1, X2                    // add 64-bit registers
ADD X0, X1, W2, SXTW      // add sign extended 32-bit register to 64-bit extended register
ADD X0, X1, #42                  // add immediate to 64-bit register
ADD V0.8H, V1.8H, V2.8H   // NEON 16-bit add, in each of 8 lanes

6.2 数据处理指令

6.3 内存访问指令

6.4 流控制

1)相对跳转

对于简单的相对跳转,可以用B指令。

无条件的简单相对跳转,可以从当前程序计数器的位置前后跳转128MB。

有条件的简单相对跳转(B后面跟了条件),这个值是正负1MB。

如果调用子调用,可以使用BL,它会保存返回地址到连接寄存器X30。BL没有条件跳转。

2)绝对跳转

BR是绝对跳转指令,会直接跳转到对应的地址。

BLR会保证返回地址到连接寄存器X30。

RET会默认返回到X30里的地址,当然也可以指定具体地址(这样就和BR类似了)。

跳转指令
B (offset)
Program relative branch forward or back 128MB.
A conditional version, for example B.EQ, has a 1MB range.
BL (offset)
As B but store the return address in X30, and hint to branch prediction logic that this is a function call.
BR Xn
Absolute branch to address in Xn.
BLR Xn
As BR but store the return address in X30, and hint to branch prediction
logic that this is a function call.
RET{Xn}
As BR, but hint to branch prediction logic that this is a function return.
Returns to the address in X30 by default, but a different register can be
specified.
条件跳转指令
CBZ Rt, label
Compare and branch if zero. If Rt is zero, branch forward or back up to
1MB.
CBNZ Rt, label
Compare and branch if non-zero. If Rt is not zero, branch forward or back up to 1MB.
TBNZ Rt, bit, label
Test and branch if zero. Branch forward or back up to 32kB.
TBNZ Rt, bit, label
Test and branch if non-zero. Branch forward or back up to 32kB.

6.5 系统控制和其他指令

6.5.1 异常处理指令

有三个异常处理指令,他们会导致异常发生,从而进入更高的异常等级。

SVC #imm16
Supervisor call, allows application program to call the kernel (EL1).
HVC #imm16
Hypervisor call, allows OS code to call hypervisor (EL2).
SMC #imm16
Secure Monitor call, allows OS or hypervisor to call Secure Monitor (EL3).

从异常返回的话,用ERET指令。这个指令通过拷贝SPSR_ELn到PSTATE,并跳转到保存的返回地址ELR_ELn来恢复处理器状态。

6.5.2 系统寄存器的访问

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值