Estoy un poco confundido entre el nivel de microprogramación y el nivel de lenguaje de máquina. Por ejemplo:
- ¿Dónde residen ambos tipos de programas mientras se ejecutan?
- ¿Tiene una asignación 1: 1 a instrucciones de operación verdadera en lenguaje ensamblador?
- ¿El formato de cualquiera de los dos está definido por la arquitectura del procesador?
Respuestas:
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.
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.
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 del código de máquina y el microcódigo están definidos por la arquitectura del procesador.
fuente
Básicamente, el microcódigo expande un conjunto de instrucciones de CPU limitado para contener instrucciones de nivel superior que serían engorrosas de implementar en hardware, pero relativamente fáciles de construir con las instrucciones existentes. Microcode permite que un procesador con un pequeño conjunto de instrucciones funcione como uno con un conjunto de instrucciones más grande.
Digamos que está trabajando con un conjunto de instrucciones MARIE y desea una función Add x, y, pero la arquitectura solo permite una Add x (que solo agrega lo que está actualmente en el registro a x), por lo que agrega una instrucción de microcódigo:
Ahora cuando su código de lenguaje de máquina dice:
busca la función ADD que agregó a la ROM (su microcódigo) y la ejecuta. Esto es excelente porque aumenta su conjunto de instrucciones, lo que permite un código de máquina más legible, y dado que su microcódigo se almacena en la ROM, también es un poco más rápido que llamar a LOAD y ADD desde la RAM.
Solía trabajar en una empresa que en realidad escribía microcódigo para realizar mediciones personalizadas a velocidades muy altas en sus sistemas más antiguos. Sin embargo, con los avances en FPGA, se han cambiado a aquellos, que son mucho más rápidos (ya que en realidad está implementando las "instrucciones personalizadas" en hardware en lugar de ROM).
fuente
Muchos procesadores son controlados por una máquina de estado cuya secuencia de transición se ve afectada por las instrucciones que se ejecutan. Las "instrucciones" de microcódigo a menudo especifican las interacciones entre varios registros y buses de una manera que no sería visible para un programador.
Por ejemplo, una instrucción de microcódigo para una CPU de 8 bits en el estado n. ° 1 podría especificar que las salidas habilitadas para ambas mitades del contador del programa deberían estar activas (haciendo que el contador del programa salga en el bus de direcciones interno superior e inferior), el la señal de incremento de contador de programa debe estar activa, las señales de enclavamiento de la dirección externa deben estar activas (para que el bus de dirección externo rastree el interno) y la señal de lectura de RAM debe estar activa, y el controlador debe cambiar al estado # 2.
En el estado n. ° 2, el bus de datos externo debe alimentar al bus de datos primario interno, y el registro de instrucciones, que se lee desde ese bus, debe cargarse. El contador del programa debería, como antes, salir en ambas mitades del bus de direcciones y emitirse otra lectura de RAM. Los bits 5-7 del registro de instrucciones deben cargarse en los bits 0-2 del controlador de estado, el bit 3 del registro de estado debe establecerse a menos que los bits 1-7 del registro de instrucciones estén configurados y otros bits del registro de estado debe quedar claro, el resultado neto es que el siguiente estado será # 7- # 15.
Tenga en cuenta que el microcódigo no está realmente definido en términos de instrucciones, sino en términos de combinaciones de señales de control. El hardware no se configurará para permitir instrucciones de uso general en microcódigo, sino para cargar o emitir varios registros desde / hacia los buses en los que se sientan, o conectar diferentes buses entre sí, y usar varios bits o combinaciones de los mismos para Seleccione diferentes estados. Muchos aspectos del diseño estarán cableados (p. Ej., Los códigos de operación FE y FF pueden estar especialmente revestidos en hardware en lugar de en microcódigo). La idea con el microcódigo no es ejecutar programas, sino reemplazar la lógica.
fuente