Section
06 Part 04 – The BPL & BMI Instructions |
“Memory is a magnet. It will
pull to it and hold only material nature has designed it to attract.” ~Jessamyn
West |
Introduction
These
two are conditional branches that will branch depending on the N flag. It should be noted that these branch
instructions have two sizes; .s for short and .w for word. For details see Section 05 Part 03 (The BRA Instruction).
The BPL
Instruction
BPL – Branch on PLus (Positive)
If
the N flag of the CCR is clear, the destination operand will be added to the PC, and the 68k will continue reading at the
new offset held in PC. If the N flag is set,
the instruction is ignored.
Examples
This is
simply based on whether or not the result is positive:
cmpi.w #$0020,d0 bpl.s FlagNIsClear move.w #$0000,d0 FlagNIsClear: |
We’ll
pretend d0 contains 2400001E, the CMP is word, so only the 001E
is taken into account. 001E - 0020 = FFFE. You’ll notice the result is negative, so the N
flag is set. The 68k will not branch to “FlagNIsClear”.
If
the result were positive, the N flag would be cleared, and the 68k would jump
to “FlagNIsClear”.
The BMI
Instruction
BMI – Branch on MInus (Negative)
If
the N flag of the CCR is set, the destination operand will be added to the PC, and the 68k will continue reading at the
new offset held in PC. If the N flag is clear,
the instruction is ignored.
Examples
This
is the opposite of BPL:
cmpi.w #$0020,d0 bmi.s FlagNIsSet move.w #$0000,d0 FlagNIsSet: |
Again,
pretend d0 contains 2400001E, the CMP is word, so only the 001E
is taken into account. 001E - 0020 = FFFE. The result is negative, so the N flag is set. The 68k will branch to “FlagNIsSet”.
If
the result were positive, the N flag would be cleared, and the 68k would simply
ignore the branch and continue.