El microcódigo es otro nivel de abstracción más allá del código de máquina. La CPU real está ejecutando microcódigo, y un motor de traducción convierte el código de máquina en microcódigo al vuelo. Esto se hace por una variedad de razones, que incluyen procesadores más rápidos y más pequeños, más fácil de crear un procesador complejo con menos depuración y para compatibilidad con versiones anteriores. Por ejemplo, el conjunto de instrucciones x86 contiene algunas instrucciones de procesamiento de cadenas que rara vez se utilizan. Sin embargo, para seguir siendo compatibles con versiones anteriores, aún deben estar disponibles en los modernos procesadores x86. En lugar de cablear una ruta de ejecución para estas instrucciones, se convierten en microcódigo y se ejecutan. Esto ahorra silicona, mientras que sigue siendo compatible con versiones anteriores.
¿Dónde residen ambos tipos de programas mientras se ejecutan?
El código de máquina reside en el caché (después de ser extraído de la memoria RAM). El código micro reside en un caché de código micro, dependiendo de la arquitectura de la máquina en particular. La memoria caché solo puede ser lo suficientemente grande como para contener suficiente microcódigo para mantener el microcódigo convertido de la instrucción de código de máquina más grande posible, o puede ser una memoria caché más grande que almacena los resultados convertidos de muchos códigos de máquina para que no sea necesario reconvertir todos el código de máquina en cada iteración para pequeños bucles.
En algunas arquitecturas, el microcódigo convertido no se almacena en ninguna parte: la unidad de búsqueda / traducción simplemente escupe una serie de instrucciones de microcódigo basadas en el código de máquina que se está ejecutando actualmente. En este caso, el microcódigo se ejecuta desde una ROM de algún tipo, y el código de la máquina es esencialmente un índice en la ROM, que apunta a la serie de instrucciones de microcódigo que se deben ejecutar para ejecutar completamente la instrucción del código de la máquina.
¿Tiene alguna asignación 1: 1 a instrucciones true-op en lenguaje ensamblador?
El código de máquina y el código de ensamblaje, en general se asignan 1: 1 a las instrucciones de ensamblaje. Depende del ensamblador. Los ensambladores de alto nivel pueden tener un gran conjunto de macros que permiten escribir una línea de código de ensamblaje y el ensamblador producirá varios códigos de máquina.
Pero en general, el lenguaje ensamblador "puro" se puede convertir directamente en código de máquina usando la tabla de conjunto de instrucciones en el manual del procesador.
Sin embargo, no estoy seguro de lo que quieres decir con "instrucciones de operación verdadera". Quizás puedas explicar la referencia.
¿El formato de cualquiera de los dos está definido por la arquitectura del procesador?
El formato del código de máquina y el microcódigo están definidos por la arquitectura del procesador.