organización y estructura del computador 1 tema 2 – tema 2 – representación de la información

53
Organización y Organización y Estructura del Estructura del Computador 1 Computador 1 Tema 2 – Tema 2 – Representación de la información

Upload: nazario-pulido

Post on 12-Jan-2015

8 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Organización y Estructura Organización y Estructura del Computador 1del Computador 1

Tema 2 – Tema 2 – Representación de la información

Page 2: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Almacenamiento de la Almacenamiento de la InformaciónInformación

la representación de los datos en el computador usan un

número limitado de bits, ya que un bit por sí mismo, salvo

algunas señales de control, no ofrece mucha información, es

por esto que la Unidad de almacenamiento del computador,

“Memoria”, en lugar de acceder a bits individuales, usan como

unidad de transferencia bloques de ocho bits, denominados

bytes. Un programa a nivel de máquina visualiza la memoria

como un gran arreglo, donde cada byte de memoria está

identificado por un número único, conocido como su

dirección.

Page 3: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Números binarios

Nuestro sistema numérico natural es el decimal, como ya se

mencionó, pero ahora vamos a estudiar la aritmética del

computador, el cual siempre trabaja con dos tipos de números:

enteros y en coma flotante (lo que en decimal se llama

notación científica). Para comprender la aritmética del

computador, se deben comprender primero los sistemas

numéricos binario y hexadecimal.

Page 4: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Números binarios

En el sistema binario sólo hay dos dígitos: 0 y 1. Los números se representan en base a 2. Cada dígito tiene un valor que depende de su posición. Los valores de cada posición se incrementan en potencias de dos de derecha a izquierda.

Para convertir un número en binario a decimal debemos sumar los valores de cada posición que tenga dígito 1. Por ejemplo para convertir el número 1011 binario a decimal se realiza la siguiente operación:

(1011)2= (1x23) + (0x22) + (1x21) + (1x20) = (11)10

Page 5: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Números binariosPara convertir un número de decimal a binario se realizan divisiones sucesivas entre 2 hasta obtener un cociente 0 y se toma el resto invertido. Por ejemplo para convertir el número 25 a binario se hace lo siguiente:

Page 6: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Sistema numérico hexadecimal

En la notación hexadecimal hay 16 símbolos, es un sistema en

base 16. La ventaja que presenta es el hecho de que cada dígito

se representa en binario usando 4 dígitos binarios.

Usamos la notación de C para denotar un número en

hexadecimal: 0x.

Ejemplo: 0x23 es el número 23 en hexadecimal.

Page 7: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Sistema numérico hexadecimalBinario Decimal Hexadecimal

0000 0 0

0001 1 1

0010 2 2

0011 3 3

0100 4 4

0101 5 5

0110 6 6

0111 7 7

1000 8 8

1001 9 9

1010 10 A

1011 11 B

1100 12 C

1101 13 D

1110 14 E

1111 15 F

Page 8: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Sistema numérico hexadecimal

Para convertir un número decimal a hexadecimal, se divide repetidamente el número entre 16 tomando los restos de manera inversa. Por ejemplo para convertir el número decimal 423 en hexadecimal, el procedimiento es:

Page 9: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Sistema numérico hexadecimal

Para convertir un número hexadecimal en decimal, se multiplica cada uno de los dígitos hexadecimales por la potencia de 16 apropiada.

Por ejemplo, dado el número 0x7AF, se calcula su equivalente decimal como:

(7*162) + (10*161) + (15*160) = 1792+160+15=1967

Page 10: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Sistema numérico hexadecimal

Para convertir un número hexadecimal a binario se expande cada dígito a su representación en binario. Por ejemplo el número 0x173A4C se convierte a binario de la siguiente manera:

Entonces 0x173A4C es 000101110011101001001100 en binario.

Page 11: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Sistema numérico hexadecimal Para convertir un número binario a hexadecimal: Se divide en grupos de cuatro bits cada uno. Si el total de número de bits no es un múltiplo de cuatro, se debe hacer que el grupo extremo izquierdo sea el que quede con menos de cuatro bits, y rellenarlo adecuadamente con ceros del lado izquierdo. Se traduce cada grupo de cuatro bits al dígito hexadecimal correspondiente: Ejercicio: 1111001010110110110011

El número binario 1111001010110110110011 es 0x3CADB3 en hexadecimal.

Page 12: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Tamaños de los datosLos computadores y compiladores soportan múltiples formatos de datos usando maneras diversas para codificar dichos datos, tales como números enteros y números de punto flotante, así como longitudes diferentes. Por ejemplo, muchas máquinas tienen instrucciones para manipular solamente bytes, así como números enteros representados como cantidades de dos, cuatro y ocho bytes. También soportan números de punto flotante representados como cantidades de cuatro y ocho bytes.

El número de bytes asignados para cada tipo de variable varía con la máquina y el compilador.

Page 13: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Tamaños de los datosEstos son algunos de los formatos de datos del lenguaje C.

Los programadores deben esforzarse en hacer sus programas portables a través diferentes máquinas y compiladores. Un aspecto de portabilidad es hacer el programa insensible a los tamaños exactos de los diferentes tipos de datos.

Page 14: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Direccionamiento y ordenamiento de los bytes

Para objetos de programa que abarcan múltiples bytes, debemos establecer dos convenciones: cuál será la dirección del objeto, y cómo se van a ordenar los bytes en la memoria. En prácticamente todas las máquinas, un objeto multibyte es almacenado como una secuencia contigua de bytes, con la dirección del objeto dado por la dirección más baja de los bytes usados.

Por ejemplo, dada una variable x de tipo int que posee la dirección 0x100, los cuatro bytes de x serían almacenados en las posiciones de memoria 0x100, 0x101, 0x102 y 0x103.

Page 15: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Direccionamiento y ordenamiento de los bytes

Para ordenar los bytes que representan un objeto, hay dos convenciones comunes. Algunas máquinas almacenan el objeto en la memoria ordenado desde el byte menos significativo al más significativo, mientras otras máquinas lo almacenan del byte más significativo al menos significativo. La convención donde el byte menos significativo viene primero se conoce como little endian. Esta convención es seguida por la mayor parte de las máquinas de la antigua Digital Equipment Corporation (ahora parte de la Compaq Corporation), así como por Intel

Page 16: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Direccionamiento y ordenamiento de los bytes

La convención donde el byte más significativo viene primero se conoce como big endian. Esta convención es seguida por la mayor parte de las máquinas de la IBM, Motorola, y Sun Microsystems. Las convenciones no se establecen con precisión a lo largo de las fronteras corporativas. Por ejemplo, los computadores personales fabricados por IBM usan procesadores compatibles Intel y de ahí que sean little endian. Muchos chips de microprocesador, incluyendo el Alpha y el PowerPC de Motorola, pueden ejecutarse en ambos modos, determinándose la convención de ordenamiento de byte cuando es encendido el chip.

Page 17: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Direccionamiento y ordenamiento de los bytes

Ejemplo de ordenamiento de los bytes para la variable x de tipo int con valor hexadecimal de 0x01234567, ubicada en la dirección 0x100:

Page 18: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Direccionamiento y ordenamiento de los bytes

Para la mayoría de los programadores de aplicaciones, los ordenamientos de bytes usados en sus máquinas son totalmente invisibles. Los programas compilados para cualquier clase de máquina dan resultados idénticos. Sin embargo, algunas veces el ordenamiento de byte se convierte en un problema.

• Cuando los datos binarios se comunican sobre una red entre máquinas diferentes. Los datos producidos por una máquina little endian que serán enviados a una máquina big endian, o viceversa, conduciendo a los bytes dentro de palabras que están en orden inverso al del programa de recepción.

Page 19: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Direccionamiento y ordenamiento de los bytes

Para evitar tales problemas, el código escrito para aplicaciones de red debe seguir convenciones establecidas para el ordenamiento de byte para asegurarse que la máquina que envía convierta su representación interna al estándar de la red, mientras que la máquina que recibe convierte el estándar de red a su representación interna.

Page 20: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Representación de cadenas de caracteres

Una cadena en C es codificada como un arreglo de caracteres terminado en el caracter nulo (null caracter, es decir, el que posee el valor cero). Cada caracter es representado por alguna codificación estándar, siendo la más común el código de caracteres ASCII. La representación de una cadena de carateres sobre cualquier sistema que use el código de caracteres ASCII, será igual independientemente de las convenciones de ordenamiento de los bytes y del tamaño de la palabra. Como consecuencia de esto, los datos texto son más independientes de la plataforma que los datos binarios.

Page 21: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Representación de código Considere la siguiente función en C:

1 int sum(int x, int y) 2 { 3 Return x + y; 4 }

Cuando este código es compilado sobre varias máquinas, se generan los siguientes códigos de máquina:

GNU/Linux: 55 89 e5 8b 45 0c 03 45 08 89 ec 5d c3 NT: 55 89 e5 8b 45 0c 03 45 08 89 ec 5d c3 Sun: 81 C3 E0 08 90 02 00 09 Alpha: 00 00 30 42 01 80 FA 6B

Page 22: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Operaciones lógicasTomaremos como referencia las operaciones logicas en lenguaje C.

Cuando se utilizan estas operaciones un argumento con valor 0 representa el valor lógico FALSO y cualquier argumento mayor que 0 representa el valor lógico VERDADERO. Retornan 1 o 0 indicando un resultado de VERDADERO o FALSO, respectivamente.

Page 23: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Operaciones lógicasEjemplo:

Page 24: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Operaciones lógicasOperaciones lógicas a nivel de bit en C

| OR

& AND

˜ NOT

^ OR exclusivo

Para determinar el resultado se debe realizar la operación al número en binario ya que estas operaciones afectan cada bit del argumento.

Page 25: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Operaciones lógicas

Expresión en C

valor en binario

resultado en binario

resultado en Hexadecimal

˜ 0x41 ˜ 01000001 10111110 0xBE

˜ 0x00 ˜ 00000000 11111111 0xFF

0x69 & 0x55

01101001 & 01010101

01000001 0x41

0x69 | 0x55

01101001 | 01010101

01111101 0x7D

Page 26: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Representación de enteros

Usualmente se representan números enteros sin signo o con signo. Cuando se usa la representación sin signo sólo se pueden representar números positivos, en cambio con la representación con signo se pueden representar números positivos y negativos. En las máquinas actuales la representación de enteros con signo se hace por el método de complemento a 2.

Page 27: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Representación de enteros

Ejemplo de representación sin signo para enteros representados en 4 bits:

Page 28: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Representación de enteros Para representar números con signo se utiliza el 0 para

representar el positivo y el 1 para representar el negativo, en la

posición más significativa del número en binario (la que se

encuentra más a la izquierda del número).

Para representar un número positivo se coloca un cero en la

posición más significativa (signo positivo) y luego se escribe

el número en binario.

Para representar un número negativo se representa en

complemento a 2 del positivo correspondiente.

Page 29: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Representación de enteros Para calcular el

complemento a 2 de un

número, se invierten los "0"s

por "1"s y los "1"s por "0"s y

luego se le suma 1 al

número.

Ejemplo de representación

sin signo para enteros

representados en 4 bits:

Page 30: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Representación de enteros

Cuando tenemos un número en binario en complemento a 2 y

necesitamos saber su valor en decimal basta con aplicarle

complemento a 2 de nuevo para obtener el correspondiente

valor.

Por ejemplo para saber qué número representa 1110 (en

complemento a 2), invertimos los bits: 0001 y sumamos 1:

0001 + 1 = 0010 lo cual es 2, por lo tanto la combinación 1110

representa -2.

Page 31: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Puntos a estudiar en esta próxima clase

Conversión entre números con signo y números sin signo Expansión de un número Truncado de un número Suma Binaria Operaciones con números en complemento a 2 Representación de números fraccionarios

Page 32: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Conversión entre números con signo y números sin signo

El lenguaje de programación C provee la capacidad de trabajar con variables con signo y sin signo. Los números se asumen con signo por defecto, para declarar tipos de datos sin signo se debe declarar explícitamente. Cuando se usan ambos tipos de variables en una misma expresión, C implícitamente convierte la variable con signo a una variable sin signo.

Page 33: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Conversión entre números con signo y números sin signo

Ejemplo de valores con signo y sin signo para representaciones de 4 bits:

Page 34: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Expansión de un número

• Para convertir un número sin signo a un tipo de datos de mayor tamaño simplemente se añaden ceros en las posiciones más significativas.

• Para expandir un número con signo se extiende el bit de signo, copiando ese bit (el más significativo) a las nuevas posiciones libres del nuevo tipo de datos extendido. Es decir, en el caso de un número positivo se llena con ceros a la izquierda y en caso de un número negativo se llena con unos.

Page 35: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Expansión de un número

Ejemplo de expansión de números en complemento a 2 de 8 bits a 16 bits:

Page 36: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Truncado de un número

Cuando se trunca un número se desechan bits más significativos lo cual puede variar su valor.

Ejemplo de truncado de números en complemento a 2 de 8 bits a 4 bits:

Page 37: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Suma BinariaSe efectúa exactamente en la misma forma que la suma de números decimales, siguiendo los mismos pasos generales. En la suma binaria solamente pueden ocurrir cuatro casos, los cuales se muestran en la siguiente tabla:

Page 38: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Suma de enteros sin signo

Cuando se realiza la suma de enteros sin signo se hace

exactamente igual a la suma binaria. Hay que tomar en cuenta

que la suma de dos números de igual número de dígitos puede

incurrir en acarreo y por lo tanto el resultado puede tener un

dígito adicional. En algunos casos esto provoca

desbordamiento.

Page 39: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Suma de números en complemento a 2

Cuando se realiza la suma entre dos números representados en complemento a 2 se siguen usando las reglas de la suma binaria pero si hay acarreo este se descarta. El desbordamiento ocurre cuando al sumar dos números del mismo signo el resultado es del signo opuesto. Ejemplos de sumas con números en complemento a 2 para representación de 4 bits:

Page 40: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Resta de números en complemento a 2

Para realizar la resta se obtiene el complemento a 2 del substraendo y se le suma al minuendo. Por ejemplo para realizar la resta de 7 – 3 se suma 7 + (-3), es decir, se calcula el complemento a 2 de 3 y se la suma al 7.

Ejemplos para números de 4 bits:

Page 41: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Multiplicación y división de números en complemento a 2

La multiplicación y la división son operaciones complejas,

existen varios algoritmos para ejecutarlas pero en todos los

casos estas instrucciones tardan mucho tiempo ejecutándose.

Una operación de multiplicación puede tardar 12 ciclos de

reloj mientras una suma tarda típicamente 1 sólo ciclo. Una

manera de optimizar el código es reemplazar operaciones de

multiplicación y división por desplazamientos para reducir así

el tiempo de ejecución.

Page 42: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Multiplicación y división de números en complemento a 2 La multiplicación por potencias de 2 se lleva a cabo desplazando el número hacia la izquierda.

La operación de desplazamiento en C se escribe x << n donde x es la variable numérica y n es el número de posiciones.

Por ejemplo para números de 4 bits sin signo:

Page 43: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Multiplicación y división de números en complemento a 2

La división entre potencias de dos se realiza de forma similar, pero hay que tomar en cuenta el signo cuando se desplaza hacia la derecha, si la representación es en complemento a dos y el número es negativo hay que llenar los espacios a la izquierda con 1.

Algunos lenguajes de programación proveen dos tipos de desplazamiento a la derecha, lógico el cual siempre llena con ceros, y aritmético que llena con el bit de signo.

Page 44: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Multiplicación y división de números en complemento a 2

Ejemplo de divisiones entre potencias de 2 para números de 4 bits con signo (desplazamiento aritmético):

Page 45: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Representación de números fraccionarios

Se puede representar un número fraccionario en binario tomando en cuenta que cada posición a la derecha de la coma es una potencia de 2-n

Así el número en binario 0,11 tiene como valores 1x2-1 + 1x2-2 =0,5 + 0,25 = 0,75

Page 46: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Representación de números fraccionarios

Los números cuyo valor no se describe con la fórmula k x 2n no se pueden representar exactamente sino a través de aproximaciones. Por ejemplo para representar 1/5 =0,2 la aproximación dependerá del número de bits disponibles. Con 4 bits disponibles para representar la parte fraccionaria se puede representar como 0,0011=0,1875.

Una representación de punto fijo donde se destinen algunos bits para la parte entera y otros para la parte decimal no permite representar muchos números, por esta razón las máquinas actuales utilizan la representación en coma flotante, la cual es similar a la notación científica en decimal.

Page 47: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Representación de números fraccionarios

La representación en coma flotante más utilizada es la definida en el estándar IEEE 754. Este estándar se desarrolló para facilitar la portabilidad de los programas de un procesador a otro. El estándar define un formato simple de 32 bits y uno doble de 64 bits. La base implícita es 2.

Page 48: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Representación de números fraccionarios

• El bit de signo es de la mantisa la cual corresponde a la parte fraccionada. • Para valores de exponente desde 1 hasta 254 en el formato simple se representan números en coma flotante normalizados distintos de cero. • El exponente está sesgado, siendo el rango de exponentes de -126 a 127. • Un número normalizado debe contener un bit 1 a la izquierda de la coma binaria; este bit está implícito, dando una mantisa efectiva de 24 bits. • Un exponente cero junto con una fracción cero representa el cero positivo o negativo, dependiendo del bit de signo. • Un exponente todo unos junto con una parte fraccionaria cero representa, dependiendo del bit de signo, el infinito positivo o negativo.

Page 49: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Representación de números fraccionarios

• El número es positivo o negativo dependiendo del bit de signo.

• Los números denormalizados se incluyen en el estándar para reducir las situaciones de desbordamiento hacia cero de exponentes. Cuando el exponente del resultado es demasiado pequeño el resultado se denormaliza desplazando a la derecha la parte fraccionaria e incrementando el exponente hasta que esté dentro de un rango representable.

• A un exponente de todos unos junto con una fracción distinta de cero se le da el nombre de NaN (not a number, no representa un número) y se emplea para señalar varias condiciones de excepción.

Page 50: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Representación de números fraccionarios

• Casos más frecuentes para formato simple:

Page 51: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Representación de números fraccionarios

Ejemplo de representación de un número binario en formato

simple IEEE 754:

• Para números normalizados la forma es: ± 1, bbb x 2e

• El primer 1 está implícito, sólo se guardan los bits a la

derecha de la coma.

• El exponente se calcula sumando 127 al valor del

exponente, ya que el sesgo es 127.

Page 52: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Representación de números fraccionarios

Para representar el número en binario 0,001101

• Primero hay que llevarlo al formato normalizado el cual es: 1,101 x 2-3

• Los valores de los campos son:

Bit de signo = 0 ya que el número es positivo

Exponente= -3+127=124 = 01111100 en binario de 8 bits

• Mantisa =101 como el campo es de 23 bits se guarda como 10100000000000000000000

La representación en el formato es:

s exponente mantisa

0 01111100 10100000000000000000000

Page 53: Organización y Estructura del Computador 1 Tema 2 – Tema 2 – Representación de la información

Representación de números fraccionarios

Ejemplo de cálculo del valor decimal del número 0xC1B28000 representado en el formato IEEE 754, precisión simple:

Se lleva el número a binario:

11000001101100101000000000000000

se expresa en el formato:

1 10000011 01100101000000000000000

Signo: 1 lo cual indica que el número es negativo

Exponente: 1000011=131 el exponente es 131-127=4

Mantisa: 1,01100101x24 = 10110,0101

Valor en decimal: 16+4+2+0,25+0,0625=22,3125

Valor en decimal del número: -22,3125