martes, 30 de abril de 2013

UNIDAD DE PUNTO FLOTANTE


 
 
 
Una unidad de coma flotante (adaptación del inglés floating-point unit o literalmente traducido unidad de punto flotante) o, también conocido como coprocesador matemático, es un componente de la unidad central de procesamiento especializado en el cálculo de operaciones en coma flotante. Las operaciones básicas que toda FPU puede realizar son la suma y multiplicación usuales, si bien algunos sistemas más complejos son capaces también de realizar cálculos trigonométricos o exponenciales.
No todas las unidades centrales de procesamiento tienen una FPU dedicada. En ausencia de FPU, la CPU puede utilizar programas en micro código para emular una función en coma flotante a través de la unidad aritmético lógica (ALU), la cual reduce el coste del hardware a cambio de una sensible pérdida de velocidad.
En algunas arquitecturas, las operaciones en coma flotante se tratan de forma completamente distinta a las operaciones enteras, con registros dedicados y tiempo de ciclo diferentes. Incluso para operaciones complejas, como la división, podrían tener un circuito dedicado a dicha operación.
Hasta mediados de la década de 1990, era común que las CPU no incorporasen una FPU en los ordenadores domésticos, sino que eran un elemento opcional conocido como coprocesador. Ejemplos podrían ser las FPUs 387 y 487 que se utilizaban en las unidades centrales de procesamiento Intel 80386 e Intel 80486SX (el modelo 80486DX ya incluía el coprocesador de serie) en máquinas Intel Pentium, o la FPU 68881 utilizada en las unidades centrales de procesamiento 680x0 en ordenadores Macintosh.
Cabe destacar que en los países anglosajones, numéricamente se hace uso del punto como separador de unidades en vez de la reconocida internacionalmente en el Sistema Internacional de Unidades, la coma, por esa razón la traducción más correcta sería "unidad de coma flotante" porque sus operaciones desplazan la coma de los decimales.

ALU



Definimos genéricamente a la unidad ALU (por sus siglas en inglés Arithmetic Logic Unit) como una de las unidades que forman parte de la Unidad Central de Procesos (es decir, del Procesador, Microprocesador o CPU – Central Processor Unit, por sus siglas en inglés) mediante la cual es posible realizar una gran cantidad de operaciones aritméticas básicas (Suma, Resta, División y Multiplicación) además de realizar algunas operaciones Lógicas (Yes, Or, Not, And – Es decir, si; y, o, no) entre dos números o dos conjuntos de números.

 
En informática, la Unidad Aritmética Lógica forma parte del circuito digital del procesador indefectiblemente, teniendo además presencia en otros Circuitos Electrónicos que necesiten realizar estas operaciones, teniendo por ejemplo la utilización de un Reloj Digital, donde estos cálculos lógicos se basan en dos funcionalidades básicas:

 
ü  Sumar de a 1 al tiempo actual (para los Segundos, Minutos y las Horas).

ü  Comprobación de la activación o no activación del sonido de la alarma.

ü  Cambio de Hora y Minutos de acuerdo al sistema hexadecimal.

 
Pero esta unidad es generalmente utilizada en circuitos de alta complejidad, cubriendo no solo operaciones matemáticas simples, sino una gran cantidad de cálculos por segundos, siendo en el caso de los últimos aquellos que son conocidos como Microprocesadores, y que como hemos dicho, son el cerebro de un ordenador y te toda la información que se procesa a través de él.

Es en estos pequeños y complejos dispositivos que encontramos los siguientes componentes:

Dispositivos de Adición:

Se encargan de realizar las anteriormente mencionadas operaciones aritméticas.

Registros: Son los que contienen los Operandos que permiten realizar las operaciones, siendo aportados estos por la Unidad de Control.

Resultados Parciales: Fragmentos de cálculos que fueron realizados.

Resultados Finales: Resultados propiamente dichos de los cálculos efectuados.

Control de Cálculo: Dispositivo que se encarga de controlar, redirigir y corregir los errores que se puedan haber cometido en las operaciones realizadas.

Hemos mencionado en este listado a la Unidad de Control, y debemos definirla como un dispositivo que se encarga de enviar a la Arichmetic Logic Unit todas las órdenes y operaciones que debe realizar, además de transportar los Resultados Finales que ha obtenido hacia otros componentes.

De este modo, podemos definir el funcionamiento de la siguiente manera:

ü  Unidad de Control: Emite las acciones a efectuar.

ü  Unidad Aritmético Lógica: Procesa los datos recibidos y envía los registros.

ü  Unidad de Control: Analiza los resultados obtenidos y los envía a otros dispositivos.

 

ESTRUCTURA GENERAL DE UN MICROPROCESADOR


Se presenta a continuación un esquema en bloques de un sistema básico de un computador y sus funciones esenciales, ALU ( Arithmetic Logic Unit), unidad de control, unidad de I/O y memoria central.
Todos los demás componentes agregados al sistema se denominan periféricos , y vinculan al sistema con el mundo exterior, para intercambiar y visualizar datos.
 
 
 
 

 
 
 
 
 
 
Los datos introducidos en el computador se utilizan como base para operaciones de todo tipo, aritméticas, lógicas, Son funciones realizadas por la ALU que además contiene registros especiales y de uso general donde procesa la información antes y después de su uso.
Luego será almacenada en la memoria central , que es la zona de almacenamiento de gran capacidad, se guardan aquí tanto datos como programas ejecutables.
 

Todo el sistema es controlado por la unidad de control que genera las señales temporización y sincronización de todo el sistema. A partir de esta breve descripción se pueden apreciar en la arquitectura del sistema dos elementos diferentes en cuanto a sus características; los circuitos eléctricos / electrónicos que constituyen al procesador y lo que se ha dado en llamar el programa ( conjunto de operaciones denominadas instrucciones.
Los programas a utilizar suelen estar en la memoria central del sistema. Cada una de las celdas que componen la memoria central debe ser seleccionada por la unidad central para poder ordenar la información allí guardada y de esta manera poder transformar los datos en una secuencia determinada para obtener el resultado deseado de la operación de los mismos.

Esta selección se denomina direccionamiento y lo realiza la unidad de control por medio del registro de direccionamiento, y su función es almacenar la dirección a ejecutar del sistema.

 
 
 
 
 



La descripción anterior presenta un tratamiento secuencial de instrucciones que es sincronizado por un reloj ( CLOCK).
La comunicación entre la unidad central y el resto del sistema puede realizarse a través de una estructura como la de arriba representada, donde se muestran conjuntos de líneas denominadas bus. Generalmente pueden distinguirse tres indispensables en cualquier tipo de estructura de datos, ellos son datos (data), direcciones(address) y control(control).

lunes, 29 de abril de 2013

REPRESENTACIÓN DE NÚMEROS NEGATIVOS


SIGNO Y MAGNITUD

Normalmente utilizamos el símbolo “-” precediendo a un número para indicar que este es menor que cero. Esta es una notación muy práctica en la vida cotidiana pero no puede ser utilizada en la representación que se hace de los números en una computadora, recordemos que Es solo se pueden utilizar los dígitos binarios para representar cualquier cosa en ellas y el “-” no es ningún bit.

Pero podemos utilizar la misma idea, preceder el número de un bit que indique su signo, después de todo solo hay dos posibles signos, a saber: “+”y “-”. Todo lo que tenemos que hacer es asignar arbitrariamente un bit a cada signo. Convencionalmente se hace: “+” = 0, “-” = 1.

A este método de representación de números negativos se le denomina signo y magnitud porque, análogamente a lo que solemos hacer, se coloca un símbolo que precede al número y10 Representación de números negativos que indica su signo y luego se pone la magnitud del número.
En esta notación por ejemplo:
1 010102 = −1010

De esta manera es muy fácil distinguir los números positivos de los negativos, si utilizamos un número fijo de bits para representarlos y decidimos que siempre el primer bit es para el signo del número, entonces basta con observar el primer bit de la izquierda (al que en este caso no podemos decirle formalmente “el más significativo”, dado que no tiene asociada ninguna potencia de 2) para determinar si se trata de un número negativo o positivo.

En este caso la “multiplicación por -1” de un número equivale a negar o invertir el bit de la extrema izquierda, esto es, convertirlo en cero si vale 1 y viceversa. De hecho la idea fundamental detrás de la representación de signo y magnitud es que ocurra: −(−a) = a. Lo que nos parece evidente por estar acostumbrados a nuestra representación de números negativos convencional.
Un inconveniente del sistema de signo y magnitud es que existen dos representaciones distintas para el cero, es decir, el neutro aditivo no es ´único formalmente hablando, tanto el 10. . .0 como el 00. . .0 son cero, el primero con signo “-”y el segundo con signo “+”, lo que tampoco es correcto desde el punto de vista matemático, dado que el cero no es ni positivo ni negativo.

Esta dualidad del cero tiene implicaciones importantes en una computadora digital. Los procesadores tienen generalmente instrucciones para cambiar al flujo de los programas llamadas saltos, hay saltos incondicionales (siempre que el procesador ejecuta la instrucción de salto la siguiente instrucción es aquella indicada por el salto) y hay saltos condicionales (la instrucción siguiente es a veces la que está bajo la del salto y a veces la indicada por el salto dependiendo de alguna condición). Y generalmente la condición de salto es establecida comparando algún dato con cero. Si hay dos representaciones del cero hay que hacer dos comparaciones y eso lleva más tiempo que hacer solo una.

COMPLEMENTO A 1
Otra manera de representar números negativos es la conocida como complemento a 1. Para hablar de ella primero trataremos con una generalización.

Dentición:
El complemento a b − 1 de un número r, representado en k dígitos en base b se define como:

Cb−1(rb) = (b − 1k . . . b − 11) − rb2.2 Complemento a 1 11 donde b − 1 es el valor máximo de un digito en base b.
Por ejemplo el complemento a 9 del número 1357910 es: C9(1357910) = 99999 − 13579 = 8642010 nótese que el minuendo que se ha usado tiene tantos nueves como dígitos tiene el número 13579.

En el caso de nuestro sistema binario hablaremos del complemento a 1 del número n en k bits como el resultado de restar n al número constituido por k unos.

Por ejemplo:
C1(011012) = 11111 − 01101 = 100102

nótese que cada bit del resultado es el negado del número original. De hecho esta es la receta práctica para obtener el complemento a 1 de cualquier número binario rápidamente.

Receta: El complemento a uno de un número binario n2 se obtiene invirtiendo cada bit de n2.
Por ejemplo:
C1(100101101112) = 011010010002

Una alternativa de representación de números negativos en la computadora es utilizando el complemento a 1, es decir, el negativo de un número es su complemento a 1.
Por ejemplo: 1010 = 010102 −1010 = 101012
Al igual que en el caso de signo y magnitud se adopta la convención de que todos los números cuyo bit del extremo izquierdo sea cero son positivos y por ende, todos aquellos cuyo bit del extremo izquierdo es 1 son negativos.

Nuevamente, como en signo y magnitud, la idea es que −(−a) = a. También tenemos el problema de que hay dos distintas representaciones para el cero: 0. . .0 y 1. . .1. El primero es un cero con signo “+”y el segundo un cero con signo “-”.

También hay que notar que tenemos tantos números positivos como negativos, tanto en signo y magnitud como en complemento a 1. Supongamos que se utilizan k bits para representar nuestros números enteros en una computadora. ¿Cuantos números representables tenemos? bueno, si tengo k lugares en los que puedo poner 0 ´o 1 y cada vez que elijo el lugar i tengo esas dos posibilidades para el lugar i + 1 entonces tengo en total 2k combinaciones,12 representación de números negativos es decir, números representables, ahora bien, ¿cuántos de estos 2k números son negativos (o mejor dicho tienen signo “-”)? tanto en complemento a 1 como en signo y magnitud los que tienen signo “-” son aquellos que empiezan con 1 que son justamente la mitad de todos nuestros números, es decir 2k−1, lo mismo ocurre con los que tienen signo “+”, también son  2  k−1.

COMPLEMENTO A 2
Ya mencionamos el inconveniente que haya dos representaciones diferentes del cero en el contexto de nuestras computadoras digitales. Para evitar esto (que sin embargo se puede sobrellevar), se inventó otro mecanismo para representar números negativos, se denomina complemento a 2, eso nos lleva a considerar, en general, el complemento a la base.

Dentición 2 :
El complemento a b de un número r, representado en k dígitos en base b se define como:

Cb(rb) = (1 0k . . .01) – rb nótese que el número que se utiliza ahora como minuendo tiene un digito más que los usados en la representación, es decir tiene k + 1 dígitos, un 1 seguido de k ceros a la derecha.

Por ejemplo, el complemento a 10 de 1357910 es:
C10(1357910) = 100000 − 13579 = 8642110
el resultado es, evidentemente, el mismo que se obtuvo en el complemento a 9 incrementado en uno, es decir: Cb(xb) = Cb−1(xb) + 1.
En el caso particular de base 2, el complemento a 2 de un número x2 es el resultado de
sumar 1 al complemento a 1 de x2 que, como vimos, no es otro que el número negado bit a
bit.

Por ejemplo1: C2(011012) = 10010 + 00001 = 100112
También existe una receta rápida para obtener el complemento a 2 de un número binario. Receta: El complemento a 2 del número x2 se obtiene copiando, de derecha a izquierda, todos los bits de x2 hasta encontrar el primer 1 inclusive e invertir todos los bits restantes hacia la izquierda. 1En este ejemplo no ocurre, pero pudiera ser que al sumar dos dígitos binarios ambos fueran 1, el resultado en este caso seria 210 = 102, por lo que se colocaría, a la manera de una suma convencional en base 10, el digito menos significativo y el otro se lleva como acarreo.2.4 Exceso 13

Por ejemplo:
C2(00110011 1002) = 11001100 1002
Entonces es posible representar el negativo de un número binario como su complemento a 2. La idea detrás de esta representación es que: a + (−a) = 0. Un número más su negativo, que es de hecho su inverso aditivo, nos da cero, un ´único cero. A diferencia de signo y magnitud y de complemento a 1, en la representación en complemento a 2 de números negativos tenemos una sola representación de cero, a saber: 0. . .0. Esta vez el negativo, es decir el complemento a 2, de 0. . .0 es justamente 0. . .0.

Además conservamos la ventajosa propiedad exhibida por signo y magnitud y complemento a 1 de poder determinar facialmente si un número es negativo o positivo observando el bit del extremo izquierdo.
Sin embargo no todo es perfecto, tenemos una desventaja. Concluimos que hay una sola representación de cero en complemento a 2 en k bits, eso está bien, ahora ¿cuántos números negativos se pueden representar? todos los números de k bits que empiezan con 1, es decir 2k−1, ¿cuantos números positivos se pueden representar? pues también hay 2k−1 que empiezan con cero, pero uno de ellos es el cero (0. . .0), hay entonces exactamente 2 k−1 − 1 números positivos. ¡Aja! hay un número negativo, el más grande en magnitud, 10. . .0, que no tiene su inverso aditivo en el conjunto de 2k posibles números.
Por ejemplo,
en cuatro bits:
C2(01002) = 11002
dónde: 01002 = 410 y 11002 = −410, porque 0100 + 1100 = 00002.
En cambio: C2(10002) = 100002 lo que es un error.

Por ejemplo, en una computadora que utilice, como es común, 16 bits para representar ciertos enteros con signo2, el número más grande positivo representable es 32767 y el más grande negativo es -32768 que no posee su inverso aditivo en el conjunto {−32768, . . . ,32767}.

EXCESO
Otro mecanismo para representar números negativos es el conocido como exceso a x. Si el número de bits usados para representar enteros es k entonces generalmente x = 2k−1 o x = 2k−1 − 1. Por ejemplo, si se utilizan 8 bits para representar enteros entonces el 2Como el tipo short de Java14 representación de números negativos sistema utilizado podría ser exceso a 128 o bien exceso a 127. La idea del sistema es que, para representar el número n en k bits se le suma a n, el valor del exceso (esto es 2 k−1 o 2k−1 − 1), obteniéndose n + e entonces n se escribe como n + e en binario (ya sin consideraciones de signo por supuesto). Por ejemplo, para escribir en 8 bits el número −10010 en exceso a 28−1 = 27 = 128 hacemos: −100+ 128 = 2810, esto en binario se escribe: 000111002 (16+8+4), por lo que, en exceso a 128 en 8 bits −10010 = 000111002. En cambio, usando las mismas condiciones (8 bits, exceso a 128): 100 + 128 = 22810 = 111001002, es
decir: 10010 = 111001002. Nuevamente hay un solo cero (en exceso a 128 en 8 bits seria 100000002), lo que significa, dado que la cantidad de números representables en k bits es par, que hay un negativo o un positivo “de más”, en nuestro ejemplo es el −128 (porque su inverso aditivo seria 128 y 128 + 128 = 256, que no se puede escribir en 8 bits), el único cero es 100000002 y el rango de representatividad es: {−128, . . . ,127}, cabe señalar que los números en exceso a 2k−1 y en complemento a 2 se escriben igual salvo el bit más significativo.

Para saber entonces que número está siendo representado por una cadena de bits debemos saber el valor del exceso. Si nos topamos con un 011011012 y se nos dice que está representando a un número en exceso a 128 entonces sabemos que al valor del número sin consideraciones de signo (10910) se le debe restar un 128 para determinar su verdadero valor, es decir nuestra cadena 011011012 está representando al número 10910 − 12810 = −1910.

En exceso a 2k−1 − 1 se hace lo mismo, solo que el número a sumar es, por supuesto n = 2k−1 − 1. Si se utilizan 8 bits en la representación, el sistema seria exceso a 127, este caso particular nos resultará ´útil cuando consideremos la representación de números en punto flotante. En exceso a 127 en ocho bits un número n es representado como la cadena de bits que le correspondería al número n+127 en binario. Por ejemplo nuestro −1910 anterior se escribiría como −19 + 127 = 10810 = 011011002, el cero seria 011111112 el −12710 = 000000002 el 12710 = 111111102 y el 12810 = 111111112, este ´último es el que no posee su inverso (−128) en el rango de representatividad del sistema que resulta ser {−127, . . . ,128}. Nótese que el número negativo más grande es representado como una cadena de ceros.

REPRESENTACIÓN DE DATOS EN LA PC


El lenguaje máquina es el único que entiende directamente la computadora, utiliza el alfabeto binario que consta de los dos únicos símbolos 0 y 1, denominados bits (abreviatura inglesa de dígitos binarios).

La computadora sólo puede trabajar con bits, escribir instrucciones tales como:

10100010
11110011
00100010
00010010
Fue el primer lenguaje utilizado en la programación de computadoras, pero dejó de utilizarse por su dificultad y complicación, siendo sustituido por otros lenguajes más fáciles de aprender y utilizar, que además reducen la posibilidad de cometer errores.
EJEMPLO
0000
0001
1010
0001
01 A1
1000
1001
1001
1010
89 9A
0011
1010
1001
1100
3A 9C
0111
0100
0111
0000
74 70
1110
1001
0010
0000
E9 20



Una dificultad añadida a los lenguajes binarios es el hecho de que son dependientes de la máquina (o mejor dicho, del 
procesador), es decir, cada procesador utiliza un lenguaje máquina distinto (un juego de instrucciones distinto) que está definido en su propio hardware. En consecuencia, un programa escrito para un tipo de procesador no se podrá usar en otro equipo que utilice un procesador distinto, ya que, el programa no será portable o transportable. Para que dicho programa pueda funcionar en una segunda computadora, habrá que traducir todas las instrucciones escritas en el lenguaje máquina del primer equipo al lenguaje binario de la segunda computadora.

miércoles, 24 de abril de 2013

CONVERSIONES ENTRE BASES NUMÉRICAS


Conversión de Decimal a Binario

Para la conversión de decimal a binario se emplean dos métodos. El primero es divisiones sucesivas y el segundo es suma de potencias de 2:

POR DIVISIONES SUCESIVAS:

Se va dividiendo la cantidad decimal por 2, apuntando los residuos, hasta obtener un cociente cero. El último residuo obtenido es el bit más significativo (MSB) y el primero es el bit menos significativo (LSB).
Ejemplo:
Convertir el número 15310 a binario.


El resultado en binario de 15310 es 10011001

POR SUMAS DE POTENCIAS DE 2:

Este método consiste en determinar el conjunto de pesos binarios cuya suma equivalga al número decimal.
Ejemplo
Convertir el número 15310 a binario.
15310 = 27+ 24 + 23 + 20 = 128 + 16 +8 +1
15310= 100110012
Como se aprecia, si se cuenta con alguna familiaridad con las potencias de 2 este último método es más rápido.

Conversión de Fracciones Decimales a Binario


POR SUMA DE POTENCIA DE 2:

Emplea la misma metodología de la suma de potencias de 2 pero se trabaja con potencias negativas.
Ejemplo

Convertir el número 0,87510 a binario.
0,87510 = (2-1) + (2-2) + (2-3) = 0,5 + 0,25 + 0,125 = 0,111POR MULTIPLICACIONES SUCESIVAS:
La conversión de números decimales fraccionarios a binario se realiza con multiplicaciones sucesivas por 2. El número decimal se multiplica por 2, de éste se extrae su parte entera, el cual va a ser el MSB y su parte fraccional se emplea para la siguiente multiplicación y seguimos sucesivamente hasta que la parte fraccional se vuelva cero o maneje un error moderado. El último residuo o parte entera va a constituir el LSB.
ejemplo:
Convertir el número 0,87510 a binario.

HEXADECIMAL

Se trata de un sistema de base 16 cuyo números elementales se expresan, además de con los 10 primeros números decimales, con las primeras 10 letras de alfabeto (Mayúsculas).


            

DECIMAL


Es un sistema de numeración en el que las cantidades se representan utilizando como base el numero 10 por lo que se compone de las cifras: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Este conjunto de símbolos se denomina como números árabes.



            

SISTEMAS NUMÉRICOS

Se llama sistema numérico al conjunto ordenado de símbolos o dígitos y a las reglas con que se combinan para representar cantidades numéricas. Existen diferentes sistemas numéricos, cada uno de ellos se identifica por su base.


DIGITO

En un sistema numérico es un símbolo que no es combinación de otros y que representa un entero positivo.

BIT

Es un dígito binario (Abreviación del inglés binary digit), es decir, un 0 o un 1.

BASE DE UN SISTEMA NUMERICO

La base de un sistema numérico es el número de dígitos diferentes usados en ese sistema.

OCTAL


Permite la conversión de números vinarios largos a una forma más simple y conveniente para su lectura. Son muchas las ocasiones en el que el programador del computador debe hacer conversiones mentales de binario a octal mientras observa los registros de la maquina.



            

BINARIO


Esta  basado en la utilización exclusiva de dos números  0,1, para expresar cualquier magnitud