指令格式:

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发生的原因:从字面意思去推断了;

小结:

  1. 不能望文生义;
  2. 大家一定要自己写程序去验证对应的内容,否则很容易被误导;

切记:

  1. BNE 指令只看 CPSR 的Z标志位,如果Z=0,则跳转到 label 标号处,如果Z=1,则继续执行下一句;

来源: https://www.softool.cn/docs/arm_assembly/arm_assembly_instruction.html