
Ben R. answered 08/09/19
Experienced educator and technologist, great with kids
Direct branch (DB) is an instruction which explicitly includes the jump destination address (in full, or as an offset from a register) in the body of the instruction. An indirect branch (IB) is an instruction that includes a pointer to a memory address, which in turn contains the jump destination address.
DB is faster, as it only requires a single memory fetch (for instruction body), which might be in either the pipeline or the cache.
On the other hand, while the IB takes 2 memory fetches (instruction body and pointer contents), it gives you the ability to build jump tables, which is a very useful technique. For example, Class Inheritance in C++ is usually implemented using jump tables. And you might still get a cache or pipeline hit for the body and for the pointer, so the performance hit might not be large.