domingo, 14 de junio de 2015

Instrucción de Maquina y Código de Operación

Una instrucción se puede ver como una cadena de bits que se agrupan en campos con tamaños diferentes.
Las instrucciones que es capaz de realizar la UCP se denominan instrucciones máquina.
El lenguaje que se utiliza para su codificación es el lenguaje máquina y, de acuerdo con su función, se clasifican en:
-       Instrucciones de transferencia de datos. Transfieren datos
-       Instrucciones aritméticas, lógicas y de comparación. Operaciones
-       Instrucciones de transferencia de control. Secuencia de ejecución
-       Instrucciones de gobierno. Controlan estado CPU
Tipos
·         Instrucciones de transferencia de datos: en este tipo de instrucciones, se transfieren datos desde una localización a otra. Los pasos que se siguen para realizarlo son:
1.       Determinación de las direcciones de origen y destino de memoria.
2.       Realización de la transformación de memoria virtual a memoria real.
3.       Comprobación de la caché.
4.       Inicio del proceso de lectura/escritura en la memoria.
·         Instrucciones aritméticas: pueden implicar transferencia de datos antes y/o después. Realizan operaciones aritméticas de las que se encarga la ALU. Se pueden clasificar en de 1 operando (valor absoluto, negación) y 2 operandos (suma, resta).
·         Instrucciones lógicas: al igual que las aritméticas, la ALU se encarga de realizar estas operaciones, que en este caso son de tipo lógico.
·         Instrucciones de conversión: similares a las aritméticas y lógicas. Pueden implicar lógica especial para realizar la conversión.
·         Instrucciones de transferencia de control: actualizan el contador de programa (PC). Administran las llamadas/retornos a las subrutinas, el paso de parámetros y el enlazado.
·         Instrucciones de E/S (entrada/salida): administran los comandos de entrada/salida. Si hay un mapa de memoria de entrada/salida, determina la dirección de este mapa.
Repertorio
Las instrucciones de un lenguaje de programación se pueden clasificar en 4 grupos:
·         Instrucciones de transferencias de datos: Son aquellas de entrada o lectura y de salida o escritura. En el caso de las instrucciones de entrada o lectura, se lleva el dato de entrada o lectura desde la unidad de entrada a la memoria. Si por el contrario es una instrucción de salida o escritura, se lleva el dato de la memoria a la unidad de salida.
·         Instrucciones de tratamiento: Se trata de las instrucciones aritmético-lógicas y las de desplazamientos. Así como suma de datos o comparaciones.
·         Instrucciones de flujo de control o de bifurcación y salto: Las instrucciones de flujo de control son aquellas instrucciones que alteran el orden secuencial de la ejecución de un programa. También hay instrucciones que posibilitan la interrupción de la ejecución o saltar a ejecutar otro programa. Cuando termina cualquiera de estas instrucciones, el programa continúa ejecutándose desde el punto en el que se interrumpió.
·         Otras instrucciones: Por ejemplo, la detención del funcionamiento del computador a la espera de una acción del usuario.

http://es.wikipedia.org/wiki/Instrucci%C3%B3n_inform%C3%A1tica

Una segunda clasificación de las instrucciones máquina hace referencia a su formato y al número de operandos que intervienen en ellas.
Instrucciones:
a) Código de operación (CO), que indica qué operación se debe realizar por el procesador.
b) Operandos, relativos a los datos, que son necesarios para realizar su misión.
·         En función de esto tenemos:
·         Instrucciones de tres operandos
·         Instrucciones de dos operandos
·         Instrucciones de un solo operando
·         Instrucciones sin operandos


Instrucciones de tres operandos
Constan en primer lugar de código de operación al que siguen tres operandos, de los cuales, los dos primeros son las direcciones de los argumentos que hay que operar y el tercero es la dirección donde se depositará el resultado.
Este formato se adoptó en algunos de los primeros computadores, en los que la capacidad de la memoria era pequeña y por tanto bastaba con pocos bits para los campos de dirección. De no ser así, la longitud del formato resulta ser excesivamente grande.



Instrucciones de dos operandos
Contienen el código de operación y dos operandos, de los que uno de ellos actúa, además, como receptor del resultado de la operación.
En las máquinas que utilizan instrucciones con dos direcciones el resultado puede depositarse en el lugar que inicialmente ocupaba uno de los operandos.



Instrucciones de un operando
Se utilizan generalmente en máquinas cuya arquitectura funciona con filosofía de acumulador. El acumulador de la UAL contiene previamente el primer argumento de la operación, el segundo es el contenido en la propia instrucción, y después de ser operados ambos por el circuito operacional, el resultado queda depositado de nuevo en el acumulador.



Instrucciones sin operandos
Una pila está formada por datos almacenados en orden consecutivo en la memoria, existiendo un registro especial, denominado puntero de pila, que nos indica la dirección del último dato introducido en ella.

Cuando se saca un dato de la misma, el puntero de la pila decrece apuntando al dato que está a continuación en la pila hacia lo que llamaremos fondo de la misma y que será aquel dato que se introdujo en primer lugar.

http://saia.psm.edu.ve/moodle/pluginfile.php/223209/mod_resource/content/1/organizacion_del_computador.pdf


Código de Operación


Es la porción de una instrucción de lenguaje de máquina que especifica la operación a 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. 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 operaciones tienen operandos implícitos, o de hecho ninguno. 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. Los operandos sobre los cuales los opcodes aplican pueden, dependiendo de la arquitectura del CPU, consistir de registros, valores en memoria, valores almacenados en la pila, puertos de I/O, bus, etc. Las operaciones que un opcode puede especificar pueden incluir aritmética, copia de datos, operaciones lógicas, y control del programa.




Una maquina con instrucciones de 16 bits, que realiza operaciones hasta con 3 operandos y que éstos siempre están en alguno de sus 16 registros. Esto quiere decir que se necesitan 4bits por operando, y que si puede haber hasta 3 operandos, se necesitan 12 bits para ellos. Esto nos deja con 4 bits para códigos, lo que significa que puede haber hasta 16 operaciones distintas con 3 operandos.

Códigos de Operación con Extensión


15 instrucciones de 3 operaciones: Se comienza con el formato de las instrucciones de 3 operandos de 4 bits. Para representar 15 códigos de operación se requieren 4 bits, y los 12 bits restantes se utilizan para los tres operandos de 4 bits.
Los códigos de operación serán el 0000, 0001, …., hasta el 1110. Y sobran una combinación de 165 que ofrecen los 4 bits.
14 instrucciones de 2 operaciones: La combinación que nos sobraba del formato anterior (la 1111) se utiliza ahora para indicar un nuevo formato de instrucción. Es decir, las instrucciones cuyos 4 bits de mayor peso sean 1111 tendrán un código de operación extendido con los 4 bits siguientes. En este nuevo formato, el código de operación ocupa 8 bits, donde los 4 de mayor peso están siempre a 1. Los ocho bits restantes se utilizan para indicar los dos operandos de este formato, y sobran 2 combinaciones 1111 1110 y 1111 1111.
31 instrucciones de 1 operando: Si los 4 bits de mayor peso a 1 indican que el código de operación se extiende o amplía con otros 4, cuando los 7 bits de mayor peso son 1111 111, indica que el formato de tales instrucciones está formando por un código de operación de 12 bits (los de mayor peso). Los 4 bits restantes se utilizan como operando.
Para este formato se dispone ahora de 5 bits para expresar 31 nuevas instrucciones, las que tienen los códigos desde 1111 1110 0000 hasta 1111 1111 1110. Ahora sobra una combinación de las disponibles.
16 instrucciones sin operandos explícitos: Ahora encontramos que los 12 bits de mayor peso a 1 indican un nuevo formato de instrucción con un código de operación de 16 bits.
Los 4 bits de la ampliación son los que ofrecen los últimos 16 códigos de operación para las instrucciones sin operandos explícitos.

Cuando se planifican formatos de instrucciones con códigos de operación con extensión para cada formato se debe reservar alguna de las combinaciones posibles para expresar una extensión en el código de operación.

http://saia.psm.edu.ve/moodle/pluginfile.php/327780/mod_resource/content/1/Visi%C3%B3n%20del%20programador%20Maquina.pdf

Con el uso de expansión de códigos de operación se puede minimizar la longitud promedio de las instrucciones codificando cada instrucción de forma que el número de bits requerido sea el mínimo.
Por otro lado se puede hacer que todas las instrucciones tengan la misma longitud, asignando los códigos de operación más cortos a las instrucciones que necesiten más bits para especificar otras cosas.

Se puede también minimizar el tamaño promedio de las instrucciones escogiendo códigos de operación más cortos para las instrucciones más comunes y más largos para las menos usadas.

http://ldc.usb.ve/~rgonzalez/organizacion/laminas/Laminas_FormatodeInstrucciones.pdf

No hay comentarios:

Publicar un comentario