What does an ISA specification define?
It defines the entire programmer-visible state and behavior of a processor: its instructions, operand types, registers, memory model, and instruction encoding.
* An ISA specification pins down five things: operations, operand types, registers and state, memory addressing, and instruction encoding. *
An ISA is essentially a checklist of everything you must agree on so that compiled programs and the chip understand each other. It is usually grouped into a few areas:
- Operations — arithmetic/logical, data transfer, control, system, floating-point, string, and multimedia instructions.
- Type and size of operands — e.g. byte, half-word, word, float, double.
- Memory addressing — how addresses are interpreted (bytes vs. words), byte ordering (little- vs. big-endian), and addressing modes.
- Instruction encoding — the binary representation of each operation and operand, and whether instructions are fixed- or variable-length.
- Registers and processor state — the register file, program counter, condition codes, and control registers.
Interestingly, on x86 a small handful of instructions dominate real programs: loads, conditional branches, compares, stores and adds together make up the large majority of executed instructions — so understanding those few well takes you a long way.
Go deeper:
Instruction set architecture (Wikipedia) — enumerates the programmer-visible state an ISA specifies.