¿Por qué MOV no puede tener ambos operandos como ubicaciones de memoria?

Leí que la instrucción MOV no puede tener ubicaciones de memoria para sus dos operandos.

Me gusta: MOV [0012H], [0016H] no está permitido.

¿Porque?

¿Y pueden otras instrucciones tener ubicaciones de memoria para sus dos operandos?

Fue una decisión de diseño cuando crearon la CPU. Tiene más modos de direccionamiento y más instrucciones, más grandes (en términos de cantidad de bits necesarios para representar la instrucción) que obtienen las instrucciones. Y las instrucciones más grandes tardan más tiempo en recuperarse de la memoria.

En otras palabras, el conjunto de instrucciones de x86 no es ortogonal . No es necesariamente malo, al menos no ahora, que solo se escriba una cantidad muy limitada de código ensamblador.

Algunas otras CPU (por ejemplo, MC680xx diseñadas en la misma época) pueden hacer eso.