cbnz

Compare and Branch Non-Zero (Thumb)

CBNZ <Rn>, <label>

Branches to label if register is not zero (Thumb-only).

Pseudocode Operation

if Rn != 0 then PC ← PC + (i:imm5:0 << 1) else PC ← PC + 2

Example

CBNZ r1, label

Encoding

Binary Layout
1011
15:12
1
11
0
10
i
9
1
8
imm5
7:3
Rn
2:0
 
Format Thumb Branch
Opcode 0xB900
Extension T32 (Thumb)

Operands

  • Rn
    Register
  • label
    Label

Related

Other forms of cbnz

  • cbnz Compare and Branch Not Zero
  • cbnz Compare and Branch Not Zero (64-bit)

Across architectures

Compare and Branch : how x86, ARM, RISC-V, and PowerISA each do this.

More in T32 (Thumb)

Reference

Instruction Forms

Encoding Instruction ISA Bit pattern
0xB900 CBNZ{<q>} <Rn>, <label> T32 1011 | 1 | 0 | i | 1 | imm5 | Rn

Description

Compare and Branch on Nonzero and Compare and Branch on Zero compare the value in a register with zero, and conditionally branch forward a constant value. They do not affect the condition flags.

Operation

EncodingSpecificOperations();
if nonzero != IsZero(R[n]) then
    CBWritePC(PC + imm32);