El ISA es el nivel al que se dirige un compilador (aunque las optimizaciones son sensibles a la microarquitectura, particularmente en términos de programación óptima). La ISA es una definición simplificada pero suficiente de la interfaz de hardware.
La ISA describe el comportamiento abstracto del motor de cálculo subyacente y cuáles son las operaciones fundamentales que pueden codificarse en las instrucciones de código de máquina. Definirá qué tipo de registros tiene el procesador, cómo interactúan con la memoria y qué operaciones aritméticas son posibles.
El ISA también puede influir en la facilidad con la que se optimiza la implementación (por ejemplo, tuberías largas o problemas generales) y puede implementar funciones destinadas a lenguajes específicos de alto nivel (o simplificar la tarea de un compilador).
Junto con ISA, habrá garantías arquitectónicas de ordenamiento, excepciones, control de potencia y controles de acceso que también definen la arquitectura del procesador. Estos no son relevantes para un compilador (y con frecuencia requieren de acceso intrínseco), pero son críticos para un sistema operativo (y, a veces, para aplicaciones).
Su diagrama es una abstracción engañosa, aunque cada elemento es distinto, no se interconectan entre sí de la misma manera que lo haría una pila de software. La microarquitectura está, por ejemplo, influenciada por el tamaño de la característica, tanto en términos de tiempo como de costos, la vista a nivel de puerta es lo que piensan los diseñadores cuando trabajan en microarcos).
Para dar un ejemplo de alto nivel de lo que es un ISA, considere cómo se puede dividir una instrucción de 32 bits de longitud fija.
4 bits para el tipo de instrucción (Cargar / Almacenar, ALU, etc.)
4 bits para operación de instrucción (Add / Sub, o modo de direccionamiento)
4 bits para el operando 1 registro
4 bits para registro de operando 2
4 bits para registro de destino
4 bits para control de flujo
4 bits para entrada constante (por ejemplo, cambio de operandos)
4 bits más específicos de la instrucción
Le gustaría asignar estos a algunos superconjuntos de las funciones que necesita para una máquina de turing eficiente. Por lo tanto, la ISA describe con precisión lo que representan el código de máquina y el código de ensamblaje (en una relación más o menos 1: 1). Algunas instrucciones (siendo el ejemplo obvio NOP) se pueden lograr usando un código de operación personalizado o una instrucción de tipo A = A | A si la simetría lo permite.
En referencia a la fuente del diagrama, en arquitectura de computadora, la microarquitectura generalmente no se usaría para referirse a la RAM, ROM y temporizadores en un microcontrolador. Se referiría a cómo se implementa la división de enteros, cuántas instrucciones se pueden ejecutar por ciclo, cuántas cargas pueden ser sobresalientes a la vez, el tipo de detalle que es difícil de observar en el software.