El Microcódigo Detrás de un Simple Intercambio de Registros: Descifrando la Instrucción FXCH del Intel 8087

Fuentes: The Microcode Behind a Simple Register Exchange: Decoding the Intel 8087’s FXCH Instruction
Imagen generada por IA con el prompt: Detailed microscope photograph of Intel 8087 chip die, highlighting central microcode ROM and lower datapath, with red annotations on temporary and stack registers. Scientific, technical style, no faces or text.
Imagen generada con IA

En 1980, Intel introdujo el coprocesador de coma flotante 8087, que aceleró las operaciones de coma flotante hasta 100 veces y estableció un estándar que todavía se utiliza en los procesadores modernos. El chip ejecuta algoritmos complejos, como raíces cuadradas, tangentes y exponenciales, a través de microcódigo, un código de bajo nivel implementado directamente en el hardware. El autor, parte del Opcode Collective, está realizando ingeniería inversa de este microcódigo. Este artículo se centra en la instrucción FXCH (Intercambio de coma flotante), que intercambia el registro de la parte superior de la pila con un registro de pila especificado. A pesar de su aparente simplicidad, FXCH requiere 14 micro-instrucciones. La publicación proporciona un desglose detallado: la arquitectura interna del 8087 incluye una ROM de microcódigo que contiene 1648 micro-instrucciones de 16 bits, una ruta de datos dividida en rutas de exponente y significando, ocho registros de pila con dos bits de etiqueta cada uno, y dos registros temporales (tmpA y tmpB). El microcódigo FXCH transfiere el valor de la parte superior de la pila a tmpA, luego mueve el registro de pila especificado a la parte superior, y copia tmpA a esa posición de pila. Si alguno de los registros está vacío, se genera una excepción y el valor se reemplaza con NaN. El análisis explica cómo las micro-instrucciones (transferencia, desplazamiento, aritméticas, salto/llamada y diversas) componen el algoritmo. Este esfuerzo de ingeniería inversa arroja luz sobre la complejidad oculta de un chip histórico.