What's the point of Indirect Addressing? Indirect addressing allows you to reference memory locations, larger than the operand limit of a CPU.

i.e

1 | ADD 2 3
2 | #2
3 | *32000
...
32000 | #5


This will add memory location 2 and 3, 3 points to location 32000, so when it's evaluated, the effect is:

1 | ADD 2 32000


Even though 32000 may exceed the operand size limit.

My question is, why do this?

Why not simple have this:

1 | ADD 2 3
2 | #2
3 | #5


It saves time wasted on extra references to memory and space in memory.
Indirect addressing is possible without instructions that implement it explicitly. These instructions exist for our convenience, and not just for reaching a position that doesn't fit the address space of a direct addressing instruction (although this will become quite natural if your program is big enough): that's how we implement subprograms and arrays, for instance.