BEQ (short for "Branch if EQual") is the mnemonic for a machine language instruction which branches, or "jumps", to the address specified if, and only if the zero flag is set. If the zero flag is clear when the CPU encounters a BEQ instruction, the CPU will continue at the instruction following the BEQ rather than taking the jump.
Since the zero flag is set if the result of an operation, or a byte retrieved from memory, equals zero, one of the uses for BEQ is to check for such zero results. In this example, BEQ will take the jump if the byte retrieved from Number equals zero:
LDA NumA Read the value "Number" BEQ Equal Go to label "Equal" if "Number" = 0 ... Execution continues here if "Number" <> 0
The zero flag is also affected as a result of comparisons (see CMP, CPX, and CPY), and so BEQ, and its counterpart BNE, is often used after a comparison to redirect program execution depending on whether the compared values are equal or not, e.g.:
LDA NumA Read the value "NumA" CMP NumB Compare against "NumB" BEQ Equal Go to label "Equal" if "NumA" = "NumB" ... Execution continues here if "NumA" <> "NumB"
Addressing mode[edit | edit source]
BEQ only supports the Relative addressing mode, as shown in the table at right.
In the assembler formats listed, nn is a one-byte (8-bit) relative address. The relative address is treated as a signed byte; that is, it shifts program execution to a location within a number of bytes ranging from -128 to 127, relative to the address of the instruction following the branch instruction.
The execution time for BEQ is not a fixed value, but depends on the circumstances. The listed time is valid only in cases where BEQ does not take the branch. If it does take the branch, execution takes one additional clock cycle. Furthermore, if the branching crosses a page boundary, yet another cycle must be added to the execution time listed.
CPU flags[edit | edit source]
BEQ does not affect neither the zero flag nor any other CPU status flag.