JMP                     JMP Jump to new location                      JMP
  Operation:  (PC + 1) -> PCL                           N V - B D I Z C
              (PC + 2) -> PCH                           . . . . . . . .
  +----------------+-----------------------+---------+---------+----------+
  | Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
  +----------------+-----------------------+---------+---------+----------+
  |  Absolute      |   JMP $FFFF           |   $4C   |    3    |    3     |
  | (Abs.Indirect) |   JMP ($FFFF)         |   $6C   |    3    |    5     |
  +----------------+-----------------------+---------+---------+----------+
 65816 Extensions:
  +----------------+-----------------------+---------+---------+----------+
  | Addressing Mode| Assembly Language Form| OP CODE |No. Bytes|No. Cycles|
  +----------------+-----------------------+---------+---------+----------+
  | (Abs.Ind.,X)   |   JMP ($FFFF,X)       |   $7C   |    3    |     6    |
  | AbsoluteLong   |   JMP $FFFFFF         |   $5C   |    4    |     4    |
  +----------------+-----------------------+---------+---------+----------+
   See also: JML
What it does: Jumps to any location in memory.
Major uses: Branching long range. It is the equivalent of BASIC's GOTO instruction. The bytes in the Program Counter are replaced with the address (the argument) following the JMP instruction and, therefore, program execution continues from this new address.
Indirect jumping-JMP (1500)-is not recommended, although some programmers find it useful. It allows you to set up a table of jump targets and bounce off them indirectly. For example, if you had placed the numbers $00 $04 in addresses $88 and $89, a JMP ($0088) instruction would send the program to whatever ML routine was located in address $0400. Unfortunately, if you should locate one of your pointers on the edge of a page (for example, $00FF or $17FF), this Indirect JMP addressing mode reveals its great weakness. There is a bug which causes the jump to travel to the wrong place-JMP ($D0FF) picks up the first byte of the pointer from $D0FF, but the second byte of the pointer will be incorrectly taken from $0000. With JMP ($17FF), the second byte of the pointer would come from what's in address $1700.
Since there is this bug, and since there are no compelling reasons to set up JMP tables, you might want to forget you ever heard of Indirect jumping.