In reference guides I see that MOV
is opcodes 88, 89, 8A, ... etc.. Why are there multiple opcodes for one instruction?
3 Answers
That is because those instructions are slightly different from the CPU point of view. Although mnemonic is the same, operands are different. For example in this reference, the instruction column clearly shows the difference between those opcodes.

- 1,278
- 9
- 21
They are for different type of sources and destinations. To the CPU there is so much difference between moving 8 and 16/32 bit values to and from registries and memory locations that it is encoded as different opcodes.

- 67,989
- 17
- 150
- 217
CPU needs to be able to decode the meaning of instruction(s).
As there are multiple kinds of move with different types of operands, CPU needs to know how to interpret them. If opcode was the same, it would not be able to tell if the following bits are register numbers or memory address(es). Not to mention that different types of instructions with same mnemonic are actually encoded using different number of bytes, so CPU would no even be able to tell where next instruction begins.
For details see Appendix B in Intel® 64 and IA-32 Architectures Software Developer’s Manual.

- 9,026
- 2
- 37
- 55