La idea detrás de la mayoría de los esquemas de microprogramación es implementar el conjunto de instrucciones “macro” que los compiladores de la computadora suelen generar (por ejemplo, código de máquina x86). Las macro instrucciones se almacenan en la computadora, para ejecutarse a pedido.
Puede compilar las macroinstrucciones y producir microinstrucciones. Surgen varios problemas:
- ¿Dónde vive el compilador?
- ¿Dónde se coloca el microcódigo compilado y qué lo colocó allí?
- ¿Necesita mantener las macro instrucciones si están compiladas?
Dependiendo de sus respuestas a estas preguntas, obtendrá diferentes arquitecturas de sistema.
- ¿Por qué la salida del siguiente 1 0 10?
- Para alguien que busca especializarse en ingeniería informática, ¿es Cal Poly Pomona, el estado de San Diego o la Universidad Gonzaga la mejor opción?
- ¿Cuál es la diferencia entre la computación heterogénea y una CPU con gráficos integrados?
- ¿Debe un ingeniero informático tomar el cálculo 3 si es opcional?
- ¿Cuáles son los tipos de proyectos en ingeniería informática en los que necesitará muchos conocimientos y experiencia para trabajar?
La aplicación clásica de la microprogramación es interpretar las macro instrucciones de manera eficiente directamente en / en el chip de la CPU (las máquinas x86 son un buen ejemplo de esto) no tienen mucho espacio para un compilador “real”. Los compiladores normales que pueden hacer todo tipo de optimizaciones son enormes bestias y no caben en el chip de la CPU. Entonces, una respuesta es el compilador más trivial que puedas imaginar: la maquinaria de obtención de instrucciones recoge cada macroinstrucción y produce una secuencia corta y enlatada de microinstrucciones que implementan la macroinstrucción, cada vez que se obtiene una nueva instrucción. En este caso, el “compilador” vive en la lógica de obtención de instrucciones. “Produce” es un término divertido: en la microprogramación clásica, las microinstrucciones no se generan realmente; se almacenan en alguna ROM interna en el momento de la fabricación del chip y simplemente se buscan en tiempo de ejecución. Esto responde a la pregunta de dónde vive el código compilado y cómo llegó allí. Este enfoque es técnicamente sencillo y es la forma común de implementar un esquema de microprogramación.
Las CPU de Transmeta (ahora una empresa muerta) tenían un esquema más complicado para implementar el conjunto de instrucciones x86. (Mi memoria sobre esto es inestable ya que solo escuché sobre esto desde lejos; se aceptaron correcciones). Cuando se toca por primera vez una página VM de código, un compilador especial integrado en el chip traduciría toda la página de códigos en micro instrucciones, las almacenaría donde la micro CPU podría verlas y luego se ejecutarían. El compilador en chip no era muy grande, por lo que podría enviarse como parte de la CPU. No sé “dónde” se colocó el microcódigo compilado; debe haber habido alguna forma para que el compilador estacione el código compilado donde el micro motor pueda verlo / ejecutarlo. Pero esa área no puede haber sido grande porque los chips de CPU siempre tienen recursos limitados y deben haber actuado como un caché. Por lo tanto, las instrucciones de macro se conservan porque la ejecución de otro código de macro podría hacer que el caché se vacíe, y es posible que las instrucciones de macro originales deban volver a compilarse más adelante.
Si está dispuesto a lanzar un gran compilador al código, puede simplemente compilar todo el programa macro en un conjunto de instrucciones “micro” equivalente. Creo que hay emuladores x86 para compilar con otros conjuntos de instrucciones nativas (por ejemplo, viene a la mente el IA64 de Intel). En teoría, no necesita el código de macro después de hacer esto. En la práctica, debido a que uno no siempre puede estar seguro de si un byte en la aplicación de macro es código o datos, es probable que tenga que guardarlo y compilar en línea cuando un byte de datos se descubre de repente como un código de operación.
Entonces, sí, puedes compilar microcódigo. En una variedad de formas interesantes.