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 la máquina en microcódigo sobre la marcha. Esto se hace por una variedad de razones, que incluyen procesadores más pequeños y rápidos, más fáciles de crear un procesador complejo con menos depuración y compatibilidad con versiones anteriores. Por ejemplo, el conjunto de instrucciones x86 contiene algunas instrucciones de procesamiento de cadenas que rara vez se usan. Sin embargo, para seguir siendo compatibles con versiones anteriores, aún deben estar disponibles en los procesadores x86 modernos. En lugar de cablear una ruta de ejecución para estas instrucciones, se convierten en microcódigo y se ejecutan. Esto ahorra silicio, sin dejar de ser compatible con versiones anteriores.
¿Dónde residen ambos tipos de programas mientras se ejecutan?
El código de la máquina reside en el caché (después de extraerlo de la RAM). El microcódigo reside en un caché de microcódigo, dependiendo de la arquitectura particular de la máquina. El caché solo puede ser lo suficientemente grande como para contener suficiente microcódigo para contener el microcódigo convertido de la instrucción de código de máquina más grande posible, o puede ser un caché más grande que almacena los resultados convertidos de muchos códigos de máquina para que no necesite reconvertir todo El código de máquina en cada iteración para bucles pequeños.
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, apuntando a la serie de instrucciones de microcódigo que deben ejecutarse para ejecutar completamente la instrucción del código de la máquina.
¿Tiene una asignación 1: 1 a instrucciones de operación verdadera 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 utilizando 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 real". 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.