EXPOSIÓN 3: Formato de instrucciones, Conjunto de instrucciones, Código de operación, Unidad de control micro-programada

EXPOSIÓN 3: Formato de instrucciones, Conjunto de instrucciones, Código de operación, Unidad de control micro-programada

Formato de instrucciones

El propósito de una instrucción es especificar la acción que debe ser realizada y los operandos sobre los que se efectúa esta acción. Dentro de esos operandos pueden quedar incluidos tanto los datos de la operación como los lugares donde deben depositarse los resultados que la instrucción pueda producir.

Criterios de diseño de los formatos de instrucción

Cuando se diseña un computador ha de elegirse el formato, o formatos, de instrucción considerando multitud de factores. Uno de los factores más importantes a tener en cuenta es la longitud de la palabra de instrucción: ésta puede o no ser igual para todas las instrucciones del computador y puede ser menor, igual o mayor que la longitud de palabra de memoria. Una cuestión a tener en cuenta es que, al menos en principio, las instrucciones cortas son mejores que las largas. Un programa compuesto por n instrucciones de 16 bits ocupa sólo la mitad de espacio que el mismo programa con instrucciones de 32 bits. Esto, en los computadores modernos, no suele suponer un problema; sin embargo, siempre será más rápido leer de memoria un programa que ocupe menos bits, y eso siempre es importante. Por otra parte, en algunas máquinas, es más rápido decodificar instrucciones más cortas. Otro factor a tener en cuenta es que es necesario dejar suficiente espacio en la instrucción para decodificar todas las operaciones deseadas. También conviene que la longitud de instrucción sea múltiplo o submúltiplo de la palabra de memoria.

Número de direcciones

Una de las formas de reducir el número de bits en el formato de instrucción de la figura 2.1 es especificar explícitamente sólo m de los n operandos, dejando implícita la especiación de los n m restantes. Se dice que un procesador es de m direcciones si m es el número máximo de operandos explícitos que tiene una instrucción aritmeticológica genérica.

Las máquinas con organización de registros generales pueden tener instrucciones de dos o tres direcciones, según se especifique o no la dirección del resultado. Ejemplos de este tipo de procesadores son el MC68000, el PDP-11 y el VAX (en este último el número de direcciones puede llegar hasta seis para operaciones complejas)

En las máquinas organizadas en pila no se requieren operandos ya que éstos se localizan en la cima de pila, igual que el resultado. Estas máquinas necesitan instrucciones adicionales para poner y quitar datos de la pila; estas instrucciones sí requieren campo de dirección (PUSH y POP o LOAD y STORE). Un ejemplo de este tipo de máquinas es el HP-3000.

Instrucciones con longitud variable

Algunas máquinas tienen instrucciones con un numero variable de bits. Esto implica que la primera parte de la palabra de instrucción debe tener información sobre el código de operación y sobre el número de operandos que le siguen. De esta forma, la longitud total de la instrucción depende del número de operandos. Sin embargo, en estas máquinas, el número de bits del código de operación suele ser fijo. Un ejemplo de este tipo de formatos lo constituye el VAX.

Instrucciones con código de operación de longitud variable

Una máquina con un formato de instrucción con código de operación de longitud fija de n bits puede tener 2n instrucciones diferentes, que pueden ser monarias, binarias, etc. Sin embargo, puede ser posible mantener una longitud de instrucción fija y variar la longitud del código de operación según diferentes factores, tales como la frecuencia de uso de las instrucciones o el número de operandos de las mismas. En los apartados siguientes se abordará cada uno de estos esquemas.

Codificación de Hoffman

Este método de codificación de las instrucciones se adopta aplicando un principio de diseño básico en Arquitectura de Computadores: mejorar en lo posible los casos más frecuentes. En nuestro caso, este principio se traduce en que las instrucciones más frecuentes tengan códigos de operación más cortos y así minimizar su tiempo de decodificación o la cantidad de memoria ocupada por el programa. En general este tipo de código se puede emplear siempre que se quiera disminuir el número de bits necesarios para una codificación (compresión).

La frecuencia estática, que se refiere a las veces que cada instrucción se utiliza en los programas.

La frecuencia dinámica, que se refiere a las veces que esas instrucciones son ejecutadas, esta frecuencia diferirá de la anterior, por ejemplo, si una instrucción se encuentra en un bucle, ya que se ejecutará muchas veces (frecuencia dinámica alta) pero aparecerá en el programa sólo una vez (frecuencia estática baja).

Según lo que se quiera optimizar en el diseño de un computador se puede utilizar una o la otra. Si se pretende minimizar la cantidad de memoria ocupada por el programa se utilizará la frecuencia estática, ya que la memoria ocupada por el programa depende del número de veces que aparezcan las instrucciones más largas. Sin embargo, si se pretende minimizar el tiempo de decodificación de las instrucciones se utilizará la frecuencia dinámica ya que el número de accesos a memoria depende de las veces que las instrucciones se ejecuten.


Ejemplos de formatos de instrucción en procesadores reales

En este apartado veremos como las técnicas anteriores se emplean en la práctica. Se verá que se utilizan la mayoría de las técnicas expuestas a excepción de la codificación de Hoffman que complica mucho la decodificación; sin embargo, la idea de este tipo de código subyace en algunas de las máquinas.

i-8086 y derivados

En el i-8086, los formatos de instrucción son muy irregulares (Brey, 2000). Este procesador es del tipo registro-memoria, por lo que no puede trabajar, en general, con dos operandos en memoria: normalmente si uno de los operandos está en memoria el otro radica en un registro. Si el computador fuera ortogonal no se tendría este inconveniente porque todos los operandos se codificarían de la misma forma. Esto hace que la mayoría de las instrucciones tengan que tener un bit que indique quién es el operando fuente: el registro o el operando en memoria.



Arquitectura Alpha

Esta máquina, como buen ejemplo de las máquinas RISC, tiene formatos de instrucción muy sencillos y regulares. Su regularidad comienza en el hecho de que todas las instrucciones y có- digos de operación tienen longitud fija (32 y 6 bits, respectivamente). Nunca se añaden informa- ciones adicionales a los 32 bits de instrucción, como se ha visto que hacen otros procesadores. Sin embargo, hay instrucciones que tienen códigos de operación secundarios. Llamaremos I a la palabra de instrucción y numeraremos sus bits de derecha a izquierda.





Conjunto de instrucciones

También se estudiarán los principios y filosofía de diseño de los ordenadores con conjunto reducido de instrucciones (RISC).

Características generales de los conjuntos de instrucciones

Ante el diseño de un nuevo ordenador de propósito general hay que plantearse la siguiente cuestión: ¿Qué tipos de instrucciones deben ser incluidos en sus conjuntos de instrucciones? Antes de responder a esta pregunta, analizaremos las características que deben tener los juegos de instrucciones de las máquinas.

Los conjuntos de instrucciones de las máquinas deben tender a poseer una serie de propie dades, bastante ideales e imprecisas, que pueden resumirse en las siguientes:

El conjunto de instrucciones de un computador debe ser completo en el sentido de que se pueda construir un programa para evaluar una función computable usando una can- tidad de memoria razonable y empleando un tiempo moderado, es decir, el número de instrucciones de ese programa no debe ser demasiado elevado.

Los juegos de instrucciones también tienen que ser eficientes, esto significa que las fun- ciones más necesarias deben poder realizarse usando pocas instrucciones.

El conjunto de instrucciones de una máquina debe ser regular, es decir debe ser simétrico (por ejemplo, si existe una instrucción de desplazamiento a la izquierda, debe haber otra de desplazamiento a la derecha, etc.) y ortogonal, es decir, deben poder combinarse, en la medida de lo posible, todas las operaciones con todos los tipos de datos y modos de direccionamiento.

Tipos de instrucciones

Una máquina puede llegar a funcionar con un juego de instrucciones muy limitado (recuérdese, por ejemplo, la máquina de Turing que sólo tiene 4 instrucciones, incluso se han diseñado máquinas teóricas con menos instrucciones), esto simplificaría mucho los circuitos de la máquina. Sin embargo, un conjunto de instrucciones demasiado simplificado origina, como consecuencia, unos programas demasiado complejos e ineficientes.

  1. Ø  Instrucciones de transferencia de datos. Instrucciones aritméticas.
  2. Ø  Instrucciones lógicas.
  3. Ø  Instrucciones de control del flujo del programa (bifurcaciones, bucles, procedimientos, etc.)
  4. Ø  Instrucciones de entrada y salida

Instrucciones de transferencia de datos

La operación de copiar datos de un lugar a otro es la operación más simple y a la vez importante. Las palabras mover o cargar que aparecen en los juegos de instrucciones de muchos ordenadores pueden dar lugar a confusión porque no se trata de mover o cargar sino de copiar (generalmente, en Informática, la palabra mover tiene el significado de copiar borrando el original). Las instrucciones de transferencia de datos necesitan que se especifiquen el original (fuente u origen) y el lugar donde se desea la copia (destino).

Instrucciones aritméticas y lógicas

Todos los ordenadores incorporan instrucciones aritméticas en sus juegos de instrucciones; la utilidad de este tipo de operaciones es evidente y no la comentaremos. En cuanto a las ope- raciones lógicas (AND, OR, NOT y XOR) tienen un uso muy variado: desde operaciones con bits individuales (TEST, SET, RESET y CHANGE) hasta el empaquetamiento y desempaque- tamiento de caracteres.

Los desplazamientos pueden ser de tres tipos: lógicos, aritméticos y rotaciones o desplazamientos circulares dependiendo del bit entrante. El desplazamiento lógico a la derecha difiere del aritmético en que el bit entrante es, en este último, el mismo bit de mayor peso (bit de signo), mientras que en aquél es siempre un 0; Así se consigue que los desplazamientos aritméticos sean equivalentes a multiplicaciones (izquierda) y divisiones (derecha) por 2. En las rotaciones el valor del bit entrante es el mismo que el del saliente.

Instrucciones de control del flujo de programa

Las instrucciones de control de flujo son las que modifican el secuenciamiento de la ejecución de las instrucciones del programa. En general, el secuenciamiento es implícito.

Todas las instrucciones que modifican el flujo de la ejecución manejan el contador de programa. También, si la modificación del flujo de instrucciones se hace de forma condicional, esta condición vendrá dada por los bits de estado (N , Z, V y C). Vemos, por tanto, que para las instrucciones de control de flujo hay dos variables fundamentales: el contador de programa y los bits de condición.

Instrucciones de bifurcación

La mayoría de los programas requieren de los ordenadores en que se ejecutan la capacidad de examinar datos y luego alterar la evolución del programa en función de los resultados de esa comprobación; esto nos lleva a la necesidad de la existencia de instrucciones de salto o bifurcación que pueden ser de dos tipos: condicionales e incondicionales.

En esta representación, Condición simboliza una expresión que involucra a uno o más bits de condición. Los bits de condición más usuales son:

Ø  N: Bit que indica si el resultado de la última operación ha sido negativo.

Ø  Z: Bit que indica si el resultado de la última operación ha sido cero.

Ø  V: Bit que indica si en la última operación hubo desbordamiento.

Ø  C: Bit que indica si en la última operación se produjo acarreo o llevada.

Ø  Algunas máquinas incluyen otros bits de estado adicionales.

Iteraciones

Es muy frecuente que se necesite ejecutar un grupo de instrucciones cierto número de veces, por ello, la mayoría de las máquinas tienen instrucciones específicas para ello. Un método para realizar iteraciones se basa en poner un valor inicial en un registro para luego pasar a ejecutar el código de la iteración, la última instrucción del bucle actualizará el valor del registro y comprobará si se cumple la condición de terminación, si es así se ejecutará la siguiente instrucción y si no se comienza una nueva iteración.

Interrupciones

Las interrupciones son llamadas automáticas a procedimiento no debidas al programa sino a una causa exterior.

La diferencia entre las interrupciones y los desvíos es que éstos son provocados por el mismo programa mientras que las interrupciones son provocadas por causas externas de forma totalmente asíncrona.

Normalmente las causas de interrupción están relacionadas con las operaciones de entrada y salida. Una interrupción detiene el programa en curso y transfiere el control al procedimiento de tratamiento de la interrupción denominado rutina de servicio de interrupción; cuando esta rutina concluye se debe devolver el control al proceso interrumpido que debe continuar su ejecución en el mismo estado en el que estaba cuando se produjo la interrupción. Esto significa que se deben salvar el estado del procesador (es decir el contenido de los registros) antes de comenzar la ejecución de la rutina de servicio y restaurarse al finalizar ésta.

Instrucciones de control de flujo en el VAX

En este apartado estudiaremos un caso concreto de instrucciones de control de flujo: las correspondientes al VAX (Baase, 1983). Esta máquina tiene diversas clases de instrucciones de control de flujo. de orden más bajo es 1 ó 0 respectivamente), en estas instrucciones, además del destino de la bifurcación, hay que especificar el operando en que se analiza el bit en cuestión.


Código de operación

En informática, un opcode (operation code) o código de operación, es la porción de una instrucción de lenguaje de máquina que especifica la operación de ser realizada. Su especificación y formato serán determinados por la arquitectura del conjunto de instrucciones (ISA) del componente de hardware de computador - normalmente un CPU, pero posiblemente una unidad más especializada.

Los operandos sobre los cuales los opcodes aplican dependen de la arquitectura del CPU que consisten en los registros, valores en memoria, valores almacenados en la pila y puertos de I/O, etc.

Las operaciones que un OPCODE puede especificar pueden incluir:

Ø  Aritmética

Ø  Copia de datos

Ø  Operaciones lógicas

Ø  Control del programa

Una instrucción completa de lenguaje de máquina contiene un OPCODE y, opcionalmente, la especificación de uno o más operandos sobre los que la operación debe actuar

Algunas ISAs tiene instrucciones con campos definidos para los OPCODES y operandos, mientras que otras (ej. la arquitectura Intel x86) tienen una estructura más complicada y de propósito específico.

El estándar de 8 bits llamado ISA (siglas en inglés de Industry Standard Architecture) consistió en un diseño para poder conectar Tarjetas de Expansión a la Placa Madre de las primeras PC, que se comercializaban a principios de los años '80, llevando también el nombre de XT Bus Architecture. Este bus permitía trabajar a una velocidad de 4.77 MHz.

Instrucciones con longitud variable

Algunas de las maquinas tienen instrucciones con un numero de variables de bits. Esto implica que la primera parte de la palabra de instrucción debe tener información sobre el código de operación y sobre el número de operandos que le siguen. Sin embargo, en estas máquinas el número de bits del código de operación suele ser fijo.

Instrucción con código de operación de Longitud variable

Una maquina con un formato de instrucción de código de operación de longitud fija de (n) bits puede tener 2 instrucciones diferentes que pueden ser monarias y binarias. sin embargo, es posible mantener una longitud de instrucción fija y variar la longitud del código de operación según diferentes factores tales como:

El uso de frecuencia de instrucciones

Numero de operandos de estas

LENGUAJES DE MAQUINA CARACTERISTICAS:

Se trabaja a nivel de instrucciones, es decir, su programación es al más fin o detalle. Está orientado a la máquina.

Primera generación:

El lenguaje de programación de primera generación (por sus siglas en inglés,1GL), es el lenguaje de código máquina. Es el único lenguaje que un microprocesador entiende de forma nativa. El lenguaje máquina no puede ser escrito o leído usando un editor de texto, y por lo tanto es raro que una personal o use directamente.

Segunda generación.

El lenguaje de programación de segunda generación (por sus siglas en inglés,2GL), es el lenguaje ensamblador. Se considera de segunda generación porque, aunque no es lenguaje nativo del microprocesador, un programador de lenguaje ensamblador debe conocer la arquitectura del microprocesador (como por ejemplo las particularidades de sus registros o su conjunto de instrucciones).

Ventajas del Lenguaje Máquina Posibilidad de cargar (transferir un programa a la memoria) sin necesidad de traducción posterior, lo que supone una velocidad de ejecución superiora cualquier otro lenguaje de programación.

Desventajas del Lenguaje Máquina

-Dificultad y lentitud en la codificación

-Poca fiabilidad

-Gran dificultad para verificar t poner a punto los programas

-Los programas solo son ejecutables en el mismo procesador (CPU)

En la actualidad, las desventajas superan a las ventajas, lo que hace prácticamente no recomendables a los lenguajes máquinas.

Unidad de control micro programada

Unidad de control

La unidad de control (UC), en inglés: control unit (CU), es uno de los tres bloques funcionales principales en los que se divide una unidad central de procesamiento (CPU). Los otros dos bloques son la unidad de proceso y el bus de entrada/salida.

Su función es buscar las instrucciones en la memoria principal, decodificarlas (interpretación) y ejecutarlas, empleando para ello la unidad de proceso.

Existen dos tipos de unidades de control: las cableadas, usadas generalmente en máquinas sencillas, y las microprogramadas, propias de máquinas más complejas.

Unidad de control cableada

Las unidades de control para los CPU eran lógica ad hoc, y eran difíciles de diseñar. Estas pueden identificarse como la parte principal de la computadora y del dispositivo principal que ayuda al computador a funcionar de una manera apropiada. Es construida de puertas lógicas, circuitos biestables, circuitos codificadores, circuitos decodificadores, contadores y otros circuitos digitales. Su control está basado en una arquitectura fija esta arquitectura es preferida en las computadoras RISC.

Unidad de control microprogramada

Fue introducida la idea de microprogramación como un nivel intermediario para ejecutar instrucciones de programa de computadora

La UC microprogramada es un circuito lógico sencillo que permite realizar la ejecución en secuencia de un conjunto de instrucciones muy elementales llamadas microinstrucciones.

Cada microinstrucción contiene las señales de control que se enviarán a la UP, junto a una serie de bits que permitirán seguir la secuencia miento.

Las microprogramas fueron organizadas como una secuencia de microinstrucciones y almacenados en una memoria del control especial. El algoritmo para la unidad de control micro programada es usualmente especificado por la descripción de un diagrama de flujo

Componentes de la unidad de control

Memoria de Control: contiene las microinstrucciones

- Secuenciador: es el encargado de mantener el orden correcto en la ejecución de las microinstrucciones. Genera la dirección de la siguiente microinstrucción a ejecutar y la guarda en mPC

- mPC(micro contador de programa): registro que almacena la dirección de la siguiente microinstrucción que se va a ejecutar. Esta dirección se decodificará en DEC y seleccionará una posición de la memoria de control.



Comentarios

Entradas más populares de este blog

MANTENIMIENTO DE COMPUTADORAS (RESUMEN)

Mantenimiento de computadoras