指令格式:
BNE label
指令描述:
如果 CPSR 的 Z标志位=0,则跳转到 label 标号处;
如果 CPSR 的 Z标志位=1,则跳转到 label 标号处;
举例:
ldr r0,=0x00000001
;//因为此时r0寄存器的值为0x1,与立即数0x2做 AND 运算结果为0,所以将使CPSR的Z标志位=1;
;//此处的意图是想测试r0的bit[1]是否为1,如果为1,导致CPSR的Z标志位=0,则跳转到 SOFTOOL 标号处;
tst r0,#0x2
;//由于此时CPSR的Z标志位=1,那么不会执行 SOFTOOL 标号处,而是继续执行下一句 adr r0,0x320002B4
bne SOFTOOL
adr r0,0x320002B4
... ...
;//SOFTOOL 标号位置:
SOFTOOL
ldr r1,=0x56000080
误区:
误区1:如果单纯看网上抄来炒去的解释,大家很容易误解为:Z=1,去执行 label 标号处;
误区1发生的原因: 没有动手验证网上的内容;
误区2: 执行 BNE label 时,看上一句的2个值是否相等,如果不相等,则继续执行下一句,而不是 label标号 处;
误区2发生的原因:从字面意思去推断了;
小结:
- 不能望文生义;
- 大家一定要自己写程序去验证对应的内容,否则很容易被误导;
切记:
BNE 指令只看 CPSR 的Z标志位,如果Z=0,则跳转到 label 标号处,如果Z=1,则继续执行下一句;
来源: https://www.softool.cn/docs/arm_assembly/arm_assembly_instruction.html