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.
- Ø Instrucciones de transferencia de datos. Instrucciones aritméticas.
- Ø Instrucciones lógicas.
- Ø Instrucciones de control del flujo del programa (bifurcaciones, bucles, procedimientos, etc.)
- Ø 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
Publicar un comentario