Una de las peores trabas en el estudio de los fundamentos de un computador digital (desde el punto de vista del alumno que estudia la asignatura, por supuesto) es que la informacin solo se puede procesar y almacenar en binario (en un idioma con dos smbolos o dgitos: el 0 y el 1). En particular, un computador solo reconoce la informacin que hay en un determinado elemento de un circuito, en la forma del potencial elctrico que posee. En la mayora de los casos solo hay dos potenciales reconocidos por el hardware (p.e., +0V y +5V), y se asocia uno de ellos al cero y el otro al uno. A partir de ah, la combinacin de dgitos binarios (o su acrnimo bit) genera mayor cantidad de informacin. Por ejemplo, 00010111 puede significar el dato 23, y 0101001010 podra ser la forma de una instruccin. En este tema aprenderemos a "hablar" en el idioma binario, y analizaremos la forma en la que se codifica toda la informacin que manipula el computador. Qu es informacin? Para el computador, la informacin son las instrucciones y los datos sobre los que operan las instrucciones. Las instrucciones en general son tareas muy simples que se realizan sobre los datos. Como ejemplo, una instruccin puede copiar la informacin de un lugar del computador a otro. A veces, se realiza una operacin con varios datos almacenados, guardando a su vez el resultado en algn lugar, pero siempre, en binario. Almacn de la informacin. Como vemos, la informacin (datos o instrucciones) se almacena en algn lugar del computador. Normalmente esto se hace en memoria o en los registros. Cada registro o posicin de memoria contiene un nmero de bits predeterminado (entre 8 y 64, normalmente), y fsicamente, cada bit es un elemento de un circuito que permite conservar un determinado potencial (imagnelo en la forma de un condensador, en el que podemos mantener (1) o eliminar (0) una diferencia de potencial entre sus bornes). Transporte de la informacin. Para desplazar la informacin por el computador, se utilizan los buses y seales, que no son ms que cables que interconectan los almacenes de informacin. El potencial de un cable (seal) identifica el bit que transporta, mientras que un conjunto de cables (bus) transporta el dato o la instruccin que representan la secuencia de seales. La informacin puede navegar por los circuitos de diferentes formas gracias a la existencia de conmutadores, que se encuentran en dos posibles estados: abierto y cerrado: En la prctica, los conmutadores son accionados por otras seales. Para ello, se utilizan transistores.
Procesamiento de la informacin. Para que uno o varios datos puedan ser procesados, o incluso para que dichos datos puedan ser dirigidos de forma correcta a su destino, es necesario introducir unos elementos adicionales, que se conocen como puertas lgicas. Las puertas lgicas son circuitos muy elementales (constituidos por unos pocos transistores) que permiten realizar operaciones muy simples con los bits. Aunque un curso previo sobre sistemas electrnicos digitales debe introducir al alumno en los circuitos lgicos, recordamos brevemente algunos aspectos importantes:
Puertas AND, OR y NOT. Las puertas lgicas son dispositivos capaces de manipular la informacin (bits). Constan de una o varias seales de entrada de informacin, y producen una seal de salida, que depende exclusivamente de la combinacin de seales de entrada. Las ms comunes son las puertas AND, OR y NOT. Otras puertas muy utilizadas son las puertas XOR y NAND. En la siguiente tabla se muestran los smbolos que la representan y la forma en la que procesan la informacin de entrada:
Nombre Diseo Entradas Salida OR 0 0 0 1 1 0 1 1 0 1 1 1 AND 0 0 0 1 1 0 1 1
0 0 0 1 NAND
0 0 0 1 1 0 1 1
1 1 1 0 XOR
0 0 0 1 1 0 1 1
0 1 1 0
NOT
0 1 1 0 Como se puede observar, el funcionamiento de la puerta AND (el comportamiento de la salida, en funcin de los valores de entrada) es similar al del siguiente circuito, en el que los interruptores realizan la funcin de entradas y la luz es la salida:
La implementacin de las puertas lgicas se realiza con transistores, que al fin y al cabo, no son ms que interruptores activados mediante impulsos elctricos (la mano que enciende o apaga el interruptor es una seal elctrica. Combinacin de puertas. La puertas lgicas pueden combinarse entre s, conectando las salidas de unas puertas con las entradas de otras (tambin entradas con entradas, pero nunca salidas con salidas) A veces, a una cierta combinacin de puertas se le asigna un nombre y se considera como una nueva puerta: Ejemplo: La puerta XOR se puede implementar combinando puertas AND, OR y NOT:
Circuitos bsicos: MUX y D-MUX. Ciertas combinaciones de puertas producen circuitos que tienen una funcin muy clara. Es el caso de multiplexores (MUX) y demultiplexores (D-MUX). El primero de los circuitos permite redirigir un dato en la nica a entrada a una (entre varias) salidas. Tiene puntos de control que indican (en cdigo binario) cual es la salida elegida:
c e1 e2 s El demultiplexor selecciona para la nica salida, una entre varias entradas. Tambin tiene puntos de control para seleccionar la entrada:
Codificadores y decodificadores: Son otros ejemplos de circuitos lgicos. En general un codificador tiene ms entradas que salidas. El decodificador, en cambio, tiene ms salidas que entradas. Un ejemplo de este ltimo es el denominado decodificador en lnea. Tiene n entradas y 2 n salidas. Solo una de las slidas est en estado 1: aquella cuya posicin coincide con la codificacin en binario del dato de la entrada.
Un circuito secuencial bsico: el biestable (o Flip-Flop). Muchos de los circuitos lgicos obtenidos por combinacin de puertas tienen, como caracterstica comn, la ausencia de capacidad de recordar para ms tarde en el tiempo, el potencial de las seales que contiene (su estado, 0 o 1). Esto se debe a que dicho estado depende exclusivamente del valor que hay en las entradas del circuito: Cuando cambia la informacin de la entrada, se cambia la de salida y no memoriza nada. Este tipo de circuitos se conoce como combinacionales. En cambio, un circuito secuencial es aquel en el que la salida no depende solo de la entrada, sino tambin, en cierta medida, de las situaciones anteriores en las entradas.
Podemos imaginar que el sistema formado por la antena receptora y nuestra televisin es puramente combinacional (lo que se ve en la tele solo depende de lo que se recibe por la antena). Cuando compramos un grabador de tdt, convertimos nuestro sistema en secuencial, ya que lo que vemos en la televisin depende (segn el momento) de lo que llega por la antena, o de lo que ha entrado al sistema anteriormente (si reproduzco una grabacin previamente realizada). El grabador le aporta a nuestro sistema una capacidad de memorizar informacin, para facilitarla posteriormente.
c e s1 s2 Para que un conjunto de puertas pueda recordar informacin anterior, es necesario que salidas y entradas de puertas se conecten de forma que se genere un ciclo (lazo de realimentacin). La existencia de este lazo permite que cierto estado del circuito quede encerrado o lo que es equivalente: memorizado.
Imagine que el circuito de la figura tiene en las entradas los valores R=1 y S=1, y que el lazo de realimentacin Q contiene el valor 0. Para comprobar que el valor de Q es un valor memorizado, que depende de lo acontecido en el pasado, y no slo de las entradas R y S, prueba a colocar momentneamente el valor de R a 0, y tras dejar que alcance un estadio estable, vulvalo despus a 1.
Seal Valor Antiguo Valor instantneo Valor Nuevo
R 1 0 1 S 1 1 1 Q 1 0 0
Se observa que la salida es distinta, a pesar de que los dos valores de las entradas se encuentran en la misma situacin que la inicial. Gracias a los circuitos de retroalimetacin, el biestable recuerda, con Q=0, que alguna vez tuvo un cero en su entrada R (reset). Y de la misma forma, podra recordar con el valor Q=1, que ha tenido un cero en su entrada S (set). Los biestables representan un claro ejemplo de circuito secuencial, capacitado para almacenar un bit de informacin. En muchos casos, se utilizan como bloque bsico en la construccin de registros y memorias, que en definitiva, no son ms que conjuntos de celdas, agrupadas en palabras o secuencia de palabras (respectivamente), para el almacenamiento de una mayor cantidad de informacin.
R S Q Representacin de la Informacin Problemas directos e inversos. Contexto Antes de estudiar a fondo la representacin de la informacin, es necesario aclarar algunos conceptos. En primer lugar, dejemos claro que representar la informacin significa traducirla a una cadena binaria. En consecuencia, el primer tipo de problema planteado (que podramos denominar problema directo), consiste en realizar la traduccin de cada concepto a un sistema binario siguiendo unas reglas especficas. El segundo tipo de problemas consistira en realizar la operacin inversa, es decir, en traducir una cadena binaria al concepto que representa. Sin embargo, una de las caractersticas de la informacin del computador es que intenta ser lo ms econmica posible, y una de las formas de conseguirlo es mediante la ausencia, en la informacin codificada, de cualquier indicacin que especifique el tipo de informacin guardada o el formato que se ha utilizado para ello. As, para escribir un determinado valor en binario (p.e., el nmero natural 2), podramos utilizar un determinado criterio y obtener esta cadena: 0010. Pero en la cadena no est indicado que represente un nmero, ni que sea natural, ni el criterio usado para codificar la informacin. Al codificar con texto escrito, ocurre lo mismo. Nadie redactara un texto de esta forma: "sustantivo_castellano_ropa_camiseta adjetivo_castellano_color_naranja". En su lugar, escribimos "camiseta naranja", "naranja sin hueso", "amena es orange", u "orange juice". Dicho de otra forma, el problema inverso es, fuera de contexto, irresoluble, ya que una secuencia binaria podra ser, en principio, casi cualquier cosa. Tampoco sabramos que representa el trmino orange, sin su contexto. Desde el punto de vista acadmico, los problemas inversos deben ser bien planteados en su contexto. As, podramos averiguar qu es 0010, si se indica adems que se trata de un natural codificado con un cierto criterio (por ejemplo, el binario natural. Desde el punto de vista de la mquina, el contexto ser tambin imprescindible, y as, el computador sabr buscar instrucciones donde se almacenan instrucciones, y datos donde hay datos. En la siguiente seccin, analizaremos los distintos formatos de representacin de datos e instrucciones. Para ello, introduciremos una clasificacin previa de la informacin como eje constructivo. 2. Clasificacin de la Informacin La informacin que maneja el computador se podra organizar mediante el siguiente diagrama: 1. Datos 1. Datos numricos 1. Naturales 2. Enteros 3. Flotantes 2. Datos no numricos o alfanumricos 1. letras (a,F,W) 2. dgitos decimales (0, 1, 2... como smbolos que no representan un valor numrico) 3. otros smbolos (%, &, $...) 4. smbolos de control ("cambio de linea", "suprimir", ...) 2. Instrucciones 1. de movimiento de datos 2. aritmtico-lgicas 3. de control de programa Esta es slo una de las muchas formas de organizar la informacin, pero en cualquier caso representa el orden ms lgico de afrontar el anlisis, por la fuerte dependencia que existe entre los distintos formatos de representacin. 2.1 Representacin de datos 2.1.1 Nmeros naturales Aunque hay mltiples formas de representar (en binario) a los nmeros naturales, el conocido como binario natural es, sin duda alguna, el ms utilizado. Este sera el formato equivalente al que habitualmente utilizamos para representar los nmeros en base 10. Volvamos unos aos atrs y realicemos una cuenta creciente: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,... 99, 100 Observe el procedimiento de representacin. Disponemos de un alfabeto de smbolos (del 0 al 9) y los hemos utilizado (en orden) para contar... mientras hemos podido. El peso de cada dgito es diferente, y crece de uno en uno hasta llegar al "9" (el que ms pesa). A partir de ah (para la decena), hemos necesitado ampliar el nmero de smbolos, y al smbolo aadido le hemos dado un peso igual al de la base empleada. Es decir, al 2 dgito empezando por la derecha, le damos un peso equivalente al del digito utilizado, pero medido en "decenas", en lugar de unidades. As, la cadena 23 representara 2 decenas y 3 unidades. Y as hasta el 99, a partir del cual aadiremos centenas. Todo esto es obvio, y constituye un sistema de representacin que podramos calificar como casi universal, si se extendiera a cualquier base. En el caso que nos atae (la base binaria). El procedimiento es idntico, pero con una circunstancia un poco especial. El nmero de dgitos que se emplea es el ms pequeo posible, y en consecuencia, todo sucede mucho ms rpido: Contemos del 0 al 4 (entindanse el 0 y el 4 de forma abstracta, y no por el smbolo utilizado en base 10) : 0, 1 (agotados los dgitos disponibles), 10, 11 (agotados los dgitos en las dos posiciones), 100 Observe el alumno que el peso de los dgitos es ahora de unidades, pares, cudruplos, ctuplos, etc... La discusin precedente puede parecer excesivamente elemental para un curso de Ingeniera, pero no he querido saltrmela, dada la tremenda importancia de este formato de representacin. Prcticamente todos los mtodos de representacin que usa un computador actual (enteros, flotantes, direcciones, nombres de registros, etc.) estn basados en el sistema binario natural, Este sistema de representacin es un ejemplo claro de lo que se conoce como sistemas posicionales, en los que el peso de cada dgito depende de la posicin que ocupa. En realidad, el dgito X-simo de una cierta base, en la posicin N-sima (empezando a contar desde 0 por la derecha) tendra exactamente un peso X B N (piense en el dgito 2, del nmero decimal 23, que tendra el peso equivalente a dos decenas). En consecuencia, el primer dgito de cada sistema (casi siempre conocido como 0) no tiene peso alguno, est donde est. Y tambin se obtiene la conclusin de que los ceros a la izquierda de cualquier dgito no-nulo no afectan a la representacin, ya que no alteran el nmero de orden de los dgitos no nulos. Contemos, por fin, del 0 al 15: 0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111, Como ver el alumno, he completado con ceros a la izquierda, hasta utilizar siempre cuatro dgitos. Esto no lo he hecho exclusivamente por ser elegancia. Hay otra razn.
Cualquier dato representado en binario est destinado a ser almacenado en algn lugar del computador, y por tanto, tiene preestablecido un tamao (en bits). En consecuencia, cada vez que se realice una representacin binaria, deber indicarse previamente el nmero de bits que se deben utilizar. En resumen: El peso de cada dgito depende de su valor d (0, 1) y su posicin i El peso de cada dgito es di 2 i
El nmero representado es N=d i 2 i
Ejemplo: Averiguar qu valor representa la cadena binaria natural 010101
dgito 0 1 0 1 0 1
posicin 5 4 3 2 1 0
El nmero es 0 32+1 16+0 8+1 4+0 2+1 1 = 21
Para resolver el problema directo, es fcil demostrar, a partir de la frmula N=d i 2 i
que cada dgito se puede obtener mediante el siguiente algoritmo:
for i=0 to N-1 d i = resto(N/base) N= cociente(N/base) end
Vemoslo con un ejemplo, que represente 23 en binario natural (BN):
23: 2 = 11, resto 1 11: 2 = 5, resto 1 5 : 2 = 2, resto 1 2 : 2 = 1, resto 0 1 : 2 = 0, resto 1 0 : 2 = 0, resto 0 0 : 2 = 0, resto 0 0 : 2 = 0, resto 0
(y as hasta completar la longitud de la cadena).
solucin: BN 8 (23)= 00010111
(Obsrvese el subndice 8 que indica la longitud de la cadena).
Rango de representacin. Se denomina rango a la distancia entre el nmero ms grande y el ms pequeo que se pueden representar en un determinado formato. En Binario Natural, el rango representable con n bits es:
Rango(BNn)={0,2 n -1}
La manipulacin con soltura de los nmeros en binario natural es imprescindible para cualquier persona que se quiera dedicar en cuerpo y alma a la informtica, y por supuesto as debe ser tambin para el alumno que desee finalizar satisfactoriamente este curso. Para ayudar a conseguir este objetivo, indico a continuacin algunos trucos casi imprescindibles para el manejo del sistema binario natural: Los ceros a la izquierda no tienen peso: 001100 equivale a 1100 Cualquier nmero en la forma 100000 es una potencia de 2 (en base 10 sera una potencia de 10, evidente, no?) Cualquier nmero en la forma 111111 es una potencia de 2, menos 1 (en base 10, tambin existe una sentencia equivalente) Del 0 al 15 deben memorizarse (0000 a 1111) 1K= 1024 = 210 =10000000000 (1 seguido de 10 ceros) 1Mega= 1048576 = 220 =100000000000000000000 (20 ceros) 1Giga= 1024 = 230 =10000000000000000....000000 (30 ceros) Todos los impares terminan en 1, y en cero los pares Si A=00010101 termina en 01, entonces A mdulo 4 es 1 (01) Si A=00010101 termina en 101, entonces A mdulo 8 es 5 (101) Antes de continuar, plantear un problema de simple resolucin: En un torneo de tenis, por el sistema de eliminatorias, participan 1024 jugadores. Cuntos partidos hay que programar, incluida la final?
No hacen falta muchos conocimientos para encontrar la solucin:
512 partidos en primera ronda + 256 partidos en segunda ronda + 128 en tercera ronda + 64 partidos en la cuarta + 32 partidos + 16 + 8 de partidos de octavos + 4 cuartos de final + 2 semifinales + final = 1023
Sin embargo, este es un clsico problema que tiene una resolucin mucho ms simple, si se hubiera optado por pensar un poco ms antes de aventurarse a dar la solucin:
Si en cada partido se elimina un jugador, y tras la final, hay 1023 eliminados y un solo ganador: 1023 partidos jugados
He usado este clsico ejercicio (lase a Martin Gardner) como introduccin a una ecuacin interesante para el desarrollo de algunas partes de la asignatura:
2 n 1 = 2 n-1 + 2 n-2 + 2 n-3 + ... + 4 +2 + 1
Ejemplo: 1+2+4+8 = 15 = (16 1), o lo que es lo mismo, 1111 = 10000 1
La anterior frmula, muy relacionada con los trucos 2 y 3 anteriormente presentados, es una de las muchas consecuencias evidentes del formato de representacin posicional. Hemos pasado toda la vida conviviendo con este tipo de frmulas (o alguien no saba que 9 + 90 + 900 es 1000 -1 ?), pero al cambiar a binario, nos cuesta un poco ms reconocer ciertas evidencias. A lo largo del curso se utilizar como estrategia la comparacin con la base 10, para que al alumno le suponga un menor esfuerzo la transicin al mundo binario. Deteccin de errores y bits de paridad Concepto de distancia Hamming...
Bits de paridad en el cdigo Hamming Aadir ms bits de paridad para aumentar la distancia del cdigo. Para un cdigo de 4 bits (d3 d2 d1 d
La palabra se recodifica, ubicando est significativos): d3 d2 d1 p4 d0 p2 p1
Una vez redefinida la palabra (d3 d2 d1 d0) a la cadena (d3 d2 d1 x6 x5 x4 x3 x2 x1), sta se trasmite, como se muestra en el esquema:
El receptor (lado derecho del esquema) recibe un mensaje que, en principio, debera ser el mismo que el errores). No obstante, el receptor desconfa,y calcula los valores de de los bits de paridad que le corresponden a los bits de datos que se han recibido: dad en el cdigo Hamming Aadir ms bits de paridad para aumentar la distancia del cdigo. Para un cdigo de 4 bits (d3 d2 d1 d0) se aaden 3 bits adicionales: La palabra se recodifica, ubicando estratgicamente los nuevos bits: (de ms a menos p4 d0 p2 p1 Una vez redefinida la palabra (d3 d2 d1 d0) a la cadena (d3 d2 d1 p4 d0 p2 p1) = (x7 trasmite, como se muestra en el esquema: ptor (lado derecho del esquema) recibe un mensaje d3 d2 d1 p4 d0 que, en principio, debera ser el mismo que el retrasmitido (si no se han producido el receptor desconfa,y calcula los valores de de los bits de d que le corresponden a los bits de datos que se han recibido: Aadir ms bits de paridad para aumentar la distancia del cdigo. (de ms a menos p4 d0 p2 p1) = (x7
d0 p2 p1 etrasmitido (si no se han producido el receptor desconfa,y calcula los valores de de los bits de p1=xor(d3,d1,d0) p2=xor(d3,d2,d0) p4=xor(d3,d2,d1) Y si no coinciden los valores de paridad recibidos (p1, p2, p4) con los que el receptor recalcula, (p1, p2, p4), entonce dato ha llegado mal (d3, d2, d1 o d0 no se corresponden con los originales) o bien porque algn bit de paridad se ha recibido de forma incorrecta (p1, p2 o p4). En cualquier caso, y aqu es donde est (bit a bi) entre las cadenas (p4, p2, p1) y (p4, p2, p1) da como resultado una cadena, que interpretada como Binario Natural, identifica (con un nmero de 7 a 1) el ndice del dgito errneo de la caden qu bit es incorrecto, podemos corregirlo, simplemente, invirtiendo su valor. Vase el siguiente ejemplo con un error de transmisin en el bit x4 (el bit p4). Obsrvese que el cdigo Hamming presupone q mximo, ya que en el caso de que se produzcan dos errores, el cdigo lo detectara, pero sera incapaz de corregirlo correctamente.
2.1.2 Nmeros enteros (naturales con signo) La representacin de nmeros enteros en cero), en principio, puede ser tan obvia para el alumno como en el mundo decimal, es decir, aadiendo un signo al valor absoluto del nmero entero. Sin embargo, Y si no coinciden los valores de paridad recibidos (p1, p2, p4) con los que el receptor recalcula, (p1, p2, p4), entonces es que se ha producido un error. Bien porque un dato ha llegado mal (d3, d2, d1 o d0 no se corresponden con los originales) o bien porque algn bit de paridad se ha recibido de forma incorrecta (p1, p2 o p4). En cualquier caso, y aqu es donde est la clave del cdigo Hamming, la operacin XOR (bit a bi) entre las cadenas (p4, p2, p1) y (p4, p2, p1) da como resultado una cadena, que interpretada como Binario Natural, identifica (con un nmero de 7 a 1) el ndice del dgito errneo de la cadena recibida (x7 x6 x5 x4 x3 x2 x1 qu bit es incorrecto, podemos corregirlo, simplemente, invirtiendo su valor. Vase el siguiente ejemplo con un error de transmisin en el bit x4 (el bit p4). Obsrvese que el cdigo Hamming presupone que slo se va a producir un error como mximo, ya que en el caso de que se produzcan dos errores, el cdigo lo detectara, pero sera incapaz de corregirlo correctamente. 2.1.2 Nmeros enteros (naturales con signo) La representacin de nmeros enteros en un computador (naturales con signo, ms el cero), en principio, puede ser tan obvia para el alumno como en el mundo decimal, es decir, aadiendo un signo al valor absoluto del nmero entero. Sin embargo, Y si no coinciden los valores de paridad recibidos (p1, p2, p4) con los que el receptor Bien porque un dato ha llegado mal (d3, d2, d1 o d0 no se corresponden con los originales) o bien porque algn bit de paridad se ha recibido de forma incorrecta (p1, p2 o p4). En la clave del cdigo Hamming, la operacin XOR (bit a bi) entre las cadenas (p4, p2, p1) y (p4, p2, p1) da como resultado una cadena, que interpretada como Binario Natural, identifica (con un nmero de 7 a 1) el ). Al saber
Vase el siguiente ejemplo con un error de transmisin en el bit x4 (el bit p4).
ue slo se va a producir un error como mximo, ya que en el caso de que se produzcan dos errores, el cdigo lo detectara, pero un computador (naturales con signo, ms el cero), en principio, puede ser tan obvia para el alumno como en el mundo decimal, es decir, aadiendo un signo al valor absoluto del nmero entero. Sin embargo, contradiciendo a Occam, y como veremos a continuacin, no siempre lo ms simple es lo mejor. En este apartado, veremos varios formatos de representacin de nmeros con signo: Signo Magnitud Negativos en complemento a 1 Negativos en complemento a 2 Representaciones en exceso a X Pero antes de entrar en los detalles de estos formatos, es necesario introducir un par de conceptos muy simples. Complemento a X. Dado un nmero N, se denomina el complemento a X de N al resultado de la operacin X-N. El complemento a 100 de 18 es 72. Exceso a X. Dado un nmero N, se denomina exceso a X de N al resultado de la operacin X+N. El exceso a 100 de 8 es 108. Signo Magnitud (SM) En la representacin signo magnitud de n bits, un nmero entero se representa mediante la concatenacin de un bit que representa el signo del nmero, ms una secuencia que representa en binario natural la magnitud (el valor absoluto) del nmero N, representado con n-1 bits. El bit de signo, por convenio, es 0 para los nmeros positivos, y 1 para los negativos. Esto es, dado un nmero N entero, Si N>=0, entonces SM n (N) = 0,BN n-1 (N) Si N<=0, entonces SM n (N) = 1,BN n-1 (-N) Como con n-1 bits podremos representar exactamente la mitad de nmeros que con n bits, por tanto, el rango de representacin, a cada lado del cero, es la mitad que en formato Binario Natural: Rango(SM)={-2 n-1 -1,2 n-1 -1}
Observe que existe una doble representacin para el cero, en principio, esto no es un problema grave, aunque en cierta medida, consumir dos combinaciones para representar un mismo nmero (1 000...000, 0 000...000) implica que hay menos combinaciones disponible para el resto de nmeros.
Negativos en complemento a 1 El formato de representacin Signo Magnitud es muy apropiado para la interaccin hombre-mquina, ya que se asemeja al formato utilizado en nuestra vida cotidiana. Sin embargo, no resulta apropiado para el trabajo interno del computador, ya que le resulta mucho ms compleja la ejecucin de operaciones aritmticas respecto a otros formatos menos intuitivos y que estudiaremos a continuacin. El formato de representacin denominado de complemento a la base menos uno consiste en representar cada dgito por su complemento a la base menos uno. Veamos un simple ejemplo en nuestra base. Cmo se representa el nmero PI (3,1416) en complemento a 9? Respuesta: 6,8583 Cada dgito, por ejemplo, el 1, ha sido sustituido por su complemento a 9. En nuestro ejemplo, el 8 (9-1). En realidad, al nmero PI le hemos calculado el complemento a 9.9999 En base 2, el complemento a 1 de un nmero es una cadena binaria a la que se le invierten todos sus bits (los 1 cambian por 0 y viceversa). El complemento a 1 de 7 (0111) es 1000. Estrictamente hablando, cuando decimos complemento a 1 de un nmero de longitud n, en realidad queremos decir el complemento a 2 n -1: El complemento a 1 de (7) 0111 es 8 (1000). Estrictamente hablando, el complemento a 15 (2 4 -1= 1111) de (7) 0111 es 8 (1000). El complemento a 9 de 1492 es 8507. Estrictamente hablando, el complemento a 9999 (10 4 -1) de 1492 es 8507. Una vez comprendida la representacin complemento a la base menos uno, o complemento a uno (C1), estamos preparados para entender el formato negativos en complemento a la base menos uno, o negativos en complemento a uno (NC1), que consiste simplemente en: Si N>=0, entonces NC1 n (N) = 0,BN n-1 (N) Si N<=0, entonces NC1 n (N) = 1,C1 n-1 (-N) Es decir, slo a los nmeros negativos, le calculamos el complemento a 1 de su magnitud o valor absoluto. Pero, cul es la razn ltima del formato de representacin de negativos en complemento a la base menos uno? Bsicamente, la representacin de un nmero negativo por su complemento a la base menos 1 facilita las operaciones aritmticas en las que el signo del nmero es especialmente relevante (suma y resta de nmeros enteros). Ejemplo: Para una persona que trabajaba en la caja de un supermercado el pasado siglo (antes de que se utilizaran los euros y las cajas registradoras modernas), la forma ms rpida de calcular la vuelta de un pago era mediante el clculo del complemento a nueve. Si la cuenta era de 792 pesetas y se pagaba con un billete de 1000 pesetas, mentalmente se calculaba el complemento a 9 (207) y se le aada una peseta (208). En realidad, este formato apenas se utiliza, aunque se considera un formato intermedio que facilita la comprensin de otro formato (el denominado negativos en complemento a 2). La tabla 2.1 muestra la representacin de los nmeros en NC1, para n=4, en el rango:
Rango(NC1)={-2 n-1 -1,2 n-1 -1}
Observe la doble representacin del cero. Negativos en complemento a 2 El formato de representacin denominado de complemento a la base consiste en representar un nmero de longitud n por el complemento a la base elevado a n. Veamos un simple ejemplo en nuestra base. Cmo se representa el nmero 1492 en complemento a 10? Respuesta: (10000- 1492) 8508 En la prctica, y como hizo el cajero del supermercado, cada dgito, por ejemplo, el 1, ha sido sustituido por su complemento a 9 y tras la conversin al complemento a 9, le hemos sumado 1. En base 2, el complemento a 2 de un nmero es una cadena binaria a la que se le invierten todos sus bits (los 1 cambian por 0 y viceversa) y se le suma 1. El complemento a 2 de 7 (0111) es 1001. Estrictamente hablando, cuando decimos complemento a 2 de un nmero de longitud n, en realidad queremos decir el complemento a 2 n : El complemento a 2 de (7) 0111 es 9 (1001). Estrictamente hablando, el complemento a 16 (2 4 ) de (7) 0111 es 9 (1001). El complemento a 10 de 1492 es 8508. Estrictamente hablando, el complemento a 10000 (10 4 ) de 1492 es 8508. Al igual que antes, una vez comprendida la representacin complemento a la base, o complemento a dos (C2), estamos preparados para entender el formato negativos en complemento a la base, o negativos en complemento a dos (NC2), que consiste simplemente en: Si N>=0, entonces NC2 n (N) = 0,BN n-1 (N) Si N<0, entonces NC2 n (N) = 1,C2 n-1 (-N) Es decir, slo a los nmeros negativos, y para almacenarlos, le calculamos el complemento a 2 de su magnitud o valor absoluto. Ahora ya estamos preparados para entender el porqu del formato de representacin de negativos en complemento a la base, con un ejemplo en base 10. Juan lleva la contabilidad de sus ahorros y deudas (siempre de 2 dgitos decimales) en el formato negativos en complemento a 100. Para ello, cuando tiene algo de dinero (por ejemplo, 22 euros) Juan lleva una sonrisa en la boca (signo positivo) ms los 22 euros de su bolsillo. (Representacin +22) Sin embargo, cada vez que tiene una deuda (por ejemplo, le debe 43 euros a Paco) su madre le da un billete de 100 euros porque no le gusta que su hijo sea un deudor. Entonces Juan llevar 57 euros en el bolsillo ms un rostro serio que le delata su saldo negativo y le recuera que a pesar de los 57 del bolsillo, le debe 100 a su madre. (La representacin de -43 es -57). Gracias a esta forma curiosa de manejar las cifras negativas, las operaciones matemticas en las que el signo est involucrado resultan ms simple para Juans: Si la abuela de Juan le regala 50 euros, su deuda (-43) se convierte en saldo positivo, ya que tendr 107 euros en el bolsillo, que le permitirn devolver los 100 a su madre y transformar su cara por el saldo positivo: +7 Pero si la abuela slo le regala 40 euros, tendr 97 en el bolsillo, le sigue debiendo 100 a su madre (negativo), aunque su deuda real es de slo 3 euros en valor absoluto. Y qu pasa cuando acumula dos deudas. Imagine que le debe 43 euros a Paco, y 9 euros a Julin. Para la deuda de Paco, su madre le da 100 euros, y para la de Julin, es su padre quien le paga 100 euros. De los 148 euros que le sobran en el bolsillo, le da 100 a su padre, pero an le queda el rostro negativo ms 48 euros en el bolsillo, que identifican una deuda real de 52 euros (representada -48). El formato de representacin de negativos en complemento a 2, facilita a los computadores el clculo de operaciones aritmticas de suma y resta con nmeros con signo. De hecho, el computador no necesita aprender un algoritmo de la resta similar al que nosotros aprendimos en 3 de primaria, ya que en realidad, slo necesita aprender un algoritmo de suma, ms una operacin de clculo de opuesto de un nmero en formato negativos en complemento a 2. Truco: A la hora de calcular el complemento a 2 de un nmero negativo de longitud n (recordemos que en realidad es su complemento a 2 n ), resulta mucho ms prctico calcular el complemento a 1 para despus sumarle 1 al resultado. As, para representar - 3 con cuatro bits, al valor absoluto (3) en Binario Natural de 3 bits (011), le invertimos los bits (100) y le aadimos 1 (101). Concatenado con el signo, el resultado es 1101. La definicin nos obligara a calcular el complemento a 8 de 3 (5), y representarlo en Binario Natural (101) con el signo (1 101). Si el nmero es positivo, se indica un bit de signo 0, y la magnitud se guarda en Binario Natural. Y para resolver el problema inverso? Qu hacemos? Segn el truco descrito, parece que debemos hacer lo siguiente. Si el bit de signo es 0, slo debemos tratar el nmero como si estuviera en Binario Natural. Si es negativo, podemos restar 1 a la cadena de los n-1 bits de la derecha, e invertir posteriormente los bits, aunque en la prctica, lo que se hace es invertir los bits a dicha cadena y luego sumarle uno, lo que dara exactamente el mismo resultado. El rango de la representacin NC2 es diferente a todo lo que hemos visto hasta ahora. Por definicin, el cero se considera como un nmero positivo, lo que permite que se pueda construir una combinacin de ms con los negativos. Eso nos permite ampliar el rango, como muestra la Tabla 2.1, para llegar desde el -2 n-1 hasta el +2 n-1 -1. Por otra parte, la representacin del menor nmero negativo vlido, el -2 n-1 , que siempre tiene la forma 1000...000, hace especialmente compleja para el alumno la resolucin de los problemas de representacin si se opta por utilizar el truco en lugar de la propia definicin. Representaciones en exceso a X La representacin de nmeros en exceso a X nos permite, sin tener en cuenta ninguna de las complejidades relacionadas con el bit de signo, almacenar nmeros negativos en el rango comprendido entre X a 0. Por ejemplo, -13 se puede almacenar en exceso a 20, y para ello slo nos basta conocer el formato Binario Natural: EXC20 n (-13) = BN n (7) = 000...0111 Tradicionalmente, los formatos en exceso ms utilizados son el exceso a 3, el exceso a 2 n-1 y el exceso a 2 n-1 -1. En particular, se utilizan mucho los valores n=8 y 11 (exceso a 127, exceso a 128 y excesos a 1023 y 1024) La siguiente tabla muestra la representacin del rango -8 a +8 en los distintos formatos: base 10 signo magnitud exceso a 8 exceso a 7 negativos C1 negativos C2 +7 0 111 1111 1110 0 111 0 111 +6 0 110 1110 1 101 0 110 0 110 +5 0 101 1 101 1100 0 101 0 101 +4 0 100 1100 1 011 0 100 0 100 +3 0 011 1 011 1 010 0 011 0 011 +2 0 010 1 010 1 001 0 010 0 010 +1 0 001 1 001 1 000 0 001 0 001 +0 0 000 1 000 0 111 0 000 0 000 -0 1 000 1 111 -1 1 001 0 111 0 110 1 110 1 111 -2 1 010 0 110 0 101 1101 1 110 -3 1 011 0 101 0 100 1 100 1101 -4 1 100 0 100 0 011 1 011 1 100 -5 1 101 0 011 0 010 1 010 1 011 -6 1 110 0 010 0 001 1 001 1 010 -7 1 111 0 001 0 000 1 000 1 001 -8
0 000
1 000
Tabla 2.1 Representacin de distintos nmeros enteros en diferente formatos
Representacin en punto fijo (coma fija) A menudo, a los nmeros naturales y enteros Nmeros en punto fijo, o coma fija Esto es as porque la coma de fraccin est (imaginariamente) fijada registro de almacenamiento, o lo que es lo mismo, justo a la derecha del dgito de menos peso, en un sistema posicional. Estrictamente hablando, los nmeros general) son todos aquellos en los que la coma de fraccin est siempre en una misma posicin, que no tiene por qu ser el extremo de la derecha. Un computador, por ejemplo, puede trabajar con nmeros de siempre, los 4 bits de la derecha son fraccin, y los ocho de la izquierda representan la parte entera. Toda la discusin anterior, que afectaba a la representacin de naturales y enteros, en realidad, se puede extrapolar a n En nuestro ejemplo, PI se representa con 00000003.1416 en Decimal Natural, o en la forma 99999996.8583 en negativos complemento a 9. 99999996.8584 sera su complemento a 10 8. Obsrvese que en este caso, la posicin de los a izquierda se anota desde -4 a +8. El siguiente ejemplo muestra cmo se convierte un nmero a formato en punto fijo con parte fraccin de 4 bits (observe la numeracin en funcin de la posicin): Observe que el bit de la derecha de l la derecha de la coma tiene peso 2
Representacin en punto fijo (coma fija) aturales y enteros, en computacin, se les conoce como Nmeros en punto fijo, o coma fija. coma de fraccin, en el registro de almacenamiento del nmero, da en una posicin determinada: el extremo derecho de registro de almacenamiento, o lo que es lo mismo, justo a la derecha del dgito de menos peso, en un sistema posicional. Estrictamente hablando, los nmeros en punto fijo representados con n bits (o dgitos en general) son todos aquellos en los que la coma de fraccin est siempre en una misma posicin, que no tiene por qu ser el extremo de la derecha. Un computador, por ejemplo, puede trabajar con nmeros de 12 bits en los que siempre, siempre, los 4 bits de la derecha son fraccin, y los ocho de la izquierda representan la Toda la discusin anterior, que afectaba a la representacin de naturales y enteros, en realidad, se puede extrapolar a nmeros genricos en punto fijo. En nuestro ejemplo, PI se representa con 00000003.1416 en Decimal Natural, o en la 6.8583 en negativos complemento a 9. 99999996.8584 sera su Obsrvese que en este caso, la posicin de los nmeros, de derecha 4 a +8. El siguiente ejemplo muestra cmo se convierte un nmero a formato en punto fijo con parte fraccin de 4 bits (observe la numeracin en funcin de la posicin):
Observe que el bit de la derecha de la cadena tiene un peso de 0.0625, 2 -4 , y que el bit a la derecha de la coma tiene peso 2 -1 (0.5). conoce como ento del nmero, el extremo derecho del registro de almacenamiento, o lo que es lo mismo, justo a la derecha del dgito de en punto fijo representados con n bits (o dgitos en general) son todos aquellos en los que la coma de fraccin est siempre en una misma 12 bits en los que siempre, siempre, los 4 bits de la derecha son fraccin, y los ocho de la izquierda representan la Toda la discusin anterior, que afectaba a la representacin de naturales y enteros, en En nuestro ejemplo, PI se representa con 00000003.1416 en Decimal Natural, o en la 6.8583 en negativos complemento a 9. 99999996.8584 sera su nmeros, de derecha El siguiente ejemplo muestra cmo se convierte un nmero a formato en punto fijo con , y que el bit a Extensin del signo Qu ocurre cuando queremos aumentar el nmero de dgitos utilizados para representar un nmero? El procedimiento es el siguiente (es trabajo del alumno comprobar que es as, en funcin del formato utilizado). Si el nmero est en formato BN, se completa con 0s a la izquierda. Si el nmero est en cualquier otro formato y es positivo, se completa con 0s a la izquierda. Si el nmero est en NC1 o NC2 y es negativo, se completa con 1s a la izquierda. Por esta razn, al aumento del tamao de un nmero se suele conocer como extensin del signo. Si el nmero tiene una parte fraccin, a la derecha de la coma, entonces si se aumenta la parte fraccin, se hace con ceros a la derecha, a menos que se utilice el formato NC1, en cuyo caso se incrementa con 1s. 2.1.3 Nmeros flotantes, o en coma flotante En muchas ocasiones, el computador necesita manipular datos en los que la representacin de enteros, o de nmeros en punto fijo, es insuficiente. Imagine, por ejemplo, que se desea almacenar el nmero de Avogadro, 6.023 10 23 . Evidentemente, no hay registros de suficientes dimensiones para almacenarlo como entero, e incluso puede ser imposible en el caso de nmeros reales o racionales muy pequeos. En este caso, el computador utiliza un formato de representacin de los nmeros, similar a la que precisamente se ha utilizado para representar el nmero de Avogadro, en la forma de una mantisa (o nmero en formato de punto fijo como el +6.023), una base (por ejemplo 10) y un exponente en punto fijo (+23). Este tipo de representacin, constituido por un triplete de nmeros en punto fijo, se denomina coma flotante, ya que el punto fijo de la mantisa (6.023) no ocupa en la realidad la posicin que aparenta, sino que se ha hecho flotar o desplazar hacia la izquierda un nmero entero de posiciones. Exactamente se ha desplazado 23 posiciones (el exponente) respecto a la que hubiera sido su posicin real en un formato de punto fijo. Para nuestro ejemplo, y dado que la base es 10 (en general, podra servir cualquier potencia de 10), un valor entero del exponente implica que la coma se desplaza un nmero entero de posiciones. Es lgico pensar, por tanto, que en cualquier representacin en punto flotante, la base debe ser una potencia de la base utilizada para representar la mantisa. En la prctica, la base es una constante en cualquier formato de coma flotante, por lo que podemos resumir diciendo que: Un nmero en punto flotante est representado por una pareja de nmeros en punto fijo (mantisa y exponente). En el computador, la mantisa se almacena en binario, y en consecue una potencia de dos como base. Tradicionalmente, las bases ms utilizadas son 2 y 16. Veamos a continuacin un ejemplo en el que, por simplicidad, la mantisa es siempre positiva de 3 dgitos (Binario Natural exponente es un nmero de 2 bits Dada una base de referencia (por ejemplo, 2), dgitos representa al nmero #.## La siguiente figura representa en la recta real todos representar con este formato, lo que por otra parte nos servir como base para una discusin en profundidad de algunos aspectos de este formato de representacin de datos:
La Base Como se dijo anteriormente, en un computad potencia de dos para asegurarnos que un incremento o decremento unitario del exponente se corresponde en un desplazamiento de la coma fraccin en un nmero entero de posiciones. Como ejemplo, si representamos N en la f desplaza la coma exactamente hubiramos podido hacer lo mismo En la prctica, la base es una constante en cualquier formato de coma flotante, por lo que podemos resumir diciendo que: Un nmero en punto flotante est representado por una pareja de nmeros en punto fijo En el computador, la mantisa se almacena en binario, y en consecuencia se suele utilizar una potencia de dos como base. Tradicionalmente, las bases ms utilizadas son 2 y 16. Veamos a continuacin un ejemplo en el que, por simplicidad, la mantisa es siempre positiva de 3 dgitos (Binario Natural, con un bit a la izquierda de la coma, ero de 2 bits, ##, en formato NC2 (desde. -2 (11) hasta +1 (01)): Dada una base de referencia (por ejemplo, 2), un nmero en punto flotante # dgitos representa al nmero #.## 2 $$ La siguiente figura representa en la recta real todos los nmeros que podramos representar con este formato, lo que por otra parte nos servir como base para una discusin en profundidad de algunos aspectos de este formato de representacin de Como se dijo anteriormente, en un computador binario, debemos utilizar una base potencia de dos para asegurarnos que un incremento o decremento unitario del exponente se corresponde en un desplazamiento de la coma fraccin en un nmero Como ejemplo, si representamos N en la forma 60.23 100 11 , un aumento del exponente exactamente dos posiciones a la izquierda: 0.6023 100 lo mismo si la base hubiera sido 2. En la prctica, la base es una constante en cualquier formato de coma flotante, por lo Un nmero en punto flotante est representado por una pareja de nmeros en punto fijo ncia se suele utilizar una potencia de dos como base. Tradicionalmente, las bases ms utilizadas son 2 y 16. Veamos a continuacin un ejemplo en el que, por simplicidad, la mantisa es siempre , con un bit a la izquierda de la coma, #.##) y el 2 (11) hasta +1 (01)): #.##$$ de 5 los nmeros que podramos representar con este formato, lo que por otra parte nos servir como base para una discusin en profundidad de algunos aspectos de este formato de representacin de
or binario, debemos utilizar una base potencia de dos para asegurarnos que un incremento o decremento unitario del exponente se corresponde en un desplazamiento de la coma fraccin en un nmero , un aumento del exponente 23 100 12 . No Por esta razn, en binario se utilizan bases potencias de 2. grande o pequea? Qu hubiera ocurrido en nuestro ejemplo con una base mayor? Observe que con base 4 (vlida por ser potencia de 2) 1.25 4 +1 , (5 en lugar de 2.5). El resultado es que una base m de representacin. Pero si se compara esta figura con la anterior, nos damos cuenta de que l nmeros representables (20, un grupo muy reducido de todos los r misma. Los mismos nmeros es lo mismo, menos precisin: Dado un nmero real cualquiera, el nmero representable ms cercano est de media, el doble de lejos. La experiencia demuestra que en los computadores modernos es ms necesaria la precisin que el rango, por lo que se utiliza una base pequea, que casi siempre es 2. A partir de ahora siempre se utilizar esta base. El exponente Qu hubiera pasado en nuestro Evidentemente, podemos construir nmeros ms grandes, o ms prximos a cero (fjese en las flechas de la grfica) aumentando de esa forma el rango, sin afectar a la preci pero a costa de mayor nmero de bits de almacenamiento. Por esta razn, en binario se utilizan bases potencias de 2. Pero interesa una base grande o pequea? Qu hubiera ocurrido en nuestro ejemplo con una base mayor? (vlida por ser potencia de 2), la cadena 1.01 01 representa al , (5 en lugar de 2.5). El resultado es que una base ms grande aumenta el Pero si se compara esta figura con la anterior, nos damos cuenta de que la cantidad de un grupo muy reducido de todos los reales) sigue siendo la misma. Los mismos nmeros en un rango ms grande significa ms dispersin, o lo qu es lo mismo, menos precisin: Dado un nmero real cualquiera, el nmero representable ms cercano est de media, el doble de lejos. experiencia demuestra que en los computadores modernos es ms necesaria la precisin que el rango, por lo que se utiliza una base pequea, que casi siempre es 2. A partir de ahora siempre se utilizar esta base. Qu hubiera pasado en nuestro ejemplo si se aumenta el nmero de bits del exponente? ntemente, podemos construir nmeros ms grandes, o ms prximos a cero (fjese en las flechas de la grfica) aumentando de esa forma el rango, sin afectar a la preci pero a costa de mayor nmero de bits de almacenamiento. Pero interesa una base grande o pequea? Qu hubiera ocurrido en nuestro ejemplo con una base mayor? , la cadena 1.01 01 representa al s grande aumenta el rango
a cantidad de sigue siendo la en un rango ms grande significa ms dispersin, o lo que es lo mismo, menos precisin: Dado un nmero real cualquiera, el nmero representable experiencia demuestra que en los computadores modernos es ms necesaria la precisin que el rango, por lo que se utiliza una base pequea, que casi siempre es 2. ejemplo si se aumenta el nmero de bits del exponente?
ntemente, podemos construir nmeros ms grandes, o ms prximos a cero (fjese en las flechas de la grfica) aumentando de esa forma el rango, sin afectar a la precisin, La prctica ha demostrado que un nmero de bits entre 8 y 11 para el exponente (nmeros en el rango 2127, en punto flotante de grandes o pequeas dimensiones universo hay muchas menos partculas subatmicas que fermin es muy superior a 2 -128 La Mantisa Y qu pasa con la mantisa? Imagine que aadimos un bit a la mantisa, para que tenga la forma #.###. El resultado es que entre cada dos nmeros representables, tendremos un nuevo nmero. Aumentamos la precisin, sin que afecte al rango (apenas), pe costa de un mayor coste de almacenamiento. Nuevamente la experiencia establece que ms que suficiente para la mayora de nuestras necesidades computacionales, ya que podemos escribir cifras cuya decimales. Normalizacin Revisemos de nuevo nuestro ejemplo. representar el nmero 0.25: 0.5 esta redundancia (que afecta indirectamente a la precisin) se suele utilizar una tcnica conocida como normalizacin siempre est en una posicin fija respecto al dgito ms significativo del nmero. Observe que los siguientes nmeros significativo a la izquierda de la coma 6.023 10 23 , 1.609 10 19 , 3.1416 10 El nico nmero que no se puede normalizar es el cero, que no tiene dgito significativo. En el computador, la normalizacin se hace con el bit ms signific de la coma. La prctica ha demostrado que un nmero de bits entre 8 y 11 para el exponente 127, 21024) es ms que suficiente para representar nmeros de grandes o pequeas dimensiones (observe que en todo os partculas subatmicas que 2 1014 , o que la masa de un 128 ). Y qu pasa con la mantisa? Imagine que aadimos un bit a la mantisa, para que tenga la forma #.###. El resultado es que entre cada dos nmeros representables, tendremos un nuevo nmero. Aumentamos la precisin, sin que afecte al rango (apenas), pe costa de un mayor coste de almacenamiento. Nuevamente la experiencia establece que entre 24 (simple) y 53 bits (doble precisin) para la mayora de nuestras necesidades computacionales, ya que podemos escribir cifras cuya precisin equivaldra al uso de entre 7 y 15 dgitos nuestro ejemplo. Es fcil darse cuenta que hay distintas formas de 0.5 2 -1 , 0.25 2 -0 , 1 2 -2 . Peor an es el caso del 0. Para evitar esta redundancia (que afecta indirectamente a la precisin) se suele utilizar una tcnica normalizacin, que consiste que en la mantisa, la coma de fraccin re est en una posicin fija respecto al dgito ms significativo del nmero. Observe que los siguientes nmeros en base 10 estn normalizados con el dgito ms erda de la coma: , 3.1416 10 0 , 1.492 10 3 . El nico nmero que no se puede normalizar es el cero, que no tiene dgito significativo. En el computador, la normalizacin se hace con el bit ms significativo, a la izquierda La prctica ha demostrado que un nmero de bits entre 8 y 11 para el exponente es ms que suficiente para representar nmeros todo nuestro , o que la masa de un Y qu pasa con la mantisa? Imagine que aadimos un bit a la mantisa, para que tenga la forma #.###. El resultado es que entre cada dos nmeros representables, tendremos un nuevo nmero. Aumentamos la precisin, sin que afecte al rango (apenas), pero a
(doble precisin) es para la mayora de nuestras necesidades computacionales, ya que equivaldra al uso de entre 7 y 15 dgitos que hay distintas formas de del 0. Para evitar esta redundancia (que afecta indirectamente a la precisin) se suele utilizar una tcnica a de fraccin re est en una posicin fija respecto al dgito ms significativo del nmero. con el dgito ms El nico nmero que no se puede normalizar es el cero, que no tiene dgito significativo. ativo, a la izquierda El cero Como el cero no se puede normalizar, y para evitar confusiones, en la mayora de los formatos en punto flotante se considera que el cero se representa con mantisa cero y exponente cero, evitando ms especulaciones. El bit ms significativo implcito Observe el dgito ms significativo, a la izquierda de la coma, en los nmeros decimales normalizados que se han puesto de ejemplo: el 6, el 1, el 3 y el 1. Qu tienen en comn? Que son distintos del cero. Y si los nmeros fueran binarios? Qu otra cosa tendran en comn? Que todos ellos seran un 1. Dicho de otra forma. Cualquier nmero normalizado, en binario, tendra la forma: 1.##### 2 $$$$
Es decir, que al guardar el nmero en un registro del computador de n bits, al menos uno de esos bits tiene un valor siempre conocido 1#####$$$$$ (el cero es una excepcin). Imagine que un computador guarda nmeros en punto flotante de 16 bits. Con tantos bits, tendramos unas 64000 combinaciones posibles de nmeros representables, pero como cierto dgito debe ser siempre 1, slo habra 32000 combinaciones vlidas, el resto, salvo la que represente el cero, son no vlidas. Para evitar este desperdicio, se utiliza una tcnica denominada bit implcito que simplemente consiste en no almacenar el bit ms significativo de la mantisa, ya que ste siempre es 1. Con ello conseguimos que todas las combinaciones sean vlidas y de esa forma duplicamos la precisin sin coste alguno. As, por ejemplo, del nmero 1.10 11 slo guardaramos la cadena .10 11 Eso no significa que el bit se elimine para siempre. Antes de hacer cualquier operacin aritmtica con ese nmero, el hardware debe restaurar en su posicin el bit implcito. El formato IEEE754 Con toda esta discusin, casi hemos llegado a definir el formato de representacin en punto flotante ms utilizado. El formato IEEE-754. Es un formato que consume 32 bits y en el que la base es 2 La mantisa completa es de 25 bits. Equivale a una precisin de 7 dgitos decimales. La mantisa tiene un formato Signo Magnitud (1 bit de signo, 24 de magnitud), pero el signo de la mantisa (que es el del nmero) est separado de la magnitud. La mantisa est normalizada con el bit ms significativo a la izquierda de la coma.
El bit ms significativo de la mantisa es implcito. (Slo se guardan 23 bits de la magnitud de la mantisa) El exponente consume 8 bits y se almacena en exceso a 127 (puede representar valores de -127 a +128). El rango equivalente en base 10 es aproximadamente 10 38 . Los bits se ordenan de la siguiente forma: SEEEEEEE EMMMMMMM MMMMMMMM MMMMMMMM (signo de la mantisa/del nmero) (exponente de 8 bits) (23 bits de la magnitud de la mantisa) Con todo lo dicho, el nmero que se guarda en ese formato se reconstruye con la siguiente frmula, en la que se recupera el bit implcito y se reordenan signo y magnitud: (-1) S 1.MMMMMMMMMMMMMMMMMMMMMMM 2 (EEEEEEEE 127)
Es importante observar que en este formato (a menudo se representa como float o real en los lenguajes de programacin), no podemos almacenar nmero fuera del rango (tampoco parece una limitacin fuerte, en general). Pero la precisin a veces puede resultar baja. Si se hace el siguiente experimento en lenguaje c, nos damos cuenta de que la precisin no es la deseada: float a=3.14159265358979323846; printf(a); Por esta razn, existe un formato IEEE-754 de doble precisin, as como casos especiales que amplan o mejoran la capacidad del formato para las necesidades ms habituales de los programadores. 2.1.4 Datos alfanumricos Adems de los datos numricos, en general, Representacin de las Instrucciones Un computador es una mquina formada por millones de transistores y puertas lgicas interconectados de alguna forma entre s, y que tiene la capacidad de realizar operaciones de una tremenda complejidad. En gran parte, toda esta potencia de clculo se debe a la capacidad que tenemos de programas el funcionamiento de todas y cada una de las puertas y transistores. La herramienta de la que disponemos para realizar esta tarea es la instruccin en lenguaje mquina, una cadena de ceros y unos almacenada en algn lugar del computador, y que tiene la propiedad de ser el programador.
El conjunto de instrucciones que un procesador es capaz de entender se conoce como juego de instrucciones. Y la especificacin de las caractersticas del j instrucciones es la arquitectura del juego de instrucciones, o ISA ingls. A veces tambin se le conoce como arquitectura del computador, pues el juego de instrucciones es ya en s una especificacin formal del procesador, d memoria y la entrada y salida, desde el punto de vista del programador. De hecho, se puede decir que es lo que el programador ve de la mquina, mientras que el proceso por el que se traducen esas instrucciones al hardware se conoce co Las operaciones del hardware
Sabemos, que cualquier computador es capaz de realizar ciertas operaciones muy elementales, por ejemplo, sumar, mover un dato de un lugar a otro, saltar, etc. Son operaciones bsicas que estn disponibles e Representacin de las Instrucciones na mquina formada por millones de transistores y puertas lgicas interconectados de alguna forma entre s, y que tiene la capacidad de realizar operaciones de una tremenda complejidad. En gran parte, toda esta potencia de clculo e tenemos de programas el funcionamiento de todas y cada una La herramienta de la que disponemos para realizar esta tarea es la instruccin en lenguaje mquina, una cadena de ceros y unos almacenada en algn lugar del ador, y que tiene la propiedad de ser inteligible tanto para el hardware como para El conjunto de instrucciones que un procesador es capaz de entender se conoce como juego de instrucciones. Y la especificacin de las caractersticas del j arquitectura del juego de instrucciones, o ISA, que es su acrnimo en A veces tambin se le conoce como arquitectura del computador, pues el juego de instrucciones es ya en s una especificacin formal del procesador, de su relacin con la memoria y la entrada y salida, desde el punto de vista del programador. De hecho, se puede decir que es lo que el programador ve de la mquina, mientras que el proceso por esas instrucciones al hardware se conoce como implementacin. Las operaciones del hardware Sabemos, que cualquier computador es capaz de realizar ciertas operaciones muy elementales, por ejemplo, sumar, mover un dato de un lugar a otro, saltar, etc. Son operaciones bsicas que estn disponibles en prcticamente todos los procesadores.
na mquina formada por millones de transistores y puertas lgicas interconectados de alguna forma entre s, y que tiene la capacidad de realizar operaciones de una tremenda complejidad. En gran parte, toda esta potencia de clculo e tenemos de programas el funcionamiento de todas y cada una La herramienta de la que disponemos para realizar esta tarea es la instruccin en lenguaje mquina, una cadena de ceros y unos almacenada en algn lugar del tanto para el hardware como para El conjunto de instrucciones que un procesador es capaz de entender se conoce como juego de instrucciones. Y la especificacin de las caractersticas del juego de , que es su acrnimo en A veces tambin se le conoce como arquitectura del computador, pues el juego de e su relacin con la memoria y la entrada y salida, desde el punto de vista del programador. De hecho, se puede decir que es lo que el programador ve de la mquina, mientras que el proceso por mo implementacin. Sabemos, que cualquier computador es capaz de realizar ciertas operaciones muy elementales, por ejemplo, sumar, mover un dato de un lugar a otro, saltar, etc. Son n prcticamente todos los procesadores. Pues bien, una instruccin no es ms que una cadena binaria donde se indica: la operacin a realizar, con qu datos la va a realizar, y qu condicin tiene que cumplirse para que se lleve a cabo. Cuando el procesador recibe una de estas instrucciones, la ejecuta.
Adems, suele realizar operaciones adicionales a modo de efectos colaterales. Uno de los efectos colaterales ms conocidos (del que se habl en el tema 1) es el incremento automtico del contador de programa, preparando de esta forma a la mquina para la siguiente instruccin. (El puntero explcito a la direccin de la siguiente instruccin era necesario en algunas de las primeras arquitecturas) Como se dijo anteriormente, esta cadena binaria es inteligible para nosotros, sin embargo, para poder movernos con mayor comodidad con el juego de instrucciones, hemos inventado un lenguaje de representacin intermedia conocido como ensamblador. Una instruccin en lenguaje ensamblador est formada por un mnemnico y una secuencia de operandos. El mnemnico se utiliza para representar la operacin a realizar, que en su versin binaria se conoce como cdigo de operacin . Ejemplos de mnemnicos: ADD, JUMP, MOVE Pero adems del cdigo de operacin, las operaciones requieren operandos, donde se digan con que datos se va a trabajar y donde hay que guardar los resultados. Por ejemplo, cuando movamos un dato hay que decir de dnde lo sacamos y en qu lugar lo almacenamos. MOVE X, Y (copiar la informacin almacenada en X en la localizacin Y) Recuerdo, que siempre que mencione un movimiento de datos, me refiero a la realizacin de una copia de un lugar del computador a otro. Equivale a la tpica instruccin x=y en los lenguajes de alto nivel que copia el valor actual de la variable y en la variable x. En el nivel ISA, una variable se considera como un espacio fsico donde se guarda un dato, y al que le asignaremos el nombre de direccin, de la misma forma que usamos direcciones para referirnos a los lugares donde residimos. Con la misma frecuencia que utilizamos variables en lugar de constantes, utilizaremos direcciones en las instrucciones mquinas, por lo que, es frecuente llamar a los operandos de una instruccin con el nombre de direcciones. A las diferentes formas de suministrar una direccin las conocemos como modos de direccionamiento. Por otro lado, puede ocurrir que una instruccin no necesite especificar perfectamente todas las direcciones sino que algunas de ellas pueden estar implcitas en la propia instruccin. Distinguiremos as entre los operandos o direcciones implcitas, que no aparecen en la instruccin, y las explcitas. Nmero de operandos (explcitos) Pero, Cuntos operandos explcitos debe tener una instruccin? Bueno, eso depender de varios factores, por ejemplo, de la operacin a realizar. Habr operaciones unarias, como el clculo del opuesto, que al menos necesitan una fuente y un destino. Pero centremos nuestra discusin en las binarias. Lo normal debera ser que se especifiquen tres direcciones, dos fuentes y un destino. Hay muchas arquitecturas que operan as, y se conocen como mquinas de tres operandos. ADD A,B,C (A=B+C) Pero prcticamente desde los inicios, las limitaciones de memoria de los computadores han sido un serio obstculo que se ha salvado normalmente reduciendo los programas, a costa en muchos casos de reducir las instrucciones. Y una forma de hacer las instrucciones ms cortas consiste en utilizar una de las direcciones a la vez como fuente y como destino. Son utilizadas por las mquinas de dos operandos. Por un lado, conseguimos reducir las instrucciones, pero por otro lado perdemos flexibilidad, pues uno de los operandos sera reemplazado por el resultado. ADD A, B (A=A+B) Las instrucciones de alto nivel del tipo a=a+b seran traducidas sin problemas al lenguaje de la mquina, pero sin embargo, instrucciones como a=b+c deberan traducirse por a=c; a=a+b Existen tambin mquinas que requieren un operando explcito. Este tipo de arquitecturas, estn basadas en el uso de un registro especial, el acumulador, que sirve implcitamente como una de las direcciones fuentes y tambin como destino. ADD X (Ac=Ac+X) Aunque las arquitecturas de acumulador han desaparecido prcticamente, an quedan algunos vestigios en calculadoras de bolsillo (TI1000 vendi 20 millones de unidades en 1979). Finalmente encontramos mquinas de cero operandos en las que, tanto las fuentes como el destino, estn implcitos. Para ello, suelen utilizar como direcciones un lugar especial de la mquina conocido como la pila. Haremos un pequeo parntesis para hablar de la pila. La pila no es ms que un conjunto de direcciones organizadas de forma que solo se puede introducir un nuevo dato, colocndolo justo encima del ltimo que se guard previamente, y del cul solo se pueden extraer los datos que estn justo en lo alto. (Los conceptos de encima y debajo suelen estar asociados a posiciones posteriores o anteriores de memoria de una forma predeterminada para cada mquina) El computador registra en un lugar denominado puntero de pila (PP) la direccin del ltimo elemento guardado, para saber donde debe poner el dato o de donde lo tiene que quitar. A la operacin de introducir un dato en la pila se le conoce como PUSH y la extraccin se conoce como POP. La operacin de suma se realizara en una mquina de cero operandos extrayendo como fuentes los dos ltimos elementos de la pila, y guardando el resultado en lo alto de sta. ADD (pop A, pop B, C=A+B, push C) En resumen, hemos visto mquinas de cero, uno, dos o tres operandos para las operaciones binarias, Aunque es ms frecuente clasificar las arquitecturas por los nombres que a continuacin se presentan: En orden creciente de longitud encontraremos Arquitectura de pila, en las que la mayora de las instrucciones no tienen ningn operando explcito, salvo las instrucciones PUSH y POP que deben indicar las direcciones ... Arquitecturas de acumulador cuando utilizan un operando explcito y el registro Acumulador, Finalmente, las arquitecturas de 2 o 3 direcciones explcitas se conocen a menudo como Arquitecturas de Registros de Propsito General (RPG) en contraposicin a las arquitecturas de Registros de Propsito Especfico, como el registro acumulador Entre stas ltimas es frecuente realizar una distincin en funcin del nmero de sus operandos que estn en memoria y cuntos estn en registro.
As, cuando todos sus operandos son direcciones de memoria, hablaremos de Arquitecturas Memoria-Memoria, que obtienen sus operandos de memoria y guardan sus resultados en ella.
Las AMM se caracterizan por producir cdigos con pocas instrucciones, aunque estas suelen ser de longitud muy variable, y provocan un elevado trfico con la memoria. Otras arquitectura, sin embargo, no operan con ningn dato de la memoria. Son las Arquitecturas Registro-Registro en las que las instrucciones son mucho ms simples, aunque ser necesario aumentar el nmero de instrucciones en programa y por supuesto, disponer de una mayor cantidad de registros. Finalmente, existen opciones intermedias, bastante frecuentes, en las que al menos un dato puede residir en la memoria. Son las Arquitecturas Registro Memoria. Antes de seguir avanzando con los MD, recordemos algunos aspectos importantes del acceso a memoria. La memoria Sabemos que la memoria es una estructura ordenada de datos, en la que la direccin de cada uno de los datos es precisamente su nmero de orden. Si un dato ocupara ms de una posicin, lo cul es bastante frecuente, consideraremos que la posicin del dato es la direccin ms baja de las que ocupa. En muchos casos los datos debern estar alineados en memoria, lo cual significa que los datos de tamao n deben ocupar las posiciones mltiplo de n. Cuando un dato ocupa varias posiciones de memoria, dnde debemos almacenar la parte ms significativa, y dnde la menos significativa? En principio, cualquier opcin sera vlida y no hay grandes diferencias entre una opcin u otra. Si decidimos que la direccin del dato es la de la parte ms significativa, es decir, la direccin del dato es la de su extremo ms grande, diremos que hemos utilizado un almacenamiento big-endian; en caso contrario, el almacenamiento se conoce como little-endian. Modos de Direccionamiento.
Hemos mencionado que en la mayora de los casos, los operandos no son incluidos en la instruccin, sino que se suele especificar el lugar donde se almacenan. Como en un computador solo hay dos lugares posibles para los datos: los registros y la memoria, en principio, una direccin debe indicar directamente el nombre de un registro o la direccin de memoria. Pues bien, estas sern las dos primeras formas o modos de direccionar los operandos que conozcamos: Modo de direccionamiento (MD) Directo a Registro, o simplemente Registro y MD Directo a Memoria o MD Absoluto.
En otros casos, nos encontraremos que en la instruccin lo que aparece es el lugar donde se guarda la direccin de un dato. Es lo que se denomina como indireccin. Es algo parecido a lo que ocurre con las direcciones de las personas y los "apartado de correos".
Desde el punto de vista del computador, la indireccin puede ser: Un registro que guarda la posicin en memoria de un dato (MD indirecto por registro, indirecto) una posicin de memoria que guarda la posicin en memoria de un dato (MD indirecto por memoria) En este ejemplo vemos como una instruccin usa el MDIR para un operando fuente, y el MDIM para el otro.
En ambos casos, tanto el RG2 como la direccin 1021 contienen los punteros o las direcciones de los datos que van a ser operados. De hecho, estos modos indirectos equivalen a las variables punteros en los lenguajes de alto nivel. Pero existen otros MD, que se resumen aqu. El primero, que ya conocemos, es el modo de direccionamiento implcito o inherente presente cuando en la instruccin no aparece explcitamente ninguna referencia al operando
Uno de los modos ms frecuentes es el MD inmediato o literal, que ocurre cuando las instrucciones incluyen el propio dato y no su direccin Finalmente, en el modo relativo, La posicin del dato en memoria se obtiene normalmente sumando dos nmeros, uno que se considera la base o punto de referencia de la memoria y el otro es el desplazamiento. o Existen varias formas para los modos relativos, aunque quiz la ms frecuente es aquella en la que un registro guarda la direccin de referencia, y un (relativamente) pequeo dato numrico positivo o negativo selecciona una posicin de memoria cercana a esa referencia. Es el MD Relativo a Base.
o Tambin muy frecuente es aquella en la que el dato numrico representa una direccin de memoria de referencia, mientras que el registro guarda el desplazamiento en el entorno de la referencia. Es el MD Relativo a Indice,que se suele utilizar para acceder a los elementos de un vector, siendo el dato numrico la direccin del vector, mientras que el ndice del elemento del vector se guarda en el registro.
Terminaremos este primer apartado, juntando todos los conceptos que hemos presentado, en lo que es el ncleo de esta leccin: la instruccin:
La instruccin, repito, no es ms que una cadena binaria formada por: Un cdigo de operacin, representado en binario, y una secuencia de 0,1,2 o 3 operandos, cada uno con su correspondiente representaciones en binario, y en los que cada operando debera indicar: El modo de Direccionamiento que se est utilizando El nombre del registro que se utiliza, si fuera necesario Y tambin si fuera necesario, un dato numrico que indique bien una direccin, un valor constante o un desplazamiento Pasamos al siguiente apartado en el que analizaremos el Formato de Instruccin, es decir, es la especificacin del significado de cada uno de los bits que forman la instruccin.
Como agruparemos los bits formando campos, el FDI es una Definicin formal de los campos de la instruccin posicin del campo tamao del campo significado del campo Aunque puede ocurrir que un computador tenga un formato fijo, lo ms frecuente es que cada arquitectura tenga varios formatos para las diferentes instrucciones. Factores a tener en cuenta: Su especificacin debe ser una de las fases ms tempranas del diseo de una nueva arquitectura. Deber sobrevivir unos 20-30 aos, pues es el tiempo mnimo de vida de una arquitectura de xito Debe tener en cuenta la memoria. Arquitectura de pila para memorias rpidas, de RPG para lentas (quien sabe lo que pasar en 20 aos?) Cortas mejor que largas. Pero poco codificadas Con espacio suficiente para todas las instrucciones Campos preferentemente alineados Pero Qu informacin debe incluirse en el formato de una instruccin He aqu una seleccin de los campos que aparecen con ms frecuencia: Respecto a la parte dedicada a indicar "lo que hay que realizar" o "Cdigo de Operacin", descubrimos que en realidad debe estr constituido por diferentes subcampos. CGO Cdigo (genrico) de operacin (p.e. suma, resta, movimiento, salto) SC Subcdigo, o funcin (p.e. signed, unsigned, float, integer) SZ Tamaos de los operandos (p.e. byte, half-word, word, double precision) CN Condicin que debe cumplirse para que la instruccin se ejecute: (mayor que, menor que, par, impar, etc.) SE Sentido de la operacin (en desplazamientos si es a izquierda o derecha, autoincremento o autodecremento) NV Nmero de veces que se realiza (p.e. en los desplazamientos y rotaciones) ...y por cada operando, hay que especificar: MD modo de direccionamiento RG nombre del registro (o los registros) DN dato numrico
Sobre el tamao de los campos Cada campo o subcampo utiliza un determinado nmero de bits N. Normalmente N es un valor fijo, que se calcula segn la regla genrica N= log2(n de posibles casos) Desgraciadamente, la codificacin de la instruccin no es tan simple, ya que no todos los campos estn presentes en todas las instrucciones, ni todas las instrucciones tienen los mismos operandos, ni todos los operandos son similares. En algunos casos, ni siquiera N es un valor fijo. Imagine que un determinado campo (p.e., el cdigo genrico de operacin, admite 8 casos posibles (move,add,sub,jump,stop,reset,call,ret). Se quiere especificar un formato para ese campo. Y segn lo expresado anteriormente, para un campo en el que caben 8 posibilidades, lo normal es utilizar tres bits (log(8)) para codificar cada una de las posibilidades. Dicha posibilidad se contempla en la parte izquierda de la siguiente tabla, en la que se sugiere una posible solucin.
000 move 001 add 010 sub 011 jump 100 stop 101 reset 0 move 10 add 110 sub 1110 jump 111100 stop 111101 reset 110 call 111 ret 111110 call 111111 ret
Sin embargo, el nico requisito imprescindible a la hora de codificar la informacin es que la cadena binaria debe identificar claramente qu tipo de operacin se desea realizar, es decir, que cada cadena binaria debe indicar una y slo una de las operaciones. La solucin de la derecha cumple ese requisito, y por tanto es una solucin vlida. No obstante en la solucin alternativa no se establece a priori un tamao fijo para el campo CGO, y en definitiva, altera la ubicacin del resto de campo, por lo que en definitiva, complica el proceso de interpretacin del significado. Por otra parte, nunca est clara la frontera que separa semnticamente los distintos campos. As, hasta que punto, en la solucin de la derecha, no podriamos considerar que la cadena binaria "1111" no es ms que un Cdigo Genrico de Operacin denominado "Operaciones poco Frecuentes". o que la cadena binaria "1" no es ms que un Cdigo Genrico de Operacin denominado "Operaciones que no son Move". En la siguiente seccin se analizan los tamaos tpicos de los campos que aparecen con ms frecuencia. El cdigo de operacin; siguiendo la regla de usar un nmero de bits igual al logaritmo en base dos del n de instrucciones, y teniendo en cuenta que los juegos de instrucciones estn formados por entre 64 y 512 instrucciones, lo normal es que dicho campo ocupe entre 6 y 9 bits. Respecto al Modo de Direccionamiento, no hay que olvidar que cada operando puede poseer su propio MD, y por tanto, se reservar un campo para cada operando. Aqu vemos como, por ejemplo, un operando al que se le permitan 4 modos, utilizaras dos bits para indicarlo. Tambin vemos que la codificacin que se utiliza puede ser completamente arbitraria.
Normalmente, a cada operando se le permiten entre 1 y 8 modos, por lo que el campo MD suele ocupar entre 0 y 3 bits.Destaquemos aqu que en los casos en los que una instruccin solo permite un modo, equivale a decir que los campos MD y CO se han fusionado.
Respecto a constantes, direcciones y desplzamientos, para codificarlos utilizaremos las representaciones de datos que ya conocemos, por la primera parte del tema.
Y respecto al tamao de dichas secuencias binarias, depender de las necesidades especficas de cada mquina, aunque aqu juega un papel muy importante la experiencia adquirida previamente; por ejemplo, los saltos relativos suelen realizarse a instrucciones situadas en un entorno que no suele superar las 1000 posiciones de memoria, por lo que 10 o 12 bits suelen ser suficientes.
Sobre la codificacin a binario Hay algunas estrategias de codificacin que son comunes en casi todas las mquinas. Algunas de ellas, estn relacionadas con la latencia en el acceso a memoria. Por eso, era frecuente encontrar estas limitaciones: Que todas las instrucciones tengan tamaos mltiplos de byte. Intentar incluir en el CO ms informacin; por ejemplo, que en ese campo no solo se incluya la operacin genrica, Y finalmente colocar al principio el CO, para que cuando accedamos a la primera parte de la instruccin sepamos qu hay que hacer, y ya despus leeremos con quin hay que hacerlo En consecuencia, de todo lo dicho, encontramos: Una gran variedad en el nmero y tamao de campos En algunos casos, cada instruccin tiene su propio formato Elevado coste de decodificacin ... y manuales del programador de gran tamao Aqu vemos una muestra grfica de los formatos de instruccin de algunos computadores muy conocidos, ajustado al cdigo de colores de la imagen anterior.
En la anterior imagen, para cada arquitectura se ha presentado una muestra genrica de los formatos de instrucciones. En todas ellas, lo normal es que se pueden combinar entre ellas, de forma que cada arquitectura dispona de miles de formatos diferentes, en funcin de la instruccin a ejecutar y los MD utilizados. La filosofa RISC Sin embargo, en la dcada de los 80 se produjo una importante cambio en la estrategia de codificacin, que se resume en la siguiente tabla: Ajustar todas las instrucciones a un tamao determinado El tamao no debe ser muy grande (muchas instrucciones no lo aprovecharan) Evitar diferentes modos de direccionamiento (reducir o eliminar el campo MD) Evitar los accesos directos a memoria o elimina cadenas binarias muy largas Limitar los accesos a memoria o La memoria es ahora mucho ms lenta respecto al procesador o Es preferible usar informacin en los registros o Hacen falta ms registros o El MD Registro es casi el nico modo permitido, con pocas excepciones Evitar la inclusin de datos numricos de gran extensin. o Modo Registro, preferentemente o Modo indirectos por registro o relativos a registros o Valores inmediatos no muy grandes o Desplazamientos no muy grandes Cdigos de operacin de tamao fijo: o Decodificacin ms simple Instrucciones muy precisas (nada de cdigos genricos) en las que se indique o Operacin a realizar, y adems... o El modo de direccionamiento de todos sus operandos o El tamao de los operandos, sentido, etc.. Muy pocos formatos (3 o 4). o Simplifica el hardware o incrementa el rendimiento
Esta estrategia de diseo, denominada RISC, o computadores con juego de instrucciones reducido (Reduced Instruction Set Computers), antepone la simplicidad frente a la complejidad de las arquitecturas precedentes, o CISC (Complex Instruction Set Computers) Las consecuencias de estas nuevas estrategias se observan perfectamente en la siguiente transparencia, donde se resumen los formatos de instruccin de las arquitecturas ms significativas de los ltimos 15 aos.
A diferencia de las arquitecturas ms antiguas, encontramos ahora un nmero mucho ms reducido de campos, ya que gran parte de la informacin ha sido absorbida por el CO. Los campos son ms regulares en tamao. El color amarillo domina, lo que indica la importancia adquirida por los registros. Adems, el tamao del campo en el que se indica el registro es ms ancho (ya que ha aumentado el nmero de registros en la CPU). El repertorio de Instrucciones Bien, pasamos a continuacin a exponer el conjunto de instrucciones, es decir a elegir las instrucciones que deben aparecer en un buen repertorio y a indicar los criterios considerados en la eleccin. Comenzaremos con una pequea clasificacin de las operaciones que deberamos poder realizar. Movimiento de datos o Registro-memoria, registro-registro o Acceso a pila o Entrada/Salida Aritmticas o Entero o Flotante o Desplazamientos aritmticos o Operacin de datos codificados en decimal (BCD, Exceso-3, etc.) Lgicas o Operaciones lgicas ms frecuentes, AND, OR, XOR, NOT o Desplazamientos lgicos y rotaciones o Test, Set, Reset, Conteo de bits, etc. Control o Saltos incondicionales o Saltos condicionales o bifurcaciones o Rutinas e interrupciones software o No clasificadas: NOP, HALT, etc. A continuacin vamos a plantearnos cules son las caractersticas que debe tener un buen juego de instrucciones. Aqu resumimos algunas de las que normalmente se deben exigir a un buen juego de instrucciones: Completo. Debe realizar cualquier tarea computable usando recursos finitos (y razonables). Eficaz. Alta velocidad de clculo, sin excesivo coste hardware, especialmente en las funciones ms utilizadas. Regular. Carencia de casos especiales. No debe sorprender al programador. (ej.: si hay un desplazamiento a la izquierda, debe haber otro a la derecha) Compatibilidad hacia atrs con otros juegos de instrucciones del mismo fabricante. Por motivos econmicos, los fabricantes desean que el software de modelos precedentes tambin se pueda ejecutar en las nuevas arquitecturas. Ortogonalidad? No. En los libros ms antiguos de Arquitectura de Computadores, se sola indicar que todos los operandos deberan poder utilizar cualquier modo de direccionamiento (ortogonalidad). Hoy en da, las arquitecturas RISC han descartado esta posibilidad, debido a la excesiva complejidad que introduce: o Obliga a incluir Campos de Modo de direccionamiento o Excesivo uso de la memoria o Instrucciones ms compleja, difciles de decodificar
Pero sin duda alguna, el criterio ms tenido en cuenta por los arquitectos de computadores a la hora de incluir o excluir una instruccin del repertorio es la frecuencia de uso.
Para ello, el uso de conjuntos de programas de prueba o benchmarks proporciona informacin de la necesidad o no de incluir instrucciones. Como ejemplos, podemos destacar que la poca frecuencia de uso de la instruccin CALL fue decisiva para que fuera descartada en las arquitecturas modernas. Sin embargo, nos encontramos con numerosas excepciones: Una instruccin poco frecuente, puede ser muy til o Por eficiencia (el coste de no disponer de ella puede ser elevado) o Por regularidad La frecuencia es un trmino relativo o Las "medidas" de frecuencia no se ajustan a ningn usuario La compatibilidad es un factor mucho ms considerado por los fabricantes Otras razones ms ocultas (por ejemplo, el gobierno de E.E.U.U. subvencion a cierto fabricante, para que incluyera una instruccin poco utilizada, por motivos estratgicos relacionados con la simulacin de explosiones atmicas a raz de la moratoria en las pruebas nucleares) En la ltima transparencia de esta seccin, se muestran, las ms importantes arquitecturas agrupadas por familias. (Una familia no es ms que un conjunto de arquitecturas donde existe compatibilidad hacia atrs).
Se ha marcado con una estrella en la parte izquierda la fecha de aparicin de cada nueva familia. Se observa la irrupcin de nuevas arquitecturas entre los aos 70 a 75, con la aparicin de los microprocesadores (en lo que se consider como la 4 generacin), y lo mismo ocurre entre los aos 85 y 90. Precisamente a los micros aparecidos en este perodo les dedicaremos el siguiente apartado, Los computadores RISC Como decamos, entre los aos 85 y 90 se produjo la irrupcin en el mercado de los microprocesadores de un conjunto (ridge32 fue el primero) de arquitecturas que se autodenominaron RISC, que se caracterizan por tener un conjunto de instrucciones relativamente reducido, formados por instrucciones bastante simples . En esta grfica se muestran los nmeros de instrucciones de algunos computadores denominados CISC y algunos ejemplos de RISC.
Como se observa, la reduccin en el nmero no es tan significativa, como para atribuir exclusivamente al nmero de instrucciones las diferencias entre las filosofas RISC y CISC.
En realidad las caractersticas atribuidas a los RISC son: Pocas instrucciones y muy simples Muchos registros y pocos accesos a memoria Instrucciones de tamao constante Nmero reducido de formatos de instrucciones Control cableado (an es pronto para entender este aspecto). Como conclusin podemos decir que, prcticamente todos los computadores actuales son RISC, si por RISC entendemos a las arquitecturas que incorporan las tcnicas ms innovadoras .
Pero sin duda alguna, el origen del trmino RISC procede de la eliminacin de la propiedad de ortogonalidad a los juegos de instrucciones, y la consecuente supresin del campo del modo de direccionamiento. As, la gran revolucin de los RISC se produce al discernir claramente entre el procesamiento de la informacin y el trabajo que supone localizar la informacin que est en la memoria. As, en un computador CISC, podemos, con una sola instruccin, procesar informacin almacenada en cualquiera lugar y accediendo de cualquier forma a dicha informacin. Un computador RISC utilizara varias instrucciones elementales para llevar la informacin a registros, otras instrucciones procesaran la informacin, y nuevas instrucciones devolveran los resultados al almacn que le corresponde: Considere dos datos almacenados en las posiciones A, X de memoria. Sea P un lugar de la memoria que almacena la direccin X (que no se conoce directamente). Se desea sumar los datos y guardar el resultado en C. Cmo lo hara un computador CISC y uno RISC?
Solucin CISC: ADD C, A, P? Solucin RISC: load R1, A (copiar contenido de A al registro 1) load R2, P (copiar direccin P al registro 2) load R3, R2? (copiar contenido de X al registro 1) add R4,R1,R3 store R4, C (copiar resultado a memoria)
En definitiva, si consideramos el juego de instrucciones como la combinacin entre CO vlidos y los MD vlidos para cada CO, entonces si que hay una gran diferencia: Los computadores CISC se caracterizan por tener miles de combinaciones vlidas CO+MD, mientras que en los RISC, al haber un slo MD vlido para cada CO, entonces las combinaciones CO+MD coincide con el nmero de CO (aproximadamente entre 50 y 100, nomrmalmente)