stringtranslate.com

Set de instrucciones arquitectura

En informática , una arquitectura de conjunto de instrucciones ( ISA ) es parte del modelo abstracto de una computadora , que generalmente define cómo el software controla la CPU. [1] Un dispositivo que ejecuta instrucciones descritas por ese ISA, como una unidad central de procesamiento (CPU), se denomina implementación .

En general, una ISA define las instrucciones admitidas , los tipos de datos , los registros , el soporte de hardware para administrar la memoria principal , las características fundamentales (como la consistencia de la memoria , los modos de direccionamiento , la memoria virtual ) y el modelo de entrada/salida de una familia de implementaciones. de la ISA.

Una ISA especifica el comportamiento del código de máquina que se ejecuta en implementaciones de esa ISA de una manera que no depende de las características de esa implementación, proporcionando compatibilidad binaria entre implementaciones. Esto permite múltiples implementaciones de una ISA que difieren en características como rendimiento , tamaño físico y costo monetario (entre otras cosas), pero que son capaces de ejecutar el mismo código de máquina, de modo que una máquina de menor rendimiento y menor costo pueda ser reemplazado por una máquina de mayor costo y mayor rendimiento sin tener que reemplazar el software. También permite la evolución de las microarquitecturas de las implementaciones de esa ISA, de modo que una implementación más nueva y de mayor rendimiento de una ISA pueda ejecutar software que se ejecuta en generaciones anteriores de implementaciones.

Si un sistema operativo mantiene una interfaz binaria de aplicación (ABI) estándar y compatible para una ISA en particular, el código de máquina se ejecutará en futuras implementaciones de esa ISA y sistema operativo. Sin embargo, si una ISA admite la ejecución de múltiples sistemas operativos, no garantiza que el código de máquina para un sistema operativo se ejecute en otro sistema operativo, a menos que el primer sistema operativo admita la ejecución de código de máquina creado para el otro sistema operativo.

Una ISA se puede ampliar agregando instrucciones u otras capacidades, o agregando soporte para direcciones y valores de datos más grandes; una implementación de ISA extendida aún podrá ejecutar código de máquina para versiones de ISA sin esas extensiones. El código de máquina que utiliza esas extensiones solo se ejecutará en implementaciones que admitan esas extensiones.

La compatibilidad binaria que proporcionan convierte a las ISA en una de las abstracciones más fundamentales de la informática .

Descripción general

Una arquitectura de conjunto de instrucciones se distingue de una microarquitectura , que es el conjunto de técnicas de diseño de procesador utilizadas, en un procesador particular, para implementar el conjunto de instrucciones. Los procesadores con diferentes microarquitecturas pueden compartir un conjunto de instrucciones común. Por ejemplo, Intel Pentium y AMD Athlon implementan versiones casi idénticas del conjunto de instrucciones x86 , pero tienen diseños internos radicalmente diferentes.

El concepto de arquitectura , distinto del diseño de una máquina específica, fue desarrollado por Fred Brooks en IBM durante la fase de diseño de System/360 .

Antes de NPL [System/360], los diseñadores de computadoras de la compañía habían tenido libertad para cumplir con los objetivos de costos no sólo seleccionando tecnologías sino también diseñando mejoras funcionales y arquitectónicas. El objetivo de compatibilidad SPREAD, por el contrario, postulaba una arquitectura única para una serie de cinco procesadores que abarcaban una amplia gama de costos y rendimiento. Ninguno de los cinco equipos de diseño de ingeniería podía contar con poder realizar ajustes en las especificaciones arquitectónicas como una forma de aliviar las dificultades para lograr los objetivos de costos y desempeño. [2] : p.137 

Algunas máquinas virtuales que admiten código de bytes como su ISA, como Smalltalk , la máquina virtual Java y Common Language Runtime de Microsoft , implementan esto traduciendo el código de bytes de las rutas de código comúnmente utilizadas a código de máquina nativo. Además, estas máquinas virtuales ejecutan rutas de código utilizadas con menos frecuencia mediante interpretación (consulte: Compilación justo a tiempo ). Transmeta implementó el conjunto de instrucciones x86 sobre procesadores VLIW de esta manera.

Clasificación de las ISA

Una ISA se puede clasificar de varias maneras diferentes. Una clasificación común es por complejidad arquitectónica . Una computadora con conjunto de instrucciones complejas (CISC) tiene muchas instrucciones especializadas, algunas de las cuales rara vez se usan en programas prácticos. Una computadora con conjunto de instrucciones reducido (RISC) simplifica el procesador al implementar de manera eficiente solo las instrucciones que se usan con frecuencia en los programas, mientras que las operaciones menos comunes se implementan como subrutinas, lo que compensa el tiempo adicional de ejecución del procesador resultante por el uso poco frecuente. [3]

Otros tipos incluyen arquitecturas de palabras de instrucción muy largas (VLIW), y las arquitecturas de palabras de instrucciones largas (LIW) [ cita requerida ] estrechamente relacionadas y de computación de instrucciones explícitamente paralela (EPIC). Estas arquitecturas buscan explotar el paralelismo a nivel de instrucción con menos hardware que RISC y CISC al hacer que el compilador sea responsable de la emisión y programación de las instrucciones. [4]

Se han estudiado arquitecturas con una complejidad aún menor, como la computadora con conjunto mínimo de instrucciones (MISC) y la computadora con un conjunto de instrucciones (OISC). Estos son tipos teóricamente importantes, pero no se han comercializado. [5] [6]

Instrucciones

El lenguaje de máquina se construye a partir de declaraciones o instrucciones discretas . En la arquitectura de procesamiento, una instrucción determinada puede especificar:

registros
valores literales/constantes
Modos de direccionamiento utilizados para acceder a la memoria.

Se construyen operaciones más complejas combinando estas instrucciones simples, que se ejecutan secuencialmente o según lo indiquen las instrucciones de flujo de control .

Tipos de instrucción

Ejemplos de operaciones comunes a muchos conjuntos de instrucciones incluyen:

Manejo de datos y operaciones de memoria.

Operaciones aritméticas y lógicas.

Controlar las operaciones de flujo

Instrucciones del coprocesador

Instrucciones complejas

Los procesadores pueden incluir instrucciones "complejas" en su conjunto de instrucciones. Una sola instrucción "compleja" hace algo que puede requerir muchas instrucciones en otras computadoras. Dichas instrucciones se caracterizan por instrucciones que toman múltiples pasos, controlan múltiples unidades funcionales o aparecen en una escala mayor que la mayor parte de instrucciones simples implementadas por el procesador dado. Algunos ejemplos de instrucciones "complejas" incluyen:

Las instrucciones complejas son más comunes en los conjuntos de instrucciones CISC que en los conjuntos de instrucciones RISC, pero los conjuntos de instrucciones RISC también pueden incluirlas. Los conjuntos de instrucciones RISC generalmente no incluyen operaciones ALU con operandos de memoria o instrucciones para mover grandes bloques de memoria, pero la mayoría de los conjuntos de instrucciones RISC incluyen instrucciones SIMD o vectoriales que realizan la misma operación aritmética en múltiples datos al mismo tiempo. Las instrucciones SIMD tienen la capacidad de manipular vectores y matrices grandes en un tiempo mínimo. Las instrucciones SIMD permiten una fácil paralelización de algoritmos comúnmente involucrados en el procesamiento de sonido, imágenes y video. Se han lanzado al mercado varias implementaciones de SIMD con nombres comerciales como MMX , 3DNow! y AltiVec .

Codificación de instrucciones

Una instrucción puede tener varios campos que identifican la operación lógica y también puede incluir direcciones de origen y destino y valores constantes. Esta es la instrucción MIPS "Agregar Inmediato", que permite la selección de registros de origen y destino y la inclusión de una pequeña constante.

En las arquitecturas tradicionales, una instrucción incluye un código de operación que especifica la operación a realizar, como agregar contenido de memoria para registrar , y cero o más especificadores de operandos , que pueden especificar registros , ubicaciones de memoria o datos literales. Los especificadores de operandos pueden tener modos de direccionamiento que determinen su significado o pueden estar en campos fijos. En las arquitecturas de palabras de instrucción muy largas (VLIW), que incluyen muchas arquitecturas de microcódigo , se especifican múltiples códigos de operación y operandos simultáneos en una sola instrucción.

Algunos conjuntos de instrucciones exóticos no tienen un campo de código de operación, como las arquitecturas activadas por transporte (TTA), solo operandos.

La mayoría de las máquinas de pila tienen conjuntos de instrucciones de " operando 0 " en los que las operaciones aritméticas y lógicas carecen de campos especificadores de operandos; sólo las instrucciones que insertan operandos en la pila de evaluación o que extraen operandos de la pila en variables tienen especificadores de operandos. El conjunto de instrucciones lleva a cabo la mayoría de las acciones de ALU con operaciones de sufijo ( notación polaca inversa ) que funcionan solo en la pila de expresiones , no en registros de datos ni celdas de memoria principal arbitrarias. Esto puede resultar muy conveniente para compilar lenguajes de alto nivel, porque la mayoría de las expresiones aritméticas se pueden traducir fácilmente a notación postfija. [8]

Las instrucciones condicionales suelen tener un campo de predicado: unos pocos bits que codifican la condición específica para provocar que se realice una operación en lugar de no realizarse. Por ejemplo, una instrucción de bifurcación condicional transferirá el control si la condición es verdadera, de modo que la ejecución continúe a una parte diferente del programa, y ​​no transferirá el control si la condición es falsa, de modo que la ejecución continúe secuencialmente. Algunos conjuntos de instrucciones también tienen movimientos condicionales, de modo que el movimiento se ejecutará y los datos se almacenarán en la ubicación de destino, si la condición es verdadera, y no se ejecutarán, y la ubicación de destino no se modificará, si la condición es falsa. De manera similar, IBM z/Architecture tiene una instrucción de almacenamiento condicional. Algunos conjuntos de instrucciones incluyen un campo de predicado en cada instrucción; esto se llama predicación de rama .

Número de operandos

Los conjuntos de instrucciones pueden clasificarse según el número máximo de operandos especificados explícitamente en las instrucciones.

(En los ejemplos siguientes, a , b y c son direcciones (directas o calculadas) que se refieren a celdas de memoria, mientras que reg1 , etc., se refieren a registros de máquina).

C = A+B

Debido a la gran cantidad de bits necesarios para codificar los tres registros de una instrucción de 3 operandos, las arquitecturas RISC que tienen instrucciones de 16 bits son invariablemente diseños de 2 operandos, como Atmel AVR, TI MSP430 y algunas versiones de ARM Thumb . . Las arquitecturas RISC que tienen instrucciones de 32 bits suelen ser diseños de 3 operandos, como las arquitecturas ARM , AVR32 , MIPS , Power ISA y SPARC .

Cada instrucción especifica explícitamente una cantidad determinada de operandos (registros, ubicaciones de memoria o valores inmediatos) . Algunas instrucciones proporcionan uno o ambos operandos implícitamente, por ejemplo, al almacenarlas en la parte superior de la pila o en un registro implícito. Si algunos de los operandos se dan implícitamente, será necesario especificar menos operandos en la instrucción. Cuando un "operando de destino" especifica explícitamente el destino, se debe proporcionar un operando adicional. En consecuencia, el número de operandos codificados en una instrucción puede diferir del número matemáticamente necesario de argumentos para una operación lógica o aritmética (la aridad ). Los operandos se codifican en la representación de "código de operación" de la instrucción o se proporcionan como valores o direcciones después del código de operación.

Registrar presión

La presión de registros mide la disponibilidad de registros gratuitos en cualquier momento durante la ejecución del programa. La presión de registro es alta cuando se utiliza una gran cantidad de registros disponibles; por lo tanto, cuanto mayor sea la presión del registro, más a menudo el contenido del registro deberá derramarse en la memoria. Aumentar el número de registros en una arquitectura disminuye la presión de los registros pero aumenta el costo. [12]

Mientras que los conjuntos de instrucciones integradas, como Thumb, sufren una presión de registro extremadamente alta porque tienen conjuntos de registros pequeños, los ISA RISC de uso general como MIPS y Alpha disfrutan de una presión de registro baja. Los ISA CISC como x86-64 ofrecen una presión de registro baja a pesar de tener conjuntos de registros más pequeños. Esto se debe a los numerosos modos de direccionamiento y optimizaciones (como direccionamiento de subregistro, operandos de memoria en instrucciones ALU, direccionamiento absoluto, direccionamiento relativo a PC y derrames de registro a registro) que ofrecen los CISC ISA. [13]

Duración de la instrucción

El tamaño o la longitud de una instrucción varía ampliamente, desde tan solo cuatro bits en algunos microcontroladores hasta muchos cientos de bits en algunos sistemas VLIW . Los procesadores utilizados en computadoras personales , mainframes y supercomputadoras tienen tamaños de instrucción mínimos entre 8 y 64 bits. La instrucción más larga posible en x86 es de 15 bytes (120 bits). [14] Dentro de un conjunto de instrucciones, diferentes instrucciones pueden tener diferentes longitudes. En algunas arquitecturas, en particular la mayoría de las computadoras con conjunto de instrucciones reducido (RISC),Las instrucciones tienen una longitud fija y normalmente se corresponden con el tamaño de palabra de esa arquitectura . En otras arquitecturas, las instrucciones tienen longitud variable , normalmente múltiplos integrales de un byte o media palabra . Algunos, como ARM con extensión Thumb, tienen codificación variable mixta , es decir, dos codificaciones fijas, generalmente de 32 y 16 bits, donde las instrucciones no se pueden mezclar libremente sino que se deben alternar en una rama (o límite de excepción en ARMv8). ).

Las instrucciones de longitud fija son menos complicadas de manejar que las de longitud variable por varias razones (no tener que comprobar si una instrucción se extiende a ambos lados de una línea de caché o del límite de una página de memoria virtual, [11] , por ejemplo) y, por lo tanto, son algo más fáciles de optimizar. velocidad.

Densidad de código

A principios de la década de 1960, la memoria principal era cara y muy limitada, incluso en los mainframes. Minimizar el tamaño de un programa para asegurarse de que encajara en la memoria limitada era a menudo fundamental. Así, el tamaño de las instrucciones necesarias para realizar una tarea particular, la densidad del código , era una característica importante de cualquier conjunto de instrucciones. Siguió siendo importante en las memorias inicialmente pequeñas de las minicomputadoras y luego de los microprocesadores. La densidad sigue siendo importante hoy en día, para aplicaciones de teléfonos inteligentes, aplicaciones descargadas en navegadores a través de conexiones lentas a Internet y en ROM para aplicaciones integradas. Una ventaja más general de una mayor densidad es la eficacia mejorada de las cachés y la captación previa de instrucciones.

Las computadoras con alta densidad de código a menudo tienen instrucciones complejas para la entrada de procedimientos, retornos parametrizados, bucles, etc. (por lo que retroactivamente se denominan Computadoras con conjunto de instrucciones complejas , CISC ). Sin embargo, las instrucciones "CISC" más típicas o frecuentes simplemente combinan una operación ALU básica, como "agregar", con el acceso de uno o más operandos en la memoria (usando modos de direccionamiento como directo, indirecto, indexado, etc.) . Ciertas arquitecturas pueden permitir dos o tres operandos (incluido el resultado) directamente en la memoria o pueden realizar funciones como el incremento automático del puntero, etc. Los conjuntos de instrucciones implementados por software pueden tener instrucciones aún más complejas y poderosas.

Las computadoras con conjunto de instrucciones reducido , RISC , se implementaron ampliamente por primera vez durante un período de subsistemas de memoria en rápido crecimiento. Sacrifican la densidad del código para simplificar los circuitos de implementación e intentan aumentar el rendimiento mediante frecuencias de reloj más altas y más registros. Una única instrucción RISC normalmente realiza una sola operación, como "agregar" registros o "cargar" desde una ubicación de memoria a un registro. Un conjunto de instrucciones RISC normalmente tiene una longitud de instrucción fija, mientras que un conjunto de instrucciones CISC típico tiene instrucciones de longitud muy variable. Sin embargo, como las computadoras RISC normalmente requieren más instrucciones y a menudo más largas para implementar una tarea determinada, inherentemente hacen un uso menos óptimo del ancho de banda del bus y de las memorias caché.

Ciertos RISC ISA integrados, como Thumb y AVR32, suelen exhibir una densidad muy alta debido a una técnica llamada compresión de código. Esta técnica empaqueta dos instrucciones de 16 bits en una palabra de 32 bits, que luego se descomprime en la etapa de decodificación y se ejecuta como dos instrucciones. [15]

Las computadoras con conjunto mínimo de instrucciones (MISC) son comúnmente una forma de máquina apilada , donde hay pocas instrucciones separadas (8 a 32), de modo que se pueden colocar varias instrucciones en una sola palabra de máquina. Estos tipos de núcleos a menudo requieren poco silicio para implementarse, por lo que se pueden realizar fácilmente en una FPGA o en forma de múltiples núcleos . La densidad de código de MISC es similar a la densidad de código de RISC; el aumento de la densidad de instrucción se compensa al requerir más instrucciones primitivas para realizar una tarea. [16] [ verificación fallida ]

Se han realizado investigaciones sobre la compresión ejecutable como mecanismo para mejorar la densidad del código. Las matemáticas de la complejidad de Kolmogorov describen los desafíos y límites de esta.

En la práctica, la densidad del código también depende del compilador . La mayoría de los compiladores de optimización tienen opciones que controlan si se optimiza la generación de código para la velocidad de ejecución o para la densidad del código. Por ejemplo , GCC tiene la opción -Os para optimizar el tamaño del código de máquina pequeño y -O3 para optimizar la velocidad de ejecución a costa de un código de máquina más grande.

Representación

Las instrucciones que constituyen un programa rara vez se especifican utilizando su forma numérica interna ( código de máquina ); pueden ser especificados por programadores que utilizan un lenguaje ensamblador o, más comúnmente, pueden ser generados a partir de lenguajes de programación de alto nivel por parte de compiladores . [17]

Diseño

El diseño de conjuntos de instrucciones es un tema complejo. Hubo dos etapas en la historia del microprocesador. El primero fue el CISC (Computadora con conjunto de instrucciones complejas), que tenía muchas instrucciones diferentes. Sin embargo, en la década de 1970, empresas como IBM investigaron y descubrieron que muchas instrucciones del conjunto podían eliminarse. El resultado fue el RISC (Computadora con conjunto de instrucciones reducido), una arquitectura que utiliza un conjunto más pequeño de instrucciones. Un conjunto de instrucciones más simple puede ofrecer la posibilidad de lograr velocidades más altas, un tamaño de procesador reducido y un consumo de energía reducido. Sin embargo, un conjunto más complejo puede optimizar las operaciones comunes, mejorar la eficiencia de la memoria y la caché o simplificar la programación.

Algunos diseñadores de conjuntos de instrucciones reservan uno o más códigos de operación para algún tipo de llamada al sistema o interrupción del software . Por ejemplo, MOS Technology 6502 usa 00 H , Zilog Z80 usa los ocho códigos C7,CF,D7,DF,E7,EF,F7,FF H [ 18] mientras que Motorola 68000 usa códigos en el rango A000..AFFF H.

Las máquinas virtuales rápidas son mucho más fáciles de implementar si un conjunto de instrucciones cumple con los requisitos de virtualización de Popek y Goldberg . [ se necesita aclaración ]

La diapositiva NOP utilizada en la programación consciente de la inmunidad es mucho más fácil de implementar si el estado "no programado" de la memoria se interpreta como un NOP . [ dudoso ]

En sistemas con múltiples procesadores, los algoritmos de sincronización sin bloqueo son mucho más fáciles de implementar [ cita necesaria ] si el conjunto de instrucciones incluye soporte para algo como " fetch-and-add ", " load-link/store-conditional " (LL/ SC), o " comparación e intercambio atómico ".

Implementación del conjunto de instrucciones

Un conjunto de instrucciones determinado se puede implementar de diversas formas. Todas las formas de implementar un conjunto de instrucciones en particular proporcionan el mismo modelo de programación y todas las implementaciones de ese conjunto de instrucciones pueden ejecutar los mismos ejecutables. Las diversas formas de implementar un conjunto de instrucciones ofrecen diferentes compensaciones entre costo, rendimiento, consumo de energía, tamaño, etc.

Al diseñar la microarquitectura de un procesador, los ingenieros utilizan bloques de circuitos electrónicos "cableados" (a menudo diseñados por separado), como sumadores, multiplexores, contadores, registros, ALU, etc. A menudo se utiliza algún tipo de lenguaje de transferencia de registros para describir la decodificación y secuenciación de cada instrucción de un ISA utilizando esta microarquitectura física. Hay dos formas básicas de construir una unidad de control para implementar esta descripción (aunque muchos diseños utilizan formas intermedias o compromisos):

  1. Algunos diseños de computadora "conectan" el conjunto completo de instrucciones decodificadas y secuenciadas (al igual que el resto de la microarquitectura).
  2. Otros diseños emplean rutinas o tablas de microcódigo (o ambas) para hacer esto, usando ROM o RAM grabables ( almacén de control grabable ), PLA o ambos.

Algunos diseños de CPU microcodificados con un almacén de control grabable lo utilizan para permitir cambiar el conjunto de instrucciones (por ejemplo, el procesador Rekursiv y el Imsys Cjip). [19]

Las CPU diseñadas para informática reconfigurable pueden utilizar matrices de puertas programables en campo (FPGA).

Un intérprete también puede emular una ISA en software . Naturalmente, debido a la sobrecarga de interpretación, esto es más lento que ejecutar programas directamente en el hardware emulado, a menos que el hardware que ejecuta el emulador sea un orden de magnitud más rápido. Hoy en día, es una práctica común que los proveedores de nuevas ISA o microarquitecturas pongan emuladores de software a disposición de los desarrolladores de software antes de que la implementación del hardware esté lista.

A menudo, los detalles de la implementación tienen una fuerte influencia en las instrucciones particulares seleccionadas para el conjunto de instrucciones. Por ejemplo, muchas implementaciones de la canalización de instrucciones solo permiten una única carga de memoria o almacenamiento de memoria por instrucción, lo que lleva a una arquitectura de almacenamiento de carga (RISC). Para poner otro ejemplo, algunas de las primeras formas de implementar la canalización de instrucciones condujeron a un intervalo de retraso .

Las demandas del procesamiento de señales digitales de alta velocidad han ido en la dirección opuesta: obligando a que las instrucciones se implementen de una manera particular. Por ejemplo, para realizar filtros digitales lo suficientemente rápido, la instrucción MAC en un procesador de señal digital (DSP) típico debe utilizar una especie de arquitectura Harvard que pueda recuperar una instrucción y dos palabras de datos simultáneamente, y requiere un proceso de multiplicación-acumulación de un solo ciclo. multiplicador .

Ver también

Referencias

  1. ^ "GLOSARIO: Arquitectura del conjunto de instrucciones (ISA)". arm.com . Archivado desde el original el 11 de noviembre de 2023 . Consultado el 3 de febrero de 2024 .
  2. ^ Pugh, Emerson W.; Johnson, Lyle R.; Palmer, John H. (1991). Sistemas 360 y principios de 370 de IBM . Prensa del MIT. ISBN 0-262-16123-0.
  3. ^ Cristal Chen; Greg Novick; Kirk Shimano (16 de diciembre de 2006). "Arquitectura RISC: RISC frente a CISC". cs.stanford.edu . Consultado el 21 de febrero de 2015 .
  4. ^ Schlansker, Michael S.; Rau, B. Ramakrishna (febrero de 2000). "EPIC: Computación de instrucción explícitamente paralela". Computadora . 33 (2). doi :10.1109/2.820037.
  5. ^ Shaout, Adnan; Eldos, Taisir (verano de 2003). "Sobre la clasificación de la arquitectura informática". Revista Internacional de Ciencia y Tecnología . 14 : 3 . Consultado el 2 de marzo de 2023 .
  6. ^ Gilreath, William F.; Laplante, Phillip A. (6 de diciembre de 2012). Arquitectura informática: una perspectiva minimalista . Springer Ciencia + Medios comerciales . ISBN 978-1-4615-0237-1.
  7. ^ ab Hennessy y Patterson 2003, pág. 108.
  8. ^ Durand, Pablo. "Arquitectura del conjunto de instrucciones (ISA)". Introducción a la Informática CS 0 .
  9. ^ Hennessy y Patterson 2003, pág. 92.
  10. ^ ab Hennessy y Patterson 2003, pág. 93.
  11. ^ abc Cocke, John; Markstein, Victoria (enero de 1990). «La evolución de la tecnología RISC en IBM» (PDF) . Revista IBM de investigación y desarrollo . 34 (1): 4-11. doi :10.1147/rd.341.0004 . Consultado el 5 de octubre de 2022 .
  12. ^ Página, Daniel (2009). "11. Compiladores". Una introducción práctica a la arquitectura informática . Saltador. pag. 464. Bibcode : 2009pica.book.....P. ISBN 978-1-84882-255-9.
  13. ^ Venkat, Ashish; Tullsen, Dean M. (2014). Aprovechamiento de la diversidad ISA: diseño de un multiprocesador de chip ISA heterogéneo. 41º Simposio Internacional Anual sobre Arquitectura de Computadores.
  14. ^ "Manual del desarrollador de software de arquitecturas Intel® 64 e IA-32". Corporación Intel . Consultado el 5 de octubre de 2022 .
  15. ^ Tejedor, Vicente M.; McKee, Sally A. (2009). "Preocupaciones por la densidad del código para nuevas arquitecturas ". Conferencia internacional IEEE sobre diseño informático. CiteSeerX 10.1.1.398.1967 . doi :10.1109/ICCD.2009.5413117. 
  16. ^ "RISC frente a CISC". cs.stanford.edu . Consultado el 18 de diciembre de 2021 .
  17. ^ Hennessy y Patterson 2003, pág. 120.
  18. ^ Ganssle, Jack (26 de febrero de 2001). "Depuración proactiva". integrado.com .
  19. ^ "Grandes microprocesadores del pasado y del presente (V 13.4.0)". cpushack.net . Consultado el 25 de julio de 2014 .

Otras lecturas

enlaces externos