En este trabajo estudiaremos los distintos tipos de
instrucciones de que constan los juegos de instrucciones de los ordenadores.
Se vern con especial inters las instrucciones de control del ujo del programa (bifurcaciones, bucles, procedimientos, etc.).
Tambin se estudiarn los principios y losofa de diseo de los ordenadores con conjunto reducido de instrucciones (RISC) Un conjunto de instrucciones o repertorio de instrucciones, juego de instrucciones o ISA (del ingls Instruction Set Architecture, Arquitectura del Conjunto de Instrucciones) es una especificacin que detalla las instrucciones que una CPU de un ordenador puede entender y ejecutar, o el conjunto de todos los comandos implementados por un diseo particular de una CPU.
El trmino describe los aspectos del procesador generalmente visibles a un programador, incluyendo los tipos de datos nativos, las instrucciones, los registros, la arquitectura de memoria y las interrupciones, entre otros aspectos.
Existe principalmente de 3 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 caractersticas de la microarquitectura, que son los elementos y tcnicas que se emplean para implementar el conjunto de instrucciones. Entre estos elementos se encuentran las microinstrucciones y los sistemas de cach.
Procesadores con diferentes diseos internos pueden compartir un conjunto de instrucciones; por ejemplo, el Intel Pentium y AMD Athlon implementan versiones casi idnticas del conjunto de instrucciones x86, aunque tienen diseos diferentes. Tipos de instrucciones
Una mquina puede llegar a funcionar con un juego de instrucciones muy limitado (recurdese, por ejemplo, la mquina de Turing que slo tiene 4 instrucciones, incluso se han diseado mquinas tericas con menos instrucciones), esto simplicara mucho los circuitos de la mquina.
Sin embargo, un conjunto de instrucciones demasiado simplicado origina, como consecuencia, unos programas demasiado complejos e inecientes. Es necesario encontrar un compromiso entre la simplicidad del hardware y del software.
Un mnimo para llegar a ese compromiso se consigue con los tipos de instrucciones siguientes: Instrucciones de transferencia de datos. Instrucciones de transferencia de datos
La operacin de copiar datos de un lugar a otro es la operacin ms 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 confusin porque no se trata de mover o cargar sino de copiar (generalmente, en Informtica, la palabra mover tiene el signicado de copiar borrando el original).
Las instrucciones de transferencia de datos necesitan que se especiquen el original (fuente u origen) y el lugar donde se desea la copia (destino). Esta especicacin variar segn sean estos lugares que pueden estar en tres sitios: registros del procesador, memoria o cima de pila. Si el acceso es a una direccin de memoria habr que especicarla de forma explcita, si se trata de la cima de pila normalmente la especicacin ser implcita, lo mismo ocurrir si se trata del acumulador. Instrucciones aritmticas y lgicas
Todos los ordenadores incorporan instrucciones aritmticas en sus juegos de instrucciones; la utilidad de este tipo de operaciones es evidente y no la comentaremos. En cuanto a las operaciones lgicas (AND, OR, NOT y XOR) tienen un uso muy variado: desde operaciones con bits individuales (TEST, SET, RESET y CHANGE) hasta el empaquetamiento y desempaquetamiento de caracteres.
Tambin pueden considerarse dentro de este grupo los desplazamientos y rotaciones cuya utilidad queda fuera de toda duda. En primer lugar, veremos cmo se emplean las instrucciones lgicas para realizar operaciones de bit individual. Iteracin
En programacin, Iteracin es la repeticin de un proceso dentro de un programa de computadora. Puede usarse tanto como un trmino genrico (como sinnimo de repeticin) as como para describir una forma especfica de repeticin con un estado mutable.
Cuando se usa en el primer sentido, la recursividad es un ejemplo de iteracin, pero que usa su propia notacin (notacin recursiva), que no es el caso de iteracin.
Sin embargo, cuando se usa en el segundo sentido (caso ms restringido), la iteracin describe el estilo de programacin usado en lenguajes de programacin imperativa. Esto est en contraposicin de la recursividad, la cual tiene un enfoque ms declarativo. Procedimientos informticos
Tambin llamado funcin o rutina, en informtica, un procedimiento representa una serie de instrucciones que se agrupan con un mismo fin.
Un programa de mediana complejidad, un videojuego e incluso una pgina web suelen contener no uno sino varios de estos conjuntos de tareas.
Cada funcin recibe un nombre y el propsito de su existencia es que se la pueda utilizar cada vez que se necesite, dentro del contexto en que la aplicacin lo permita.
Si tomamos el juego Tetris como ejemplo, cada vez que una pieza termina de caer, se ejecuta una rutina que verifica si se ha completado alguna lnea; de dar un resultado positivo, probablemente otro procedimiento se encargue de borrar las filas correspondientes, para finalmente continuar con la partida. En las aplicaciones que utilizamos a diario, es comn encontrar opciones para guardar, abrir, crear nuevo documento y cerrar, y detrs de ellas, se encuentra al menos una funcin. Corrutinas
son componentes de los programas informticos que generalizan subrutinas para permitir mltiples puntos de entrada para la suspensin y reanudacin de la ejecucin en ciertos lugares.
Corrutinas son adecuados para la aplicacin de los componentes del programa ms conocidas, como las tareas de cooperacin, iteradores, listas infinitas y tuberas.
El trmino co-rutina se origin por Melvin Conway en un documento de 1963.
Los usos ms comunes
Corrutinas son tiles para poner en prctica lo siguiente:
Las mquinas de estado dentro de un mismo subprograma, donde el Estado est determinada por el punto de entrada/salida actual del procedimiento, lo que puede dar lugar a la lectura del cdigo.
Actor modelo de concurrencia, por ejemplo en los videojuegos. Cada actor tiene sus propios procedimientos, pero que voluntariamente dan el control a planificador central, que los ejecuta secuencialmente.
Generadores y estos son tiles para la entrada/salida y genricos recorrido de estructuras de datos.
Comunicar procesos secuenciales en cada sub-proceso es una co-rutina. Entradas/salidas y operaciones de bloqueo corrutinas rendimiento y un planificador de ellos desbloquea en eventos de finalizacin del Canal. Excepciones
Una excepcin en trminos de lenguaje de programacin es la indicacin de un problema que ocurre durante la ejecucin de un programa. Sin embargo, la palabra excepcin se refiere a que este problema ocurre con poca frecuencia generalmente cuando existe algn dato o instruccin que no se apega al funcionamiento del programa por lo que se produce un error.
El manejo de excepciones permite al usuario crear aplicaciones tolerantes a fallas y robustos (resistentes a errores) para controlar estas excepciones y que pueda seguir ejecutando el programa sin verse afectado por el problema.
En lenguaje java estas excepciones pueden manejarse con las clases que extienden el paquete Throwable de manera directa o indirecta, pero existen diversos tipos de excepciones y formas para manejarlas. Interrupciones
En el contexto de la informtica, una interrupcin (del ingls Interrupt Request, tambin conocida como peticin de interrupcin) es una seal recibida por el procesador de un ordenador, indicando que debe "interrumpir" el curso de ejecucin actual y pasar a ejecutar cdigo especfico para tratar esta situacin.
Una interrupcin es una suspensin temporal de la ejecucin de un proceso, para pasar a ejecutar una subrutina de servicio de interrupcin, la cual, por lo general, no forma parte del programa, sino que pertenece al sistema operativo o al BIOS. Una vez finalizada dicha subrutina, se reanuda la ejecucin del programa.
Las interrupciones surgen de la necesidad que tienen los dispositivos perifricos de enviar informacin al procesador principal de un sistema informtico. Instrucciones de control de ujo en el VAX
caso concreto de instrucciones de control de ujo:
Esta mquina tiene diversas clases de instrucciones de control de ujo: Instrucciones de bifurcacin El VAX tiene dos instrucciones de bifurcacin incondicional.
BRB y BRW; ambas instrucciones se diferencian slo en el tamao del desplazamiento (1 o 2 bytes): para bifurcaciones en que la direccin de destino se encuentre cerca de la direccin actual (menos de 128 bytes) se emplea BRB, en caso contrario se emplea BRW. En cuanto a las bifurcaciones condicionales todas tienen un desplazamiento de 8 bits, esto limita algo su uso y obliga en ocasiones a emplear una programacin menos estructurada en las bifurcaciones condicionales ya que es necesaria la instruccin BRW. En las instrucciones de bifurcacin del VAX slo se especica el desplazamiento, sin el byte de especicacin de operando convencional en la forma modo-registro. Relacin entre el lenguaje mquina y los lenguajes de alto nivel
Este concepto se reere al mbito de validez del nombre de las variables. Atendiendo a la visibilidad, los nombres de las variables pueden ser de dos tipos:
Globales: son nombres de variable reconocidos en todo el programa.
Locales: son nombres de variable que slo se reconocen en una parte del programa, normalmente uno o ms procedimientos. .
El mbito de visibilidad de los nombres de las variables es un concepto que maneja solamente el compilador, concretamente en la tabla de smbolos haciendo que un smbolo slo sea reconocido en su mbito de validez, y no transciende al cdigo ejecutable del programa.
Sin embargo, hay otro concepto similar que es el de vida de la variable que se dene como el tiempo que transcurre desde que una variable se comienza a usar hasta que se la menciona por ltima vez o, lo que es lo mismo, el tiempo en que es necesario que la variable tenga espacio reservado en memoria
Clases de variables
En un programa de alto nivel, e incluso tambin en lenguaje ensamblador, existe un concepto denominado visibilidad. Este concepto se reere al mbito de validez del nombre de las variables. Atendiendo a la visibilidad, los nombres de las variables pueden ser de dos tipos: Globales: son nombres de variable reconocidos en todo el programa. Locales: son nombres de variable que slo se reconocen en una parte del programa, normalmente uno o ms procedimientos. .
El mbito de visibilidad de los nombres de las variables es un concepto que maneja solamente el compilador, concretamente en la tabla de smbolos haciendo que un smbolo slo sea reconocido en su mbito de validez, y no transciende al cdigo ejecutable del programa.
Sin embargo, hay otro concepto similar que es el de vida de la variable que se dene como el tiempo que transcurre desde que una variable se comienza a usar hasta que se la menciona por ltima vez o, lo que es lo mismo, el tiempo en que es necesario que la variable tenga espacio reservado en memoria
Direccionamiento de estructuras de datos
Una de las caractersticas fundamentales de los lenguajes de alto nivel es la posibilidad de denir y manejar estructuras de datos complejas. Estas estructuras plantean los siguientes problemas:
Organizar su almacenamiento en memoria. Encontrar la direccin de cada uno de sus componentes ms simples. En estas circunstancias el compilador del lenguaje de alto nivel debe producir una secuencia de instrucciones para calcular la direccin del componente deseado.
El acceso a las estructuras de datos ms simples (un vector unidimensional, una estructura o record, etc) puede requerir un nmero muy pequeo de Tambin puede darse el caso de que la direccin del primer elemento venga dada por un apuntador, en cuyo caso hay que aadir un nivel de indireccin.
Caractersticas de los procesadores RISC
Un caso algo menos regular es el direccionamiento de estructuras de datos tipo record o struct. La irregularidad reside en que el tamao de cada uno de los campos de una estrucutura de este tipo es diferente.
En este caso, la direccin de uno de los campos viene dada por Rref + desplazamiento primer elemento + desplazamiento campo En esta expresin, Rref + desplazamiento primer elemento , representa la direccin del primer elemento y desplazamiento campo, es el desplazamiento del campo deseado respecto al primer elemento.
Esto puede hacerse as, o, si el compilador est optimizado, ste puede sumar ambos desplazamientos y utilizar direccionamiento indexado simple. No puede hacerse esta ltima simplicacin en el caso de un apuntador a un struct (operador -> del lenguaje C) ya que, en este caso, los dos primeros trminos estn afectados de una indireccin y la direccin del campo buscado es: (Rref + desplazamiento primer elemento ) + desplazamiento campo Para este caso se adeca muy bien el direccionamiento indirecto post indexado del microprocesador MC68020.
Una tcnica similar puede usarse si una estructura es un campo de otra.