Conjuntos de instrucciones (ISA)
El ISA (Instruction Set Architecture) es el conjunto de instrucciones que un microprocesador entiende y puede ejecutar. Es como el idioma nativo del procesador: todos los programas, sin importar en qué lenguaje de alto nivel se escriban (C, Java, Python…), terminan convirtiéndose en estas instrucciones básicas.
1. ¿Qué es una instrucción? #
Una instrucción es una orden muy simple que el procesador ejecuta en pocos ciclos de reloj. Ejemplos:
- Sumar dos números.
- Mover un dato de la memoria a un registro.
- Saltar a otra parte del programa.
Una instrucción se compone de:
- Opcode (Operation Code): qué operación hacer (ej. ADD, MOV).
- Operandos: sobre qué datos hacer la operación (ej. registros, memoria, constantes).
2. Modos de direccionamiento #
Los modos de direccionamiento indican cómo se localizan los datos que usa una instrucción.
Algunos ejemplos:
-
Inmediato: el dato está dentro de la propia instrucción.
MOV A, 5 ; Mueve el valor 5 al registro A -
Directo: la instrucción indica la dirección de memoria.
MOV A, [1000h] ; Copia el contenido de la dirección 1000h al registro A -
Indirecto: el dato está en la dirección que contiene un registro.
MOV A, [BX] ; Copia el contenido de la dirección apuntada por BX -
Indexado: se usa un registro base + un desplazamiento.
MOV A, [BX+4] ; Copia el contenido de la dirección BX+4 -
Relativo: se usa para saltos condicionales, sumando un desplazamiento a la dirección actual del programa.
👉 Gracias a estos modos, el procesador puede trabajar con datos inmediatos, posiciones fijas o direcciones dinámicas.
3. Tipos de instrucciones #
En cualquier ISA se pueden agrupar en varias categorías:
-
De transferencia de datos
- Mover datos entre registros o entre memoria y registros.
- Ejemplo:
MOV A, B
-
Aritméticas y lógicas
-
Operaciones matemáticas o de lógica booleana.
-
Ejemplos:
ADD A, B→ A = A + BSUB A, B→ A = A - BAND A, B→ A = A AND B
-
-
De control de flujo
-
Permiten alterar el orden secuencial del programa.
-
Ejemplos:
JMP etiqueta→ salto incondicional.JZ etiqueta→ salto si el resultado fue cero.
-
-
De entrada/salida
- Interactúan con dispositivos externos.
- Ejemplo en x86:
IN AL, 60h(lee del puerto 60h).
-
Especiales / de sistema
- Manejo de interrupciones, configuración, gestión de memoria.
4. Ejemplos de ISAs modernas #
- x86 / x64 (Intel, AMD): Muy completo y complejo (CISC). Compatible con décadas de software.
- ARM (RISC): Instrucciones simples, optimizadas para bajo consumo y móviles.
- RISC-V: ISA abierta y modular, cualquiera puede extenderla o adaptarla.
- MIPS, SPARC, PowerPC: Ejemplos históricos de arquitecturas RISC que influyeron en el diseño moderno.
5. Ejemplo práctico #
Código en ensamblador x86 para sumar dos números:
1MOV AX, 5 ; Carga el valor 5 en el registro AX 2MOV BX, 3 ; Carga el valor 3 en el registro BX 3ADD AX, BX ; Suma AX + BX y guarda el resultado en AX 4; Resultado: AX = 8
En C, esto sería simplemente:
1int ax = 5; 2int bx = 3; 3ax = ax + bx; // ax = 8
👉 El compilador traduce el C a instrucciones ISA.
Resumen del tema
Conceptos clave #
- ISA (Instruction Set Architecture): contrato y vocabulario de bajo nivel entre el software y el hardware del microprocesador.
- Componentes de una Instrucción: Código de Operación (Opcode) y Operandos (fuente y destino).
- Modos de Direccionamiento: Inmediato (constante en el opcode), Directo (dirección absoluta), Indirecto (puntero en registro), Indexado (base + offset) y Relativo (saltos relativos al PC).
- Categorías de Instrucciones: Transferencia (
MOV,LOAD,STORE), Aritmético-Lógicas (ADD,SUB,AND), Control de flujo (JMP,CALL,RET, saltos condicionales) y E/S (IN,OUT).
Qué debes recordar #
El ISA es la interfaz fundamental que define cómo los compiladores traducen el código de alto nivel a instrucciones ejecutables por la CPU.