For twenty years this was the fiercest argument in computer architecture, fought in conference papers, product
launches and religious-grade internet flame wars. On one side, CISC — the Complex Instruction
Set Computer, whose champion is
The delicious twist — which we build up to — is that both sides eventually won, because the modern
CISC was born when memory was tiny and precious and compilers were primitive. The guiding idea: make each
instruction do a lot, so a program needs fewer of them and takes less space, and so a human writing
assembly has powerful building blocks. The
add [eax], ebx reads memory, adds, and writes
it back, all in one instruction (a register–memory model).[base + index*scale + disp].rep movsb (copy a whole string) is
implemented by a tiny internal program burned into the chip.The dream was that one dense instruction would be faster than several simple ones. The reality, by the 1980s, was that decoding all that variety was a nightmare, and studies showed compilers barely used the fancy instructions.
In the early 1980s, Berkeley (Patterson) and Stanford (Hennessy) asked a heretical question: what if we removed the complexity? Measurements showed real programs spent almost all their time in a handful of simple instructions. So RISC keeps only those, and makes them uniform:
load/store touch memory; arithmetic is
register-to-register (see
RISC bets that a stream of simple, identical-shaped instructions can be pipelined so smoothly that it beats a stream of complex ones — even though there are more of them.
| Property | CISC (x86) | RISC (ARM, RISC-V, MIPS) |
|---|---|---|
| Instruction length | variable (1–15 bytes) | fixed (usually 32 bits) |
| Memory operands in ALU ops | yes (register–memory) | no (load–store only) |
| Addressing modes | many, complex | few, simple |
| Control implementation | microcoded | hardwired |
| Registers | few (8 legacy, 16 in x86-64) | many (32) |
| Instructions per program (IC) | lower | higher |
| Cycles per instruction (CPI) | higher, less predictable | lower, pipelines cleanly |
| Decode difficulty | hard | easy |
| Design philosophy | clever hardware | clever compiler |
The whole debate is really a fight over two factors of the
CISC pushes IC down (one big instruction replaces several) but CPI up (that
instruction is slow and messy to execute). RISC does the opposite: IC up (more, smaller
instructions) but CPI down (each pipelines beautifully, often near CPI = 1). Since it's the
product that determines speed, the winner is whoever gets a better combined result — and the
clock term
Here is how the argument actually resolved. Starting with the Pentium Pro (1995), Intel and AMD kept the
So a modern
Because the CISC façade is not free. Decoding variable-length
The R in RISC is the most misread letter in computing. People assume it means a RISC chip has a small number of instructions. It doesn't — RISC-V with all its extensions has hundreds of instructions, more than some old CISC machines. "Reduced" refers to the complexity of each instruction: each does one simple thing in a predictable time. The real distinction is regularity — fixed length, load–store, hardwired control — not a small opcode count. Judge an ISA by how uniform its instructions are, not by how many it has.
RISC vs CISC is best remembered not as "who won" but as a case study in the iron law: two designs balancing IC against CPI, with the clock quietly favouring simplicity. The modern answer — decode a compatible CISC contract into RISC micro-ops — is a beautiful example of the architecture seam at work: the outside contract and the inside implementation are decoupled, and each optimises for a different thing. From here we stop comparing and start building: the next lesson opens up RISC-V's actual registers and 32-bit encoding.