fbpx
Wikipedia

Conjunto de instrucciones

Un conjunto de instrucciones, repertorio de instrucciones, juego de instrucciones o ISA (del inglés instruction set architecture, «arquitectura del conjunto de instrucciones») es una especificación que detalla las instrucciones que una unidad central de procesamiento puede entender y ejecutar, o el conjunto de todos los comandos implementados por un diseño particular de una CPU. El término describe los aspectos del procesador generalmente visibles para un programador, incluidos los tipos de datos nativos, las instrucciones, los registros, la arquitectura de memoria y las interrupciones, entre otros aspectos.

Existen principalmente tres tipos: CISC (Complex Instruction Set Computer), RISC (Reduced Instruction Set Computer) y SISC (Simple Instruction Set Computing).

La arquitectura del conjunto de instrucciones (ISA) se emplea a veces para distinguir este conjunto de características de la microarquitectura, que son los elementos y técnicas que se emplean para implementar el conjunto de instrucciones. Entre estos elementos se encuentran las microinstrucciones y los sistemas de caché.

Procesadores con diferentes diseños internos pueden compartir un conjunto de instrucciones; por ejemplo, el Intel Pentium y AMD Athlon implementan versiones casi idénticas del conjunto de instrucciones x86, aunque tienen diseños diferentes.

El lenguaje máquina

El lenguaje máquina está construido a partir de los estados discretos o instrucciones. En la arquitectura de procesamiento, una instrucción dada puede especificar muy bien:

  • Registros particulares para operaciones aritméticas, de direccionamiento o de control.
  • Ubicaciones particulares de la memoria.
  • Modos de direccionamiento para interpretar a los operandos. ej.:

"si quieres que el robot cambie un foco quemado súbete a la escalera, alcanza el foco, quita el foco quemado, pon el foco nuevo, baja de la escalera, quita la escalera."

Las operaciones más complejas se construyen a partir de estas, que (en una máquina Von Neumann) se ejecutan secuencialmente, o según el control de flujo.

Muchas o pocas de las operaciones disponibles incluidas en la mayoría de conjuntos son:

  • Desplazamiento.
    • Establecer un registro a un valor constante.
    • Mover datos desde una posición de memoria a un registro y viceversa. Esto se realiza para obtener datos para operaciones matemáticas y su almacenamiento.
    • Leer y escribir datos desde dispositivos de hardware.
  • Operaciones matemáticas.
    • Sumar, restar, multiplicar o dividir dos registros y colocar el resultado en alguno de ellos.
    • Realizar operaciones bit a bit, teniendo el AND y el OR de cada bit en un par de registros, o el NOT de cada bit en un registro.
    • Comparar dos valores que se encuentren en registros (por ejemplo, si son iguales o si uno es mayor que otro).
  • Afectan al flujo de programa.
    • Saltar a otra posición del programa y ejecutar instrucciones allí.
    • Saltar a otra posición si se cumple cierta condición.
    • Saltar a otra posición, pero salvando la posición actual para poder volver (realizar una llamada, por ejemplo call printf).

Algunas computadoras incluyen instrucciones "complejas". Dichas instrucciones pueden tomar muchas instrucciones en otros equipos. Estas se caracterizan por instrucciones que necesitan varios pasos, como el control de múltiples unidades funcionales.

Algunos ejemplos son:

  • Ahorro de registros en la pila.
  • Mover grandes bloques de memoria.
  • Complejas operaciones and/or con aritmética de coma flotante, tales como el seno o la raíz cuadrada.
  • Instrucciones que combinan ALU con un operando de la memoria más que de registros.

Un tipo complejo de la instrucción que ha llegado a ser particularmente popular recientemente es SIMD (Single Instruction, Multiple Data), una operación que realice la misma operación aritmética en pedazos múltiples de datos al mismo tiempo. SIMD tienen la capacidad de manipular vectores y matrices grandes en tiempo mínimo. Las instrucciones de SIMD permiten la paralelización fácil de los algoritmos implicados comúnmente en sonido, imagen, y el proceso video. Varias implementaciones de SIMD se han traído al mercado bajo nombres comerciales tales como MMX, 3DNow! y AltiVec.

Diseñar sistemas de instrucciones es muy complejo. En un principio existieron dos tipos de sistemas, un modo de clasificarlos es por complejidad arquitectónica. El primer tipo era el CISC (Complex Instruction Set Computer) que tenía muchas instrucciones diferentes. En los años 1970, IBM hicieron una investigación en la que encontraron que muchas instrucciones en el sistema podrían ser eliminadas. El resultado fue el segundo tipo, el RISC (Reduced Instruction Set Computer), una arquitectura que utiliza un sistema más pequeño de instrucciones. Un conjunto de instrucción más simple puede ofrecer el potencial para velocidades más altas, tamaño reducido del procesador, y un consumo de energía reducido. Sin embargo, un conjunto más complejo puede optimizar operaciones comunes, mejorar memoria/eficiencia de caché, o simplificar la programación.

Implementación del conjunto de instrucciones

Cualquier conjunto de instrucciones se puede implementar de varias maneras. Todas las maneras de implementar un conjunto de instrucciones dan el mismo modelo programado, y todas pueden hacer funcionar los mismos ejecutables binarios. Las varias maneras de implementar un conjunto de instrucciones dan diversas compensaciones entre el coste, el funcionamiento, el consumo de energía, el tamaño, etc.

Al diseñar microarquitecturas, los ingenieros usaron bloques de circuitos electrónicos “duramente-conectados” (diseñado a menudo por separado) por ejemplo, los multiplexores, los contadores, los registros, las ALU, etcétera. Un cierto tipo del lenguaje de transferencia de registros es a menudo usado para describir la codificación y la secuencia de cada instrucción de ISA usando esta microarquitectura física.

Hay también algunos nuevos diseños de CPU que compilan el conjunto de instrucción a una RAM escribible o FLASH dentro de la CPU (tal como el procesador Recursiv y el Imsys Cjip), o FPGA (computación reconfigurable). Western Digital MCP-1600 es un ejemplo antiguo, usando una ROM dedicada, separada del microcódigo.

ISA se puede también emular en software por un intérprete. Naturalmente, debido a la interpretación de “overhead”, es más lento que ejecutar programas directamente sobre el hardware emulado. Hoy, es práctica para los vendedores de nuevos ISA o microarquitecturas poner emuladores del software a disposición de los desarrolladores de programas informáticos antes de que la implementación del hardware esté lista.

Los detalles de la implementación tienen una influencia fuerte en las instrucciones particulares seleccionadas para el conjunto de instrucción. Por ejemplo, muchas implementaciones de la instrucción “pipline” permiten solamente una carga de memoria (load) o almacén en memoria (store) por instrucción, llevando a carga-almacena arquitectura (RISC). Por otro ejemplo, algunas maneras de implementar la instrucción “pipline” llevaron a una ranura de retardo.

La demanda de procesamiento de señal digital de alta velocidad ha empujado en el sentido contrario, forzando la implementación de instrucción de manera particular. Por ejemplo, para realizar los filtros digitales es bastante insuficiente, la instrucción del MAC en un procesador típico de señal digital (DSP) se debe implementar usando una arquitectura de Harvard que pueda traer una instrucción y dos palabras de datos simultáneamente, y requiere un solo ciclo.

Diseño

Densidad del código

En computadoras antiguas, la memoria del programa era costosa, así que minimizar el tamaño de un programa para asegurar que va a caber en la memoria limitada era a menudo central. Así el tamaño combinado de todas las instrucciones necesitó realizar una tarea particular, la densidad del código, era una característica importante de cualquier sistema de instrucción. Las computadoras con alta densidad del código también tenían a menudo instrucciones complejas para la entrada del procedimiento, los retornos parametrizados, los lazos, etc. Sin embargo, "instrucciones CISC" combinan simplemente una operación básica de la ALU, tal como "add", con el acceso de uno o más operandos en memoria (usando modos de dirección tales como directo, indirecto, indexado). Ciertas arquitecturas pueden permitir dos o tres operandos (incluido el resultado) directamente en memoria o pueden permitir realizar funciones tales como el incremento automático del puntero.

RISC, fueron los primeros implementados con profundidad en el período de rápido crecimiento de las memorias de subsistemas, se reduce el código con el fin de simplificar el circuito de aplicación y con ello tratar de aumentar el rendimiento a través de las frecuencias de reloj más elevadas y el uso de más registros. Las instrucciones RISC suelen realizar sólo una operación, como una "suma" de registros o una "carga" de una posición de memoria en un registro, también suelen utilizar una longitud de instrucciones fijas, mientras que un conjunto de instrucciones típicas CISC tiene instrucciones muchos más cortas que esta longitud fija. Las instrucciones de longitud fija son menos complicadas de manejar que las instrucciones de ancho variable, por varias razones (por ejemplo: no tener que comprobar si una instrucción se extiende a ambos lados de una línea de caché o el límite de memoria virtual de la página), y por lo tanto algo más fácil de optimizar la velocidad. Sin embargo, como los equipos RISC normalmente requieren más y más para implementar las instrucciones que ejecutan una determinada tarea, hacen menos óptimo el uso del ancho de banda y de la memoria caché.

Las computadoras mínimas del conjunto de instrucciones (MISC) son una forma de máquina apilada, donde hay pocas instrucciones separadas (16-64), para poder caber instrucciones múltiples en una sola palabra de máquina. Estos tipos de núcleos llevan a menudo poco silicio para implementarse, así que pueden ser observadas fácilmente en un FPGA o en una forma multinúcleo. La densidad del código es similar al RISC; la densidad creciente de la instrucción es compensada requiriendo más de las instrucciones primitivas para hacer una tarea.

Número de operando

El conjunto de instrucciones puede ser clasificado por el número máximo de operandos explícitamente especificados en las instrucciones (en los ejemplos que siguen, a, b y c se refieren a celdas de memoria, mientras que reg1 y sucesivos se refieren a los registros de la máquina).

0-operando, también llamada máquina de pila: todas las operaciones aritméticas se ejecutan en la parte superior de una o dos posiciones de la pila, push y pop son las instrucciones utilizadas para acceder a la memoria: push a, push b, add, pop c.

1-operando (máquinas de una dirección), también llamadas máquinas de acumulador, incluida en la mayoría de las primeras computadoras y muchos microcontroladores pequeños: la mayoría de instrucciones especifican un operando explícito a la derecha (un registro, una posición de memoria, o una constante) y un operando a la izquierda: load a, add b, store c.

2-operando, la mayoría de las máquinas CISC y RISC entran en esta categoría:
CISC – load a, reg1, add reg1, b; store reg1, c
RISC – cargas que requieren la memoria explícita, las instrucciones serían: load a,reg1; load b,reg2; add reg1,reg2; store reg2,c

3-operando, permite una mejor reutilización de los datos: CISC - bien una sola instrucción: add a, b, c, o más generalmente: move a,reg1; add reg1,b,c como la mayoría de las máquinas se limitan a dos operandos de memoria. RISC - Debido a la gran cantidad de bits necesarios para codificar los tres registros, este esquema no suele estar disponible en los procesadores RISC con pequeñas instrucciones de 16 bits: load a,reg1; load b,reg2; add reg1+reg2->reg3; store reg3,c.

Más operandos, algunas máquinas CISC permiten una variedad de modos de direccionamiento que permiten más de 3 operandos (registros o accesos a memoria), como el VAX "POLY", instrucción de evaluación de polinomio.

Características deseables

Las características que se pretende que tenga un conjunto de instrucciones son cuatro, principalmente:

  • Completo: que se pueda realizar en un tiempo finito cualquier tarea ejecutable con un ordenador (computable o decidible).
  • Eficiente: que permita alta velocidad de cálculo sin exigir una elevada complejidad en su UC y ALU y sin consumir excesivos recursos (memoria), es decir, debe cumplir su tarea en un tiempo razonable minimizando el uso de los recursos.
  • Autocontenidas: esto es, que contengan en sí mismas toda la información necesaria para ejecutarse.
  • Independientes: que no dependan de la ejecución de alguna otra instrucción.

Se puede comprobar que para que un conjunto de instrucciones sea completo solo se necesitan cuatro instrucciones:

  • Escritura.
  • Mover a la izquierda una posición y leer.
  • Mover a la derecha una posición y leer.
  • Parar.

En esta idea se basan las arquitecturas RISC, no obstante, con este conjunto no se puede conseguir la eficiencia del repertorio de instrucciones por lo que en la práctica el conjunto suele ser más amplio en aras de conseguir un mejor rendimiento, tanto en uso de recursos como en consumo de tiempo.

Tipos de instrucciones y ejemplos

Transferencia de datos

Copian datos de un origen a un destino, sin modificar el origen y normalmente sin afectar a los flags o indicadores de condición. Pueden transferir palabras, fracciones de palabras (bytes, media palabra) o bloques completos de n bytes o palabras.

Estas operaciones pueden ser:

  • registro a registro.
  • registro a memoria.
  • memoria a registro.
  • memoria a memoria.
Nemotécnicos más frecuentes
  • move copia el contenido de un registro (o memoria) a otro.
  • store copia el contenido de un registro a memoria.
  • load copia el contenido de una posición de memoria a un registro.
  • move block copia un bloque de datos de una posición de memoria a otra.
  • move multiple copia del origen en varias posiciones de memoria.
  • exchange intercambia el contenido de dos operandos.
  • clear pone a 0 el destinto (todos los bits).
  • set pone a 1 el destino (todos los bits).
  • push introduce un dato en la cabecera de la pila (indicada por el SP).
  • pop saca un dato de la cabecera de la pila (indicada por el SP).

Instrucciones aritméticas

Son efectuadas por la ALU y suelen cambiar los flags o indicadores de condición.

Nemotécnicos más frecuentes
  • add: suma.
  • add with carry: suma con acarreo.
  • subtract: resta.
  • subtract with borrow: resta teniendo en cuenta el adeudo anterior.
  • increment: incrementa en 1 un valor.
  • decrement: decrementa en 1 un valor.
  • multiply: multiplica.
  • divide: divide.
  • extend: aumenta el operando de tamaño.
  • negate: cambia de signo.
  • absolute: valor absoluto.

Pueden tener instrucciones para tratar con números en BCD e incluyen operaciones en coma flotante, lo cual se identifica con una 'f' antes del nombre del nemotécnico como por ejemplo: fabsolute

Instrucciones de comparación

Suelen preceder a una instrucción de bifurcación condicional y modifican los flags. No hay que pensar que las instrucciones de salto condicional dependen de este repertorio, ya que lo único que hace el salto condicional es consultar los flags y salta si precede, pero no depende de ninguna instrucción de comparación. (de hecho cualquier operación aritmética realizada anteriormente a un salto condicional puede provocar que este "salte").

Nemotécnicos más frecuentes
  • compare: resta los dos operandos pero no almacena el resultado, solo modifica los flags.
  • test: compara un cierto valor especificado con el 0.

Instrucciones lógicas

Realizan operaciones booleanas "bit a bit" entre dos operandos. Como las aritméticas también modifican los flags.

Nemotécnicos más frecuentes
  • and: el "y" lógico.
  • or: el "o inclusivo" lógico.
  • xor: el "o exclusivo" lógico.
  • not: la negación lógica. (complemento a 1, no confundir con el cambio de signo "negate" que es el complemento a 2).

Instrucciones de desplazamiento

Pueden ser aritmético o lógico y pueden incluir o no rotaciones. Pueden ser de izquierda a derecha.

Nemotécnicos más frecuentes
  • shift: desplazamiento aritmético o lógico.
  • rotate: rotación con o sin acarreo.

Instrucciones de bits

Comprueban un bit del operando y su valor lo reflejan en el indicador de cero. Pueden poner un bit a 0 o complementarlo.

Nemotécnicos más frecuentes
  • bit test: comprueba un bit.
  • bit clear: comprueba un bit y lo pone a 0.
  • bit set: comprueba un bit y lo pone a 1.

Instrucciones de control

Permiten modificar la secuencia normal de ejecución de un programa, puede hacerse por salto condicional relativo o absoluto.

Se clasifican en cuatro grupos:

  1. salto incondicional
  2. salto condicional
  3. llamada a subrutinas
  4. gestión de las interrupciones

Saltos

Pueden ser condicionales o incondicionales, se suelen especificar como jump o branch, y en el caso de los condicionales se suele llamar jcond o bcond, donde cond es una o más letras que indican la condición que ha de cumplirse para que el salto se produzca.

Incondicional

Salta sin comprobar ninguna condición.

Nemotécnicos más frecuentes: jump o branch.
Condicional

Salta si la condición se cumple.

Nemotécnicos más frecuentes: jcond o bcond.

Llamadas a subrutinas

Invoca la ejecución de funciones anteriormente definidas.

Nemotécnicos más frecuentes: call (llamada) y ret (retorno).

Gestión de interrupciones

Se usan para llamar a las rutinas de servicio de interrupción y esto se puede hacer por hardware o bien por software. Necesita una instrucción similar a return para retornar al contexto anterior pero restableciendo el estado de la máquina, para no afectar a la aplicación a la cual se interrumpió (iret).

Instrucciones de entrada y salida

Son instrucciones de transferencia salvo que el origen/destino de dicho flujo es un puerto de un dispositivo de entrada y salida. Estas instrucciones pueden darse mediante dos alternativas:

  1. E/S "mapeada" en memoria: los periféricos tienen direcciones asignadas de la MP por lo que no se necesitan instrucciones especiales y las operaciones se realizan con las ya vistas, como son: load, store y move.
  2. E/S independiente: necesitan unas instrucciones especiales para indicarle al procesador que nos estamos refiriendo al mapa de direcciones de E/S, ya que este mapa y el mapa de memoria son disjuntos.
Nemotécnicos más frecuentes
  • input o read: permite leer información de un puerto y trasladarla a memoria principal.
  • output o write: permite escribir información en un puerto de un dispositivo.
  • test i/o: lee información de control de un periférico.
  • control i/o: envía información de control hacia un periférico.

Instrucciones de control y misceláneas

Nemoténicos más frecuentes:

  • halt: detiene la ejecución del programa hasta que una interrupción arranca otro programa.
  • wait: sirve para detener la ejecución de un programa hasta que sucede un determinado evento que no es una interrupción (otra condición externa al primer programa).
  • nop: no realiza ninguna operación, sirve para rellenar huecos en un programa o temporizar esperas.
  • enable: habilita las interrupciones.
  • disable: deshabilita las interrupciones.
  • test and set: se utiliza para la implementación de la exclusión mutua, esto es, que un procesador no pueda acceder a un determinado recurso que está siendo usado por otro procesador en ese mismo momento.

Se usan como semáforos, esto es, se declara una variable entera que tendrá el valor 0 si el recurso esta libre y 1 si está siendo utilizado, de manera que si un procesador comprueba y el semáforo está en 1 tendrá que esperar hasta que este cambie a 0 (1 = semáforo rojo y 0 = semáforo verde).

Véase también

Referencias

  •   Datos: Q272683

}}

Un conjunto de instrucciones, repertorio de instrucciones, juego de instrucciones o ISA (del inglés instruction set architecture, «arquitectura del conjunto de instrucciones») es una especificación que detalla las instrucciones que una unidad central de procesamiento puede entender y ejecutar, o el conjunto de todos los comandos implementados por un diseño particular de una CPU. El término describe los aspectos del procesador generalmente visibles para un programador, incluidos los tipos de datos nativos, las instrucciones, los registros, la arquitectura de memoria y las interrupciones, entre otros aspectos.

Existen principalmente tres tipos: CISC (Complex Instruction Set Computer), RISC (Reduced Instruction Set Computer) y SISC (Simple Instruction Set Computing).

La arquitectura del conjunto de instrucciones (ISA) se emplea a veces para distinguir este conjunto de características de la microarquitectura, que son los elementos y técnicas que se emplean para implementar el conjunto de instrucciones. Entre estos elementos se encuentran las microinstrucciones y los sistemas de caché.

Procesadores con diferentes diseños internos pueden compartir un conjunto de instrucciones; por ejemplo, el Intel Pentium y AMD Athlon implementan versiones casi idénticas del conjunto de instrucciones x86, aunque tienen diseños diferentes.

El lenguaje máquina

El lenguaje máquina está construido a partir de los estados discretos o instrucciones. En la arquitectura de procesamiento, una instrucción dada puede especificar muy bien:

  • Registros particulares para operaciones aritméticas, de direccionamiento o de control.
  • Ubicaciones particulares de la memoria.
  • Modos de direccionamiento para interpretar a los operandos. ej.

si quieres que el robot cambie un foco quemado Súbete a la escalera, alcanza el foco, quita el foco quemado, pon el foco nuevo, baja de la escalera, quita la escalera.

Las operaciones más complejas se construyen a partir de estas, que (en una máquina Von Neumann) se ejecutan secuencialmente, o según el control de flujo.

Muchas o pocas de las operaciones disponibles incluidas en la mayoría de conjuntos son:

  • Desplazamiento.
    • Establecer un registro a un valor constante.
    • Mover datos desde una posición de memoria a un registro y viceversa. Esto se realiza para obtener datos para operaciones matemáticas y su almacenamiento.
    • Leer y escribir datos desde dispositivos de hardware.
  • Operaciones matemáticas.
    • Sumar, restar, multiplicar o dividir dos registros y colocar el resultado en alguno de ellos.
    • Realizar operaciones bit a bit, teniendo el AND y el OR de cada bit en un par de registros, o el NOT de cada bit en un registro.
    • Comparar dos valores que se encuentren en registros (por ejemplo, si son iguales o si uno es mayor que otro).
  • Afectan al flujo de programa.
    • Saltar a otra posición del programa y ejecutar instrucciones allí.
    • Saltar a otra posición si se cumple cierta condición.
    • Saltar a otra posición, pero salvando la posición actual para poder volver (realizar una llamada, por ejemplo call printf).

Algunas computadoras incluyen instrucciones "complejas". Dichas instrucciones pueden tomar muchas instrucciones en otros equipos. Estas se caracterizan por instrucciones que necesitan varios pasos, como el control de múltiples unidades funcionales.

Algunos ejemplos son:

  • Ahorro de registros en la pila.
  • Mover grandes bloques de memoria.
  • Complejas operaciones and/or con aritmética de coma flotante, tales como el seno o la raíz cuadrada.
  • Instrucciones que combinan ALU con un operando de la memoria más que de registros.

Un tipo complejo de la instrucción que ha llegado a ser particularmente popular recientemente es SIMD (Single Instruction, Multiple Data), una operación que realice la misma operación aritmética en pedazos múltiples de datos al mismo tiempo. SIMD tienen la capacidad de manipular vectores y matrices grandes en tiempo mínimo. Las instrucciones de SIMD permiten la paralelización fácil de los algoritmos implicados comúnmente en sonido, imagen, y el proceso video. Varias implementaciones de SIMD se han traído al mercado bajo nombres comerciales tales como MMX, 3DNow! y AltiVec.

El diseño de sistemas de instrucción es una edición compleja. Había dos etapas en la historia para el microprocesador. El primer era el CISC (Complex Instruction Set Computer) que tenía muchas instrucciones diferentes. En los años 1970, IBM hicieron la investigación y encontraron que muchas instrucciones en el sistema podrían ser eliminadas. El resultado era el RISC (Reduced Instruction Set Computer), una arquitectura que utiliza un sistema más pequeño de instrucciones. Un conjunto de instrucción más simple puede ofrecer el potencial para velocidades más altas, tamaño reducido del procesador, y consumo de energía reducido. Sin embargo, un conjunto más complejo puede optimizar operaciones comunes, mejorar memoria/eficiencia de caché, o simplificar la programación.

Implementación del conjunto de instrucciones

Cualquier conjunto de instrucciones se puede implementar de varias maneras. Todas las maneras de implementar un conjunto de instrucciones dan el mismo modelo programado, y todas pueden hacer funcionar los mismos ejecutables binarios. Las varias maneras de implementar un conjunto de instrucciones dan diversas compensaciones entre el coste, el funcionamiento, el consumo de energía, el tamaño, etc.

Al diseñar microarquitecturas, los ingenieros usaron bloques de circuitos electrónicos “duramente-conectados” (diseñado a menudo por separado) por ejemplo, los multiplexores, los contadores, los registros, las ALU, etcétera. Un cierto tipo del lenguaje de transferencia de registros es a menudo usado para describir la codificación y la secuencia de cada instrucción de ISA usando esta microarquitectura física.

Hay también algunos nuevos diseños de CPU que compilan el conjunto de instrucción a una RAM escribible o FLASH dentro de la CPU (tal como el procesador Recursiv y el Imsys Cjip), o FPGA (computación reconfigurable). Western Digital MCP-1600 es un ejemplo antiguo, usando una ROM dedicada, separada del microcódigo.

ISA se puede también emular en software por un intérprete. Naturalmente, debido a la interpretación de “overhead”, es más lento que ejecutar programas directamente sobre el hardware emulado. Hoy, es práctica para los vendedores de nuevos ISA o microarquitecturas poner emuladores del software a disposición de los desarrolladores de programas informáticos antes de que la implementación del hardware esté lista.

Los detalles de la implementación tienen una influencia fuerte en las instrucciones particulares seleccionadas para el conjunto de instrucción. Por ejemplo, muchas implementaciones de la instrucción “pipline” permiten solamente una carga de memoria (load) o almacén en memoria (store) por instrucción, llevando a carga-almacena arquitectura (RISC). Por otro ejemplo, algunas maneras de implementar la instrucción “pipline” llevaron a una ranura de retardo.

La demanda de procesamiento de señal digital de alta velocidad ha empujado en el sentido contrario, forzando la implementación de instrucción de manera particular. Por ejemplo, para realizar los filtros digitales es bastante insuficiente, la instrucción del MAC en un procesador típico de señal digital (DSP) se debe implementar usando una arquitectura de Harvard que pueda traer una instrucción y dos palabras de datos simultáneamente, y requiere un solo ciclo.

Diseño

Densidad del código

En computadoras antiguas, la memoria del programa era costosa, así que minimizar el tamaño de un programa para asegurar que va a caber en la memoria limitada era a menudo central. Así el tamaño combinado de todas las instrucciones necesitó realizar una tarea particular, la densidad del código, era una característica importante de cualquier sistema de instrucción. Las computadoras con alta densidad del código también tenían a menudo instrucciones complejas para la entrada del procedimiento, los retornos parametrizados, los lazos, etc. Sin embargo, "instrucciones CISC" combinan simplemente una operación básica de la ALU, tal como "add", con el acceso de uno o más operandos en memoria (usando modos de dirección tales como directo, indirecto, indexado). Ciertas arquitecturas pueden permitir dos o tres operandos (incluido el resultado) directamente en memoria o pueden permitir realizar funciones tales como el incremento automático del puntero.

RISC, fueron los primeros implementados con profundidad en el período de rápido crecimiento de las memorias de subsistemas, se reduce el código con el fin de simplificar el circuito de aplicación y con ello tratar de aumentar el rendimiento a través de las frecuencias de reloj más elevadas y el uso de más registros. Las instrucciones RISC suelen realizar sólo una operación, como una "suma" de registros o una "carga" de una posición de memoria en un registro, también suelen utilizar una longitud de instrucciones fijas, mientras que un conjunto de instrucciones típicas CISC tiene instrucciones muchos más cortas que esta longitud fija. Las instrucciones de longitud fija son menos complicadas de manejar que las instrucciones de ancho variable, por varias razones (por ejemplo: no tener que comprobar si una instrucción se extiende a ambos lados de una línea de caché o el límite de memoria virtual de la página), y por lo tanto algo más fácil de optimizar la velocidad. Sin embargo, como los equipos RISC normalmente requieren más y más para implementar las instrucciones que ejecutan una determinada tarea, hacen menos óptimo el uso del ancho de banda y de la memoria caché.

Las computadoras mínimas del conjunto de instrucciones (MISC) son una forma de máquina apilada, donde hay pocas instrucciones separadas (16-64), para poder caber instrucciones múltiples en una sola palabra de máquina. Estos tipos de núcleos llevan a menudo poco silicio para implementarse, así que pueden ser observadas fácilmente en un FPGA o en una forma multinúcleo. La densidad del código es similar al RISC; la densidad creciente de la instrucción es compensada requiriendo más de las instrucciones primitivas para hacer una tarea.

Número de operando

El conjunto de instrucciones puede ser clasificado por el número máximo de operandos explícitamente especificados en las instrucciones (en los ejemplos que siguen, a, b y c se refieren a celdas de memoria, mientras que reg1 y sucesivos se refieren a los registros de la máquina).

0-operando, también llamada máquina de pila: todas las operaciones aritméticas se ejecutan en la parte superior de una o dos posiciones de la pila, push y pop son las instrucciones utilizadas para acceder a la memoria: push a, push b, add, pop c.

1-operando (máquinas de una dirección), también llamadas máquinas de acumulador, incluida en la mayoría de las primeras computadoras y muchos microcontroladores pequeños: la mayoría de instrucciones especifican un operando explícito a la derecha (un registro, una posición de memoria, o una constante) y un operando a la izquierda: load a, add b, store c.

2-operando, la mayoría de las máquinas CISC y RISC entran en esta categoría:
CISC – load a, reg1, add reg1, b; store reg1, c
RISC – cargas que requieren la memoria explícita, las instrucciones serían: load a,reg1; load b,reg2; add reg1,reg2; store reg2,c

3-operando, permite una mejor reutilización de los datos: CISC - bien una sola instrucción: add a, b, c, o más generalmente: move a,reg1; add reg1,b,c como la mayoría de las máquinas se limitan a dos operandos de memoria. RISC - Debido a la gran cantidad de bits necesarios para codificar los tres registros, este esquema no suele estar disponible en los procesadores RISC con pequeñas instrucciones de 16 bits: load a,reg1; load b,reg2; add reg1+reg2->reg3; store reg3,c.

Más operandos, algunas máquinas CISC permiten una variedad de modos de direccionamiento que permiten más de 3 operandos (registros o accesos a memoria), como el VAX "POLY", instrucción de evaluación de polinomio.

Características deseables

Las características que se pretende que tenga un conjunto de instrucciones son cuatro, principalmente:

  • Completo: que se pueda realizar en un tiempo finito cualquier tarea ejecutable con un ordenador (computable o decidible).
  • Eficiente: que permita alta velocidad de cálculo sin exigir una elevada complejidad en su UC y ALU y sin consumir excesivos recursos (memoria), es decir, debe cumplir su tarea en un tiempo razonable minimizando el uso de los recursos.
  • Autocontenidas: esto es, que contengan en sí mismas toda la información necesaria para ejecutarse.
  • Independientes: que no dependan de la ejecución de alguna otra instrucción.

Se puede comprobar que para que un conjunto de instrucciones sea completo solo se necesitan cuatro instrucciones:

  • Escritura.
  • Mover a la izquierda una posición y leer.
  • Mover a la derecha una posición y leer.
  • Parar.

En esta idea se basan las arquitecturas RISC, no obstante, con este conjunto no se puede conseguir la eficiencia del repertorio de instrucciones por lo que en la práctica el conjunto suele ser más amplio en aras de conseguir un mejor rendimiento, tanto en uso de recursos como en consumo de tiempo.

Tipos de instrucciones y ejemplos

Transferencia de datos

Copian datos de un origen a un destino, sin modificar el origen y normalmente sin afectar a los flags o indicadores de condición. Pueden transferir palabras, fracciones de palabras (bytes, media palabra) o bloques completos de n bytes o palabras.

Estas operaciones pueden ser:

  • registro a registro.
  • registro a memoria.
  • memoria a registro.
  • memoria a memoria.
Nemotécnicos más frecuentes
  • move copia el contenido de un registro (o memoria) a otro.
  • store copia el contenido de un registro a memoria.
  • load copia el contenido de una posición de memoria a un registro.
  • move block copia un bloque de datos de una posición de memoria a otra.
  • move multiple copia del origen en varias posiciones de memoria.
  • exchange intercambia el contenido de dos operandos.
  • clear pone a 0 el destinto (todos los bits).
  • set pone a 1 el destino (todos los bits).
  • push introduce un dato en la cabecera de la pila (indicada por el SP).
  • pop saca un dato de la cabecera de la pila (indicada por el SP).

Instrucciones aritméticas

Son efectuadas por la ALU y suelen cambiar los flags o indicadores de condición.

Nemotécnicos más frecuentes
  • add: suma.
  • add with carry: suma con acarreo.
  • subtract: resta.
  • subtract with borrow: resta teniendo en cuenta el adeudo anterior.
  • increment: incrementa en 1 un valor.
  • decrement: decrementa en 1 un valor.
  • multiply: multiplica.
  • divide: divide.
  • extend: aumenta el operando de tamaño.
  • negate: cambia de signo.
  • absolute: valor absoluto.

Pueden tener instrucciones para tratar con números en BCD e incluyen operaciones en coma flotante, lo cual se identifica con una 'f' antes del nombre del nemotécnico como por ejemplo: fabsolute

Instrucciones de comparación

Suelen preceder a una instrucción de bifurcación condicional y modifican los flags. No hay que pensar que las instrucciones de salto condicional dependen de este repertorio, ya que lo único que hace el salto condicional es consultar los flags y salta si precede, pero no depende de ninguna instrucción de comparación. (de hecho cualquier operación aritmética realizada anteriormente a un salto condicional puede provocar que este "salte").

Nemotécnicos más frecuentes
  • compare: resta los dos operandos pero no almacena el resultado, solo modifica los flags.
  • test: compara un cierto valor especificado con el 0.

Instrucciones lógicas

Realizan operaciones booleanas "bit a bit" entre dos operandos. Como las aritméticas también modifican los flags.

Nemotécnicos más frecuentes
  • and: el "y" lógico.
  • or: el "o inclusivo" lógico.
  • xor: el "o exclusivo" lógico.
  • not: la negación lógica. (complemento a 1, no confundir con el cambio de signo "negate" que es el complemento a 2).

Instrucciones de desplazamiento

Pueden ser aritmético o lógico y pueden incluir o no rotaciones. Pueden ser de izquierda a derecha.

Nemotécnicos más frecuentes
  • shift: desplazamiento aritmético o lógico.
  • rotate: rotación con o sin acarreo.

Instrucciones de bits

Comprueban un bit del operando y su valor lo reflejan en el indicador de cero. Pueden poner un bit a 0 o complementarlo.

Nemotécnicos más frecuentes
  • bit test: comprueba un bit.
  • bit clear: comprueba un bit y lo pone a 0.
  • bit set: comprueba un bit y lo pone a 1.

Instrucciones de control

Permiten modificar la secuencia normal de ejecución de un programa, puede hacerse por salto condicional relativo o absoluto.

Se clasifican en cuatro grupos:

  1. salto incondicional
  2. salto condicional
  3. llamada a subrutinas
  4. gestión de las interrupciones

Saltos

Pueden ser condicionales o incondicionales, se suelen especificar como jump o branch, y en el caso de los condicionales se suele llamar jcond o bcond, donde cond es una o más letras que indican la condición que ha de cumplirse para que el salto se produzca.

Incondicional

Salta sin comprobar ninguna condición.

Nemotécnicos más frecuentes: jump o branch.
Condicional

Salta si la condición se cumple.

Nemotécnicos más frecuentes: jcond o bcond.

Llamadas a subrutinas

Invoca la ejecución de funciones anteriormente definidas.

Nemotécnicos más frecuentes: call (llamada) y ret (retorno).

Gestión de interrupciones

Se usan para llamar a las rutinas de servicio de interrupción y esto se puede hacer por hardware o bien por software. Necesita una instrucción similar a return para retornar al contexto anterior pero restableciendo el estado de la máquina, para no afectar a la aplicación a la cual se interrumpió (iret).

Instrucciones de entrada y salida

Son instrucciones de transferencia salvo que el origen/destino de dicho flujo es un puerto de un dispositivo de entrada y salida. Estas instrucciones pueden darse mediante dos alternativas:

  1. E/S "mapeada" en memoria: los periféricos tienen direcciones asignadas de la MP por lo que no se necesitan instrucciones especiales y las operaciones se realizan con las ya vistas, como son: load, store y move.
  2. E/S independiente: necesitan unas instrucciones especiales para indicarle al procesador que nos estamos refiriendo al mapa de direcciones de E/S, ya que este mapa y el mapa de memoria son disjuntos.
Nemotécnicos más frecuentes
  • input o read: permite leer información de un puerto y trasladarla a memoria principal.
  • output o write: permite escribir información en un puerto de un dispositivo.
  • test i/o: lee información de control de un periférico.
  • control i/o: envía información de control hacia un periférico.

Instrucciones de control y misceláneas

Nemoténicos más frecuentes:

  • halt: detiene la ejecución del programa hasta que una interrupción arranca otro programa.
  • wait: sirve para detener la ejecución de un programa hasta que sucede un determinado evento que no es una interrupción (otra condición externa al primer programa).
  • nop: no realiza ninguna operación, sirve para rellenar huecos en un programa o temporizar esperas.
  • enable: habilita las interrupciones.
  • disable: deshabilita las interrupciones.
  • test and set: se utiliza para la implementación de la exclusión mutua, esto es, que un procesador no pueda acceder a un determinado recurso que está siendo usado por otro procesador en ese mismo momento.

Se usan como semáforos, esto es, se declara una variable entera que tendrá el valor 0 si el recurso esta libre y 1 si está siendo utilizado, de manera que si un procesador comprueba y el semáforo está en 1 tendrá que esperar hasta que este cambie a 0 (1 = semáforo rojo y 0 = semáforo verde).

Véase también

Referencias

  •   Datos: Q272683

conjunto, instrucciones, este, artículo, sobre, informática, detectaron, varios, problemas, favor, edítalo, para, mejorarlo, necesita, wikificado, conforme, convenciones, estilo, wikipedia, carece, fuentes, referencias, aparezcan, fuente, acreditada, este, avi. En este articulo sobre informatica se detectaron varios problemas Por favor editalo para mejorarlo Necesita ser wikificado conforme a las convenciones de estilo de Wikipedia Carece de fuentes o referencias que aparezcan en una fuente acreditada Este aviso fue puesto el 12 de marzo de 2015 Un conjunto de instrucciones repertorio de instrucciones juego de instrucciones o ISA del ingles instruction set architecture arquitectura del conjunto de instrucciones es una especificacion que detalla las instrucciones que una unidad central de procesamiento puede entender y ejecutar o el conjunto de todos los comandos implementados por un diseno particular de una CPU El termino describe los aspectos del procesador generalmente visibles para un programador incluidos los tipos de datos nativos las instrucciones los registros la arquitectura de memoria y las interrupciones entre otros aspectos Existen principalmente tres tipos CISC Complex Instruction Set Computer RISC Reduced Instruction Set Computer y SISC Simple Instruction Set Computing La arquitectura del conjunto de instrucciones ISA se emplea a veces para distinguir este conjunto de caracteristicas de la microarquitectura que son los elementos y tecnicas que se emplean para implementar el conjunto de instrucciones Entre estos elementos se encuentran las microinstrucciones y los sistemas de cache Procesadores con diferentes disenos internos pueden compartir un conjunto de instrucciones por ejemplo el Intel Pentium y AMD Athlon implementan versiones casi identicas del conjunto de instrucciones x86 aunque tienen disenos diferentes Indice 1 El lenguaje maquina 2 Implementacion del conjunto de instrucciones 3 Diseno 3 1 Densidad del codigo 3 2 Numero de operando 3 3 Caracteristicas deseables 4 Tipos de instrucciones y ejemplos 4 1 Transferencia de datos 4 2 Instrucciones aritmeticas 4 3 Instrucciones de comparacion 4 4 Instrucciones logicas 4 5 Instrucciones de desplazamiento 4 6 Instrucciones de bits 4 7 Instrucciones de control 4 7 1 Saltos 4 7 2 Llamadas a subrutinas 4 7 3 Gestion de interrupciones 4 8 Instrucciones de entrada y salida 4 9 Instrucciones de control y miscelaneas 5 Vease tambien 6 Referencias 7 El lenguaje maquina 8 Implementacion del conjunto de instrucciones 9 Diseno 9 1 Densidad del codigo 9 2 Numero de operando 9 3 Caracteristicas deseables 10 Tipos de instrucciones y ejemplos 10 1 Transferencia de datos 10 2 Instrucciones aritmeticas 10 3 Instrucciones de comparacion 10 4 Instrucciones logicas 10 5 Instrucciones de desplazamiento 10 6 Instrucciones de bits 10 7 Instrucciones de control 10 7 1 Saltos 10 7 2 Llamadas a subrutinas 10 7 3 Gestion de interrupciones 10 8 Instrucciones de entrada y salida 10 9 Instrucciones de control y miscelaneas 11 Vease tambien 12 ReferenciasEl lenguaje maquina EditarEl lenguaje maquina esta construido a partir de los estados discretos o instrucciones En la arquitectura de procesamiento una instruccion dada puede especificar muy bien Registros particulares para operaciones aritmeticas de direccionamiento o de control Ubicaciones particulares de la memoria Modos de direccionamiento para interpretar a los operandos ej si quieres que el robot cambie un foco quemado subete a la escalera alcanza el foco quita el foco quemado pon el foco nuevo baja de la escalera quita la escalera Las operaciones mas complejas se construyen a partir de estas que en una maquina Von Neumann se ejecutan secuencialmente o segun el control de flujo Muchas o pocas de las operaciones disponibles incluidas en la mayoria de conjuntos son Desplazamiento Establecer un registro a un valor constante Mover datos desde una posicion de memoria a un registro y viceversa Esto se realiza para obtener datos para operaciones matematicas y su almacenamiento Leer y escribir datos desde dispositivos de hardware Operaciones matematicas Sumar restar multiplicar o dividir dos registros y colocar el resultado en alguno de ellos Realizar operaciones bit a bit teniendo el AND y el OR de cada bit en un par de registros o el NOT de cada bit en un registro Comparar dos valores que se encuentren en registros por ejemplo si son iguales o si uno es mayor que otro Afectan al flujo de programa Saltar a otra posicion del programa y ejecutar instrucciones alli Saltar a otra posicion si se cumple cierta condicion Saltar a otra posicion pero salvando la posicion actual para poder volver realizar una llamada por ejemplo call printf Algunas computadoras incluyen instrucciones complejas Dichas instrucciones pueden tomar muchas instrucciones en otros equipos Estas se caracterizan por instrucciones que necesitan varios pasos como el control de multiples unidades funcionales Algunos ejemplos son Ahorro de registros en la pila Mover grandes bloques de memoria Complejas operaciones and or con aritmetica de coma flotante tales como el seno o la raiz cuadrada Instrucciones que combinan ALU con un operando de la memoria mas que de registros Un tipo complejo de la instruccion que ha llegado a ser particularmente popular recientemente es SIMD Single Instruction Multiple Data una operacion que realice la misma operacion aritmetica en pedazos multiples de datos al mismo tiempo SIMD tienen la capacidad de manipular vectores y matrices grandes en tiempo minimo Las instrucciones de SIMD permiten la paralelizacion facil de los algoritmos implicados comunmente en sonido imagen y el proceso video Varias implementaciones de SIMD se han traido al mercado bajo nombres comerciales tales como MMX 3DNow y AltiVec Disenar sistemas de instrucciones es muy complejo En un principio existieron dos tipos de sistemas un modo de clasificarlos es por complejidad arquitectonica El primer tipo era el CISC Complex Instruction Set Computer que tenia muchas instrucciones diferentes En los anos 1970 IBM hicieron una investigacion en la que encontraron que muchas instrucciones en el sistema podrian ser eliminadas El resultado fue el segundo tipo el RISC Reduced Instruction Set Computer una arquitectura que utiliza un sistema mas pequeno de instrucciones Un conjunto de instruccion mas simple puede ofrecer el potencial para velocidades mas altas tamano reducido del procesador y un consumo de energia reducido Sin embargo un conjunto mas complejo puede optimizar operaciones comunes mejorar memoria eficiencia de cache o simplificar la programacion Implementacion del conjunto de instrucciones EditarCualquier conjunto de instrucciones se puede implementar de varias maneras Todas las maneras de implementar un conjunto de instrucciones dan el mismo modelo programado y todas pueden hacer funcionar los mismos ejecutables binarios Las varias maneras de implementar un conjunto de instrucciones dan diversas compensaciones entre el coste el funcionamiento el consumo de energia el tamano etc Al disenar microarquitecturas los ingenieros usaron bloques de circuitos electronicos duramente conectados disenado a menudo por separado por ejemplo los multiplexores los contadores los registros las ALU etcetera Un cierto tipo del lenguaje de transferencia de registros es a menudo usado para describir la codificacion y la secuencia de cada instruccion de ISA usando esta microarquitectura fisica Hay tambien algunos nuevos disenos de CPU que compilan el conjunto de instruccion a una RAM escribible o FLASH dentro de la CPU tal como el procesador Recursiv y el Imsys Cjip o FPGA computacion reconfigurable Western Digital MCP 1600 es un ejemplo antiguo usando una ROM dedicada separada del microcodigo ISA se puede tambien emular en software por un interprete Naturalmente debido a la interpretacion de overhead es mas lento que ejecutar programas directamente sobre el hardware emulado Hoy es practica para los vendedores de nuevos ISA o microarquitecturas poner emuladores del software a disposicion de los desarrolladores de programas informaticos antes de que la implementacion del hardware este lista Los detalles de la implementacion tienen una influencia fuerte en las instrucciones particulares seleccionadas para el conjunto de instruccion Por ejemplo muchas implementaciones de la instruccion pipline permiten solamente una carga de memoria load o almacen en memoria store por instruccion llevando a carga almacena arquitectura RISC Por otro ejemplo algunas maneras de implementar la instruccion pipline llevaron a una ranura de retardo La demanda de procesamiento de senal digital de alta velocidad ha empujado en el sentido contrario forzando la implementacion de instruccion de manera particular Por ejemplo para realizar los filtros digitales es bastante insuficiente la instruccion del MAC en un procesador tipico de senal digital DSP se debe implementar usando una arquitectura de Harvard que pueda traer una instruccion y dos palabras de datos simultaneamente y requiere un solo ciclo Diseno EditarDensidad del codigo Editar En computadoras antiguas la memoria del programa era costosa asi que minimizar el tamano de un programa para asegurar que va a caber en la memoria limitada era a menudo central Asi el tamano combinado de todas las instrucciones necesito realizar una tarea particular la densidad del codigo era una caracteristica importante de cualquier sistema de instruccion Las computadoras con alta densidad del codigo tambien tenian a menudo instrucciones complejas para la entrada del procedimiento los retornos parametrizados los lazos etc Sin embargo instrucciones CISC combinan simplemente una operacion basica de la ALU tal como add con el acceso de uno o mas operandos en memoria usando modos de direccion tales como directo indirecto indexado Ciertas arquitecturas pueden permitir dos o tres operandos incluido el resultado directamente en memoria o pueden permitir realizar funciones tales como el incremento automatico del puntero RISC fueron los primeros implementados con profundidad en el periodo de rapido crecimiento de las memorias de subsistemas se reduce el codigo con el fin de simplificar el circuito de aplicacion y con ello tratar de aumentar el rendimiento a traves de las frecuencias de reloj mas elevadas y el uso de mas registros Las instrucciones RISC suelen realizar solo una operacion como una suma de registros o una carga de una posicion de memoria en un registro tambien suelen utilizar una longitud de instrucciones fijas mientras que un conjunto de instrucciones tipicas CISC tiene instrucciones muchos mas cortas que esta longitud fija Las instrucciones de longitud fija son menos complicadas de manejar que las instrucciones de ancho variable por varias razones por ejemplo no tener que comprobar si una instruccion se extiende a ambos lados de una linea de cache o el limite de memoria virtual de la pagina y por lo tanto algo mas facil de optimizar la velocidad Sin embargo como los equipos RISC normalmente requieren mas y mas para implementar las instrucciones que ejecutan una determinada tarea hacen menos optimo el uso del ancho de banda y de la memoria cache Las computadoras minimas del conjunto de instrucciones MISC son una forma de maquina apilada donde hay pocas instrucciones separadas 16 64 para poder caber instrucciones multiples en una sola palabra de maquina Estos tipos de nucleos llevan a menudo poco silicio para implementarse asi que pueden ser observadas facilmente en un FPGA o en una forma multinucleo La densidad del codigo es similar al RISC la densidad creciente de la instruccion es compensada requiriendo mas de las instrucciones primitivas para hacer una tarea Numero de operando Editar El conjunto de instrucciones puede ser clasificado por el numero maximo de operandos explicitamente especificados en las instrucciones en los ejemplos que siguen a b y c se refieren a celdas de memoria mientras que reg1 y sucesivos se refieren a los registros de la maquina 0 operando tambien llamada maquina de pila todas las operaciones aritmeticas se ejecutan en la parte superior de una o dos posiciones de la pila push y pop son las instrucciones utilizadas para acceder a la memoria push a push b add pop c 1 operando maquinas de una direccion tambien llamadas maquinas de acumulador incluida en la mayoria de las primeras computadoras y muchos microcontroladores pequenos la mayoria de instrucciones especifican un operando explicito a la derecha un registro una posicion de memoria o una constante y un operando a la izquierda load a add b store c 2 operando la mayoria de las maquinas CISC y RISC entran en esta categoria CISC load a reg1 add reg1 b store reg1 c RISC cargas que requieren la memoria explicita las instrucciones serian load a reg1 load b reg2 add reg1 reg2 store reg2 c3 operando permite una mejor reutilizacion de los datos CISC bien una sola instruccion add a b c o mas generalmente move a reg1 add reg1 b c como la mayoria de las maquinas se limitan a dos operandos de memoria RISC Debido a la gran cantidad de bits necesarios para codificar los tres registros este esquema no suele estar disponible en los procesadores RISC con pequenas instrucciones de 16 bits load a reg1 load b reg2 add reg1 reg2 gt reg3 store reg3 c Mas operandos algunas maquinas CISC permiten una variedad de modos de direccionamiento que permiten mas de 3 operandos registros o accesos a memoria como el VAX POLY instruccion de evaluacion de polinomio Caracteristicas deseables Editar Las caracteristicas que se pretende que tenga un conjunto de instrucciones son cuatro principalmente Completo que se pueda realizar en un tiempo finito cualquier tarea ejecutable con un ordenador computable o decidible Eficiente que permita alta velocidad de calculo sin exigir una elevada complejidad en su UC y ALU y sin consumir excesivos recursos memoria es decir debe cumplir su tarea en un tiempo razonable minimizando el uso de los recursos Autocontenidas esto es que contengan en si mismas toda la informacion necesaria para ejecutarse Independientes que no dependan de la ejecucion de alguna otra instruccion Se puede comprobar que para que un conjunto de instrucciones sea completo solo se necesitan cuatro instrucciones Escritura Mover a la izquierda una posicion y leer Mover a la derecha una posicion y leer Parar En esta idea se basan las arquitecturas RISC no obstante con este conjunto no se puede conseguir la eficiencia del repertorio de instrucciones por lo que en la practica el conjunto suele ser mas amplio en aras de conseguir un mejor rendimiento tanto en uso de recursos como en consumo de tiempo Tipos de instrucciones y ejemplos EditarTransferencia de datos Editar Copian datos de un origen a un destino sin modificar el origen y normalmente sin afectar a los flags o indicadores de condicion Pueden transferir palabras fracciones de palabras bytes media palabra o bloques completos de n bytes o palabras Estas operaciones pueden ser registro a registro registro a memoria memoria a registro memoria a memoria Nemotecnicos mas frecuentesmove copia el contenido de un registro o memoria a otro store copia el contenido de un registro a memoria load copia el contenido de una posicion de memoria a un registro move block copia un bloque de datos de una posicion de memoria a otra move multiple copia del origen en varias posiciones de memoria exchange intercambia el contenido de dos operandos clear pone a 0 el destinto todos los bits set pone a 1 el destino todos los bits push introduce un dato en la cabecera de la pila indicada por el SP pop saca un dato de la cabecera de la pila indicada por el SP Instrucciones aritmeticas Editar Son efectuadas por la ALU y suelen cambiar los flags o indicadores de condicion Nemotecnicos mas frecuentesadd suma add with carry suma con acarreo subtract resta subtract with borrow resta teniendo en cuenta el adeudo anterior increment incrementa en 1 un valor decrement decrementa en 1 un valor multiply multiplica divide divide extend aumenta el operando de tamano negate cambia de signo absolute valor absoluto Pueden tener instrucciones para tratar con numeros en BCD e incluyen operaciones en coma flotante lo cual se identifica con una f antes del nombre del nemotecnico como por ejemplo fabsolute Instrucciones de comparacion Editar Suelen preceder a una instruccion de bifurcacion condicional y modifican los flags No hay que pensar que las instrucciones de salto condicional dependen de este repertorio ya que lo unico que hace el salto condicional es consultar los flags y salta si precede pero no depende de ninguna instruccion de comparacion de hecho cualquier operacion aritmetica realizada anteriormente a un salto condicional puede provocar que este salte Nemotecnicos mas frecuentescompare resta los dos operandos pero no almacena el resultado solo modifica los flags test compara un cierto valor especificado con el 0 Instrucciones logicas Editar Realizan operaciones booleanas bit a bit entre dos operandos Como las aritmeticas tambien modifican los flags Nemotecnicos mas frecuentesand el y logico or el o inclusivo logico xor el o exclusivo logico not la negacion logica complemento a 1 no confundir con el cambio de signo negate que es el complemento a 2 Instrucciones de desplazamiento Editar Pueden ser aritmetico o logico y pueden incluir o no rotaciones Pueden ser de izquierda a derecha Nemotecnicos mas frecuentesshift desplazamiento aritmetico o logico rotate rotacion con o sin acarreo Instrucciones de bits Editar Comprueban un bit del operando y su valor lo reflejan en el indicador de cero Pueden poner un bit a 0 o complementarlo Nemotecnicos mas frecuentesbit test comprueba un bit bit clear comprueba un bit y lo pone a 0 bit set comprueba un bit y lo pone a 1 Instrucciones de control Editar Permiten modificar la secuencia normal de ejecucion de un programa puede hacerse por salto condicional relativo o absoluto Se clasifican en cuatro grupos salto incondicional salto condicional llamada a subrutinas gestion de las interrupcionesSaltos Editar Pueden ser condicionales o incondicionales se suelen especificar como jump o branch y en el caso de los condicionales se suele llamar jcond o bcond donde cond es una o mas letras que indican la condicion que ha de cumplirse para que el salto se produzca IncondicionalSalta sin comprobar ninguna condicion Nemotecnicos mas frecuentes jump o branch CondicionalSalta si la condicion se cumple Nemotecnicos mas frecuentes jcond o bcond Llamadas a subrutinas Editar Invoca la ejecucion de funciones anteriormente definidas Nemotecnicos mas frecuentes call llamada y ret retorno Gestion de interrupciones Editar Se usan para llamar a las rutinas de servicio de interrupcion y esto se puede hacer por hardware o bien por software Necesita una instruccion similar a return para retornar al contexto anterior pero restableciendo el estado de la maquina para no afectar a la aplicacion a la cual se interrumpio iret Instrucciones de entrada y salida Editar Son instrucciones de transferencia salvo que el origen destino de dicho flujo es un puerto de un dispositivo de entrada y salida Estas instrucciones pueden darse mediante dos alternativas E S mapeada en memoria los perifericos tienen direcciones asignadas de la MP por lo que no se necesitan instrucciones especiales y las operaciones se realizan con las ya vistas como son load store y move E S independiente necesitan unas instrucciones especiales para indicarle al procesador que nos estamos refiriendo al mapa de direcciones de E S ya que este mapa y el mapa de memoria son disjuntos Nemotecnicos mas frecuentesinput o read permite leer informacion de un puerto y trasladarla a memoria principal output o write permite escribir informacion en un puerto de un dispositivo test i o lee informacion de control de un periferico control i o envia informacion de control hacia un periferico Instrucciones de control y miscelaneas Editar Nemotenicos mas frecuentes halt detiene la ejecucion del programa hasta que una interrupcion arranca otro programa wait sirve para detener la ejecucion de un programa hasta que sucede un determinado evento que no es una interrupcion otra condicion externa al primer programa nop no realiza ninguna operacion sirve para rellenar huecos en un programa o temporizar esperas enable habilita las interrupciones disable deshabilita las interrupciones test and set se utiliza para la implementacion de la exclusion mutua esto es que un procesador no pueda acceder a un determinado recurso que esta siendo usado por otro procesador en ese mismo momento Se usan como semaforos esto es se declara una variable entera que tendra el valor 0 si el recurso esta libre y 1 si esta siendo utilizado de manera que si un procesador comprueba y el semaforo esta en 1 tendra que esperar hasta que este cambie a 0 1 semaforo rojo y 0 semaforo verde Vease tambien EditarArquitectura ARM Arquitectura Intel Itanium PowerPC IBM S 360 x86 IA 32 x86 64Referencias Editar Datos Q272683 Un conjunto de instrucciones repertorio de instrucciones juego de instrucciones o ISA del ingles instruction set architecture arquitectura del conjunto de instrucciones es una especificacion que detalla las instrucciones que una unidad central de procesamiento puede entender y ejecutar o el conjunto de todos los comandos implementados por un diseno particular de una CPU El termino describe los aspectos del procesador generalmente visibles para un programador incluidos los tipos de datos nativos las instrucciones los registros la arquitectura de memoria y las interrupciones entre otros aspectos Existen principalmente tres tipos CISC Complex Instruction Set Computer RISC Reduced Instruction Set Computer y SISC Simple Instruction Set Computing La arquitectura del conjunto de instrucciones ISA se emplea a veces para distinguir este conjunto de caracteristicas de la microarquitectura que son los elementos y tecnicas que se emplean para implementar el conjunto de instrucciones Entre estos elementos se encuentran las microinstrucciones y los sistemas de cache Procesadores con diferentes disenos internos pueden compartir un conjunto de instrucciones por ejemplo el Intel Pentium y AMD Athlon implementan versiones casi identicas del conjunto de instrucciones x86 aunque tienen disenos diferentes El lenguaje maquina EditarEl lenguaje maquina esta construido a partir de los estados discretos o instrucciones En la arquitectura de procesamiento una instruccion dada puede especificar muy bien Registros particulares para operaciones aritmeticas de direccionamiento o de control Ubicaciones particulares de la memoria Modos de direccionamiento para interpretar a los operandos ej si quieres que el robot cambie un foco quemado Subete a la escalera alcanza el foco quita el foco quemado pon el foco nuevo baja de la escalera quita la escalera Las operaciones mas complejas se construyen a partir de estas que en una maquina Von Neumann se ejecutan secuencialmente o segun el control de flujo Muchas o pocas de las operaciones disponibles incluidas en la mayoria de conjuntos son Desplazamiento Establecer un registro a un valor constante Mover datos desde una posicion de memoria a un registro y viceversa Esto se realiza para obtener datos para operaciones matematicas y su almacenamiento Leer y escribir datos desde dispositivos de hardware Operaciones matematicas Sumar restar multiplicar o dividir dos registros y colocar el resultado en alguno de ellos Realizar operaciones bit a bit teniendo el AND y el OR de cada bit en un par de registros o el NOT de cada bit en un registro Comparar dos valores que se encuentren en registros por ejemplo si son iguales o si uno es mayor que otro Afectan al flujo de programa Saltar a otra posicion del programa y ejecutar instrucciones alli Saltar a otra posicion si se cumple cierta condicion Saltar a otra posicion pero salvando la posicion actual para poder volver realizar una llamada por ejemplo call printf Algunas computadoras incluyen instrucciones complejas Dichas instrucciones pueden tomar muchas instrucciones en otros equipos Estas se caracterizan por instrucciones que necesitan varios pasos como el control de multiples unidades funcionales Algunos ejemplos son Ahorro de registros en la pila Mover grandes bloques de memoria Complejas operaciones and or con aritmetica de coma flotante tales como el seno o la raiz cuadrada Instrucciones que combinan ALU con un operando de la memoria mas que de registros Un tipo complejo de la instruccion que ha llegado a ser particularmente popular recientemente es SIMD Single Instruction Multiple Data una operacion que realice la misma operacion aritmetica en pedazos multiples de datos al mismo tiempo SIMD tienen la capacidad de manipular vectores y matrices grandes en tiempo minimo Las instrucciones de SIMD permiten la paralelizacion facil de los algoritmos implicados comunmente en sonido imagen y el proceso video Varias implementaciones de SIMD se han traido al mercado bajo nombres comerciales tales como MMX 3DNow y AltiVec El diseno de sistemas de instruccion es una edicion compleja Habia dos etapas en la historia para el microprocesador El primer era el CISC Complex Instruction Set Computer que tenia muchas instrucciones diferentes En los anos 1970 IBM hicieron la investigacion y encontraron que muchas instrucciones en el sistema podrian ser eliminadas El resultado era el RISC Reduced Instruction Set Computer una arquitectura que utiliza un sistema mas pequeno de instrucciones Un conjunto de instruccion mas simple puede ofrecer el potencial para velocidades mas altas tamano reducido del procesador y consumo de energia reducido Sin embargo un conjunto mas complejo puede optimizar operaciones comunes mejorar memoria eficiencia de cache o simplificar la programacion Implementacion del conjunto de instrucciones EditarCualquier conjunto de instrucciones se puede implementar de varias maneras Todas las maneras de implementar un conjunto de instrucciones dan el mismo modelo programado y todas pueden hacer funcionar los mismos ejecutables binarios Las varias maneras de implementar un conjunto de instrucciones dan diversas compensaciones entre el coste el funcionamiento el consumo de energia el tamano etc Al disenar microarquitecturas los ingenieros usaron bloques de circuitos electronicos duramente conectados disenado a menudo por separado por ejemplo los multiplexores los contadores los registros las ALU etcetera Un cierto tipo del lenguaje de transferencia de registros es a menudo usado para describir la codificacion y la secuencia de cada instruccion de ISA usando esta microarquitectura fisica Hay tambien algunos nuevos disenos de CPU que compilan el conjunto de instruccion a una RAM escribible o FLASH dentro de la CPU tal como el procesador Recursiv y el Imsys Cjip o FPGA computacion reconfigurable Western Digital MCP 1600 es un ejemplo antiguo usando una ROM dedicada separada del microcodigo ISA se puede tambien emular en software por un interprete Naturalmente debido a la interpretacion de overhead es mas lento que ejecutar programas directamente sobre el hardware emulado Hoy es practica para los vendedores de nuevos ISA o microarquitecturas poner emuladores del software a disposicion de los desarrolladores de programas informaticos antes de que la implementacion del hardware este lista Los detalles de la implementacion tienen una influencia fuerte en las instrucciones particulares seleccionadas para el conjunto de instruccion Por ejemplo muchas implementaciones de la instruccion pipline permiten solamente una carga de memoria load o almacen en memoria store por instruccion llevando a carga almacena arquitectura RISC Por otro ejemplo algunas maneras de implementar la instruccion pipline llevaron a una ranura de retardo La demanda de procesamiento de senal digital de alta velocidad ha empujado en el sentido contrario forzando la implementacion de instruccion de manera particular Por ejemplo para realizar los filtros digitales es bastante insuficiente la instruccion del MAC en un procesador tipico de senal digital DSP se debe implementar usando una arquitectura de Harvard que pueda traer una instruccion y dos palabras de datos simultaneamente y requiere un solo ciclo Diseno EditarDensidad del codigo Editar En computadoras antiguas la memoria del programa era costosa asi que minimizar el tamano de un programa para asegurar que va a caber en la memoria limitada era a menudo central Asi el tamano combinado de todas las instrucciones necesito realizar una tarea particular la densidad del codigo era una caracteristica importante de cualquier sistema de instruccion Las computadoras con alta densidad del codigo tambien tenian a menudo instrucciones complejas para la entrada del procedimiento los retornos parametrizados los lazos etc Sin embargo instrucciones CISC combinan simplemente una operacion basica de la ALU tal como add con el acceso de uno o mas operandos en memoria usando modos de direccion tales como directo indirecto indexado Ciertas arquitecturas pueden permitir dos o tres operandos incluido el resultado directamente en memoria o pueden permitir realizar funciones tales como el incremento automatico del puntero RISC fueron los primeros implementados con profundidad en el periodo de rapido crecimiento de las memorias de subsistemas se reduce el codigo con el fin de simplificar el circuito de aplicacion y con ello tratar de aumentar el rendimiento a traves de las frecuencias de reloj mas elevadas y el uso de mas registros Las instrucciones RISC suelen realizar solo una operacion como una suma de registros o una carga de una posicion de memoria en un registro tambien suelen utilizar una longitud de instrucciones fijas mientras que un conjunto de instrucciones tipicas CISC tiene instrucciones muchos mas cortas que esta longitud fija Las instrucciones de longitud fija son menos complicadas de manejar que las instrucciones de ancho variable por varias razones por ejemplo no tener que comprobar si una instruccion se extiende a ambos lados de una linea de cache o el limite de memoria virtual de la pagina y por lo tanto algo mas facil de optimizar la velocidad Sin embargo como los equipos RISC normalmente requieren mas y mas para implementar las instrucciones que ejecutan una determinada tarea hacen menos optimo el uso del ancho de banda y de la memoria cache Las computadoras minimas del conjunto de instrucciones MISC son una forma de maquina apilada donde hay pocas instrucciones separadas 16 64 para poder caber instrucciones multiples en una sola palabra de maquina Estos tipos de nucleos llevan a menudo poco silicio para implementarse asi que pueden ser observadas facilmente en un FPGA o en una forma multinucleo La densidad del codigo es similar al RISC la densidad creciente de la instruccion es compensada requiriendo mas de las instrucciones primitivas para hacer una tarea Numero de operando Editar El conjunto de instrucciones puede ser clasificado por el numero maximo de operandos explicitamente especificados en las instrucciones en los ejemplos que siguen a b y c se refieren a celdas de memoria mientras que reg1 y sucesivos se refieren a los registros de la maquina 0 operando tambien llamada maquina de pila todas las operaciones aritmeticas se ejecutan en la parte superior de una o dos posiciones de la pila push y pop son las instrucciones utilizadas para acceder a la memoria push a push b add pop c 1 operando maquinas de una direccion tambien llamadas maquinas de acumulador incluida en la mayoria de las primeras computadoras y muchos microcontroladores pequenos la mayoria de instrucciones especifican un operando explicito a la derecha un registro una posicion de memoria o una constante y un operando a la izquierda load a add b store c 2 operando la mayoria de las maquinas CISC y RISC entran en esta categoria CISC load a reg1 add reg1 b store reg1 c RISC cargas que requieren la memoria explicita las instrucciones serian load a reg1 load b reg2 add reg1 reg2 store reg2 c3 operando permite una mejor reutilizacion de los datos CISC bien una sola instruccion add a b c o mas generalmente move a reg1 add reg1 b c como la mayoria de las maquinas se limitan a dos operandos de memoria RISC Debido a la gran cantidad de bits necesarios para codificar los tres registros este esquema no suele estar disponible en los procesadores RISC con pequenas instrucciones de 16 bits load a reg1 load b reg2 add reg1 reg2 gt reg3 store reg3 c Mas operandos algunas maquinas CISC permiten una variedad de modos de direccionamiento que permiten mas de 3 operandos registros o accesos a memoria como el VAX POLY instruccion de evaluacion de polinomio Caracteristicas deseables Editar Las caracteristicas que se pretende que tenga un conjunto de instrucciones son cuatro principalmente Completo que se pueda realizar en un tiempo finito cualquier tarea ejecutable con un ordenador computable o decidible Eficiente que permita alta velocidad de calculo sin exigir una elevada complejidad en su UC y ALU y sin consumir excesivos recursos memoria es decir debe cumplir su tarea en un tiempo razonable minimizando el uso de los recursos Autocontenidas esto es que contengan en si mismas toda la informacion necesaria para ejecutarse Independientes que no dependan de la ejecucion de alguna otra instruccion Se puede comprobar que para que un conjunto de instrucciones sea completo solo se necesitan cuatro instrucciones Escritura Mover a la izquierda una posicion y leer Mover a la derecha una posicion y leer Parar En esta idea se basan las arquitecturas RISC no obstante con este conjunto no se puede conseguir la eficiencia del repertorio de instrucciones por lo que en la practica el conjunto suele ser mas amplio en aras de conseguir un mejor rendimiento tanto en uso de recursos como en consumo de tiempo Tipos de instrucciones y ejemplos EditarTransferencia de datos Editar Copian datos de un origen a un destino sin modificar el origen y normalmente sin afectar a los flags o indicadores de condicion Pueden transferir palabras fracciones de palabras bytes media palabra o bloques completos de n bytes o palabras Estas operaciones pueden ser registro a registro registro a memoria memoria a registro memoria a memoria Nemotecnicos mas frecuentesmove copia el contenido de un registro o memoria a otro store copia el contenido de un registro a memoria load copia el contenido de una posicion de memoria a un registro move block copia un bloque de datos de una posicion de memoria a otra move multiple copia del origen en varias posiciones de memoria exchange intercambia el contenido de dos operandos clear pone a 0 el destinto todos los bits set pone a 1 el destino todos los bits push introduce un dato en la cabecera de la pila indicada por el SP pop saca un dato de la cabecera de la pila indicada por el SP Instrucciones aritmeticas Editar Son efectuadas por la ALU y suelen cambiar los flags o indicadores de condicion Nemotecnicos mas frecuentesadd suma add with carry suma con acarreo subtract resta subtract with borrow resta teniendo en cuenta el adeudo anterior increment incrementa en 1 un valor decrement decrementa en 1 un valor multiply multiplica divide divide extend aumenta el operando de tamano negate cambia de signo absolute valor absoluto Pueden tener instrucciones para tratar con numeros en BCD e incluyen operaciones en coma flotante lo cual se identifica con una f antes del nombre del nemotecnico como por ejemplo fabsolute Instrucciones de comparacion Editar Suelen preceder a una instruccion de bifurcacion condicional y modifican los flags No hay que pensar que las instrucciones de salto condicional dependen de este repertorio ya que lo unico que hace el salto condicional es consultar los flags y salta si precede pero no depende de ninguna instruccion de comparacion de hecho cualquier operacion aritmetica realizada anteriormente a un salto condicional puede provocar que este salte Nemotecnicos mas frecuentescompare resta los dos operandos pero no almacena el resultado solo modifica los flags test compara un cierto valor especificado con el 0 Instrucciones logicas Editar Realizan operaciones booleanas bit a bit entre dos operandos Como las aritmeticas tambien modifican los flags Nemotecnicos mas frecuentesand el y logico or el o inclusivo logico xor el o exclusivo logico not la negacion logica complemento a 1 no confundir con el cambio de signo negate que es el complemento a 2 Instrucciones de desplazamiento Editar Pueden ser aritmetico o logico y pueden incluir o no rotaciones Pueden ser de izquierda a derecha Nemotecnicos mas frecuentesshift desplazamiento aritmetico o logico rotate rotacion con o sin acarreo Instrucciones de bits Editar Comprueban un bit del operando y su valor lo reflejan en el indicador de cero Pueden poner un bit a 0 o complementarlo Nemotecnicos mas frecuentesbit test comprueba un bit bit clear comprueba un bit y lo pone a 0 bit set comprueba un bit y lo pone a 1 Instrucciones de control Editar Permiten modificar la secuencia normal de ejecucion de un programa puede hacerse por salto condicional relativo o absoluto Se clasifican en cuatro grupos salto incondicional salto condicional llamada a subrutinas gestion de las interrupcionesSaltos Editar Pueden ser condicionales o incondicionales se suelen especificar como jump o branch y en el caso de los condicionales se suele llamar jcond o bcond donde cond es una o mas letras que indican la condicion que ha de cumplirse para que el salto se produzca IncondicionalSalta sin comprobar ninguna condicion Nemotecnicos mas frecuentes jump o branch CondicionalSalta si la condicion se cumple Nemotecnicos mas frecuentes jcond o bcond Llamadas a subrutinas Editar Invoca la ejecucion de funciones anteriormente definidas Nemotecnicos mas frecuentes call llamada y ret retorno Gestion de interrupciones Editar Se usan para llamar a las rutinas de servicio de interrupcion y esto se puede hacer por hardware o bien por software Necesita una instruccion similar a return para retornar al contexto anterior pero restableciendo el estado de la maquina para no afectar a la aplicacion a la cual se interrumpio iret Instrucciones de entrada y salida Editar Son instrucciones de transferencia salvo que el origen destino de dicho flujo es un puerto de un dispositivo de entrada y salida Estas instrucciones pueden darse mediante dos alternativas E S mapeada en memoria los perifericos tienen direcciones asignadas de la MP por lo que no se necesitan instrucciones especiales y las operaciones se realizan con las ya vistas como son load store y move E S independiente necesitan unas instrucciones especiales para indicarle al procesador que nos estamos refiriendo al mapa de direcciones de E S ya que este mapa y el mapa de memoria son disjuntos Nemotecnicos mas frecuentesinput o read permite leer informacion de un puerto y trasladarla a memoria principal output o write permite escribir informacion en un puerto de un dispositivo test i o lee informacion de control de un periferico control i o envia informacion de control hacia un periferico Instrucciones de control y miscelaneas Editar Nemotenicos mas frecuentes halt detiene la ejecucion del programa hasta que una interrupcion arranca otro programa wait sirve para detener la ejecucion de un programa hasta que sucede un determinado evento que no es una interrupcion otra condicion externa al primer programa nop no realiza ninguna operacion sirve para rellenar huecos en un programa o temporizar esperas enable habilita las interrupciones disable deshabilita las interrupciones test and set se utiliza para la implementacion de la exclusion mutua esto es que un procesador no pueda acceder a un determinado recurso que esta siendo usado por otro procesador en ese mismo momento Se usan como semaforos esto es se declara una variable entera que tendra el valor 0 si el recurso esta libre y 1 si esta siendo utilizado de manera que si un procesador comprueba y el semaforo esta en 1 tendra que esperar hasta que este cambie a 0 1 semaforo rojo y 0 semaforo verde Vease tambien EditarArquitectura ARM Arquitectura Intel Itanium PowerPC IBM S 360 x86 IA 32 x86 64Referencias Editar Datos Q272683Obtenido de https es wikipedia org w index php title Conjunto de instrucciones amp oldid 136854238, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos