|   | Branch |   | 
B<suffix> <address>
B is the simplest branch. Upon encountering a B instruction, the ARM
processor will jump immediately to the address given, and resume execution from there.On other processors, you might often find code such as:
OPT 1 LDA &70 CMP #0 BEQ Zero STA &72 .Zero RTS(from the Acorn Electron User Guide issue 1 page 213)
On the ARM processor, that would become something like:
OPT 1 ADR R1, #&70 LDR R0, [R1] CMP #0 BEQ Zero STR R0, [R1, #2] .Zero MOV PC, R14It isn't a very good example, but you can imagine how it would be better to execute conditionally instead of branching. On the other hand, if you have large sections of code there or if your code uses the status flags, you can implement all sorts of branching using conditional execution: Thus the single simple branch instruction can replace all of those branch and jump instructions present in other processors.
OPT 1 ADR R1, #&70 LDR R0, [R1] CMP R0, #0 STRNE R0, [R1, #2] MOV PC, R14
BL<suffix> <address>
BL is another branch instruction. This time, register 14 is loaded with the contents
of R15 just before the branch. You can reload R14 into R15 to return to the instruction after the
branch - a primitive but powerful implementation of a subroutine.
    .load_new_format
      BL     switch_screen_mode
      BL     get_screen_info
      BL     load_palette
    .new_loop
      MOV    R1, R5
      BL     read_byte
      CMP    R0, #255
      BLEQ   read_loop
      STRB   R0, [R2, #1]!
...where we can see three subroutines are called before the loader loop. Then, the
read_byte subroutine is called in the loop, once under conditional execution.