赞
踩
ARM 中跳转指令主要分为无条件跳转和有条件跳转,有条件跳转是一种根据特定条件进行跳转的指令。它会根据条件码寄存器(Condition Code Register)中的状态,判断是否满足特定条件,然后根据条件的结果决定是否进行跳转。无条件跳转是一种无条件地改变程序执行流程的指令。它会直接跳转到指定的地址,而不需要任何条件判断。
类型 | 指令 | 介绍 |
---|---|---|
条件分支 | B.cond | Branch conditionally |
条件分支 | CBNZ | Compare and Branch if NonZero |
条件分支 | CBZ | Compare and Branch if Zero |
条件分支 | TBNZ | Test bit and Branch if NonZero |
条件分支 | TBZ | Test bit and Branch if Zero |
无条件分支 | B | Branch uncondition |
无条件分支 | BL | Branch with Link |
无条件分支 | BLR | Branch with Link to Register |
无条件分支 | BR | Branch to Register |
无条件分支 | RET | Return from subroutine |
其中指令的关键字:
BL 和 BLR 执行结果是将 PC 寄存器值的下一个值(也就是PC+8)放到链接寄存器 LR中, 然后将目的子程序的地址放到 PC 中。 BLR的结果 与 BL类似,但是新的PC的值是从特定的寄存器(如x0)取得。
如下是使用 BLR 的例子:
// Move startup address into a data register
ldr x4, =ASM_PFX(CEntryPoint)
// Set the frame pointer to NULL so any backtraces terminate here
mov x29, xzr
// Jump to PrePiCore C code
// x0 = MpId
// x1 = UefiMemoryBase
// x2 = StacksBase
blr x4
_NeverReturn:
b _NeverReturn
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。