b - ShenYj/ShenYj.github.io GitHub Wiki
无条件跳转,一般是什么函数内部的 if
、switch
条件判断
B
指令是最简单的跳转指令,一旦遇到一个 B
指令, ARM处理器将立即跳转到给定的目标地址,从那继续执行。
注意存储在跳转指令中的实际值是相对当前 PC
值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算(参考寻址方式中的相对寻址)。
它是 24 位有符号数,左移两位后有符号扩展为32 位,标识的有效偏移为 26 位(前后 32MB 的地址控件)
在
8086
汇编下等同于jmp
指令,类似于C
语言中的goto
格式:B{条件} 目标地址
(B与条件间无空格)
-
B Label
;程序无条件跳转到标号 Label 处执行 - 带条件时,一般配合
CMP
使用
-
基本跳转
.text .global _test _test: b label mov x0, #0x5 label: mov x1, #0x6 ret
在执行这段汇编代码的
_test
函数时,会跳过mov x0, #0x5
这句代码,直接执行mov x1, #0x6
-
配合指令的条件域使用
.text .global _test _test: mov x0, #0x1 mov x1, #0x6 cmp x0, x1 ; x0 减去 x1,并将结果影响到 cpsr 的标志位 beq label ; 再去 cpsr 中标志位检查是否满足 EQ (找Z位, Z=1, Z=1 代表cmp操作相减为零,等价于判断 x0和x1的值是否相等) mov 0x, #0x5 label: mov 0x1, #ox7
-
eq
: 即EQ
,相等的时候- 笔记: cpsr&指令的条件域
在 Xcode 汇编断点中常见的写法是
b.eq
-