Why do computers have only a few thousand instructions when they could have millions?

Because every instruction needs some circuitry to implement it. The more instructions you add, the bigger the processor gets. Since most of these operations will never be used, it's just wasted complexity.

All the complexity can even slow the processor down. RISC processors, such as the ARM, were based on the idea of throwing away a large number of operations, and making the resulting smaller processor core as fast as possible.

Even modern X86 processors, with a huge instruction set, have ended up having a faster processor hiding inside, emulating a huge complicated one.


To complement Simon B's answer, GPUs, on the other hand, do a lot of complex calculations. But they can be boiled down to multiply-add instructions, A = B*C + D. So they at least try to have complex multiply-add instructions because they are common instructions.

To recap. If you add more instructions the CPU will become:

  1. more complex, i.e. bigger CPU and harder to use efficiently
  2. slower. The speed you can run it depends on the slowest unit
  3. more expensive. Is this what your customer wants?

Also, read about "risc vs cisc architectures"


Most computers contain only a couple thousand instructions, but the bit width(usually 64-bit) technically allows computers to have access to millions or even billions of instructions.

First, let's be clear that being 64 bit doesn't mean anything for instructions. Most 64 bit systems use 32 bit long instructions, with the exception of x86 where instructions can be anywhere from less than 32 bits to several hundred bits.

As for why the number of instructions is limited, for a system using 32 bit instructions (which is a very efficient number to use), the number of possible instructions that can be encoded is somewhat limited since you ideally want to have at least 3 registers for at least some opcodes. However even x86 where instructions can have arbitrary length has on the order of a few thousand unique instructions (not all of which are necessarily still used) because there aren't that many useful things an instruction can do. Encoding lots of useless instructions (as x86 does) doesn't necessarily hurt you, but it doesn't help either.

Why haven't they added extra instructions to microprocessors yet?

Intel and ARM regularly add new instructions. Focusing on intel, there has been Haswell New Instructions, Broadwell New Instructions, Skylake New Instructions, Palm Cove (Cannonlake) New Instructions and last year's Sunny Cove (Icelake) New instructions.

Most of the useful instructions were added long ago so these typically have a marginal effect on average, but there are specific applications where these can make a large difference.