SISTEMAS SECUENCIALES

Anuncio
1.- SISTEMAS DIGITALES
Y REPRESENTACIÓN DE LA INFORMACIÓN
1.1
Introducción
El término digital se deriva de la forma en que los ordenadores realizan las operaciones:
contando dígitos. Durante muchos años, las aplicaciones de la electrónica digital se limitaba a
los sistemas informáticos. Hoy en día, la tecnología digital tiene aplicación en prácticamente
todas las áreas.
1.1.1 Magnitudes analógicas y digitales
Una magnitud analógica es aquella que toma valores continuos. Por ejemplo, la temperatura
varía dentro de un rango continuo de valores. A lo largo del día, la temperatura no varía de
20ºC a 25ºC de forma instantánea sino que alcanza todos los infinitos valores que hay en ese
intervalo. Uno de los problemas que tenemos es que cualquier “ruido” (interferencia), hace
que los datos sean poco fiables. Otros inconvenientes:
- Almacenar
- Procesar
- Transmisión
Una magnitud digital es aquella que toma un conjunto de valores discretos (finitos). Por
ejemplo, podríamos ir tomando la temperatura cada 5 minutos.
1.1.2 Dígitos binarios, niveles lógicos y formas de onda digital
La electrónica digital utiliza sistemas y circuitos en los que sólo existen dos estados
posibles: Alto (HIGH) y Bajo (LOW).
Estos estados se pueden representar de diferentes formas:
- niveles de tensión (el más habitual)
- niveles de corriente
- interruptores abiertos o cerrados
- lámparas encendidas o apagadas
- …
Dígitos binarios
El sistema de numeración de dos estados se denomina binario, y los dos dígitos que emplea
son el 0 y el 1.
Un dígito binario se denomina bit.
Si asociamos el estado Alto=1 y Bajo=0 estamos trabajando con lógica positiva que es la que
utilizaremos a lo largo del curso.
1
Los grupos de bits, llamados códigos, se utilizan para representar:
- números
- símbolos
- caracteres alfabéticos
- instrucciones
- cualquier otro tipo de información
Niveles lógicos
Las tensiones que se utilizan para representar los 1´s y los 0´s reciben el nombre de niveles
lógicos.
Como hemos dicho antes, a lo largo de este curso vamos a trabajar con lógica positiva, es
decir, asociamos el estado Alto con el 1 y el Bajo con el 0. Decíamos también que los estados
se pueden representar de diferentes formas, pero el más habitual y el que usaremos en este
curso es el de asociarlo a niveles de tensión.
Supongamos entonces que el 1 lógico equivale a 5V (depende también de la familia que
estemos usando), y el 0 lógico equivale a 0V. Esto sería el caso ideal, ya que en la práctica, el
tipo de circuito, las interferencias, … hacen que el 1 lógico se asigne a un intervalo de tensión
que puede ir desde 2V a 5V, y el 0 lógico se asigne a un intervalo de tensión que puede ir
desde 0V a 0,8V. En este curso vamos a considerar sólo el caso ideal: 1 = 5V y 0 = 0V.
Formas de onda digital
Las señales digitales consisten en niveles de tensión que varían entre los estados alto y bajo.
Se denomina impulso positivo cuando la tensión pasa de su estado a nivel bajo hasta el nivel
alto, y luego retorna al nivel bajo.
1
0
Se denomina impulso negativo cuando la tensión pasa de su estado a nivel alto hasta el nivel
bajo, y luego retorna al nivel alto.
1
0
La mayoría de las señales que podemos encontrar en los sistemas digitales se componen de
series de impulsos (algunas veces llamados también trenes de impulsos) y pueden clasificarse
en periódicas y no periódicas.
Un tren de impulsos periódico es aquel que se repite a intervalos de tiempo fijos, este
intervalo de tiempo fijo se denomina periodo (T). La frecuencia (f) es la velocidad a la que se
repite (f = 1/T) y se mide en hertzios (Hz).
T1
T2
T3
Periodo = T1 = T2 = T3 = …
2
Un tren de impulsos no periódico es aquel que no se repite a intervalos de tiempo fijos, y
puede estar compuesto por impulsos de distintos anchos y/o impulsos que tienen intervalos
diferentes de tiempo entre ellos.
No periódico
La información binaria que manejan los sistemas digitales se transmite a través de trenes de
impulsos que representan secuencias de bits.
En muchos sistemas digitales, todas las señales se sincronizan con una señal de tiempo
denominada reloj. El reloj es una señal periódica en la que su periodo equivale a la duración
del bit.
Cronograma o diagrama de tiempos es una gráfica de ondas digitales que muestra como van
variando las ondas a través del tiempo.
reloj
A
1
0
1
0
B
1
1
0
0
0
1
1
1
En el primer intervalo de tiempo,
tanto A como B valen 1. En el
siguiente, B mantiene su valor
pero A pasa a valer 0. En el
siguiente, A vuelve a valer 1 y B
pasa a valer 0, …
Cronograma
1.1.3 Operaciones lógicas básicas
En su forma más simple, la lógica es la parte del razonamiento humano que nos dice que una
determinada proposición es cierta si se cumplen ciertas condiciones. Las proposiciones
pueden ser clasificadas como ciertas o como falsas, por lo que pueden aplicarse a los
circuitos digitales, ya que estos se caracterizan por sus dos estados.
El término lógico se aplica a los circuitos digitales que se utilizan para implementar funciones
lógicas.
Podemos considerar 4 operaciones lógicas básicas: NOT, AND, OR y la OR EXCLUSIVA. Los
circuitos que realizan estas operaciones se denominan puertas lógicas.
Las líneas conectadas a la izquierda de la puerta son las entradas, y la que está a la derecha
es la salida. Tanto las entradas como la salida sólo pueden tener dos valores: HIGH (1,
verdadero, …) o LOW (0, falso, …)
NOT (inversor)
1 entrada y 1 salida
Entrada
Salida
0
1
1
0
3
AND (Y)
n entradas y 1 salida
Entrada
0
0
1
1
OR (O)
n entradas y 1 salida
0
1
0
1
Entrada
0
0
1
1
OR EXCLUSIVA
n entradas y 1 salida
0
1
0
1
Salida
La salida sólo es 1 cuando todas las entradas lo son
0
0
0
1
Salida
La salida es 1 cuando alguna de las entradas lo es
0
1
1
1
La salida es 1 cuando hay un número impar de 1´s en la entrada
Entrada
0
0
1
1
0
1
0
1
Salida
0
1
1
0
1.1.4 Funciones lógicas básicas
Las puertas básicas pueden combinarse para formar circuitos lógicos más complejos que se
empleen en la elaboración de sistemas digitales completos, como por ejemplo podríamos
destacar entre otros:
- Comparadores
- Codificadores/ Decodificadores
- Multiplexores/ Demultiplexores
- Conversión de código
- Funciones de almacenamiento
o Biestables
o Registros
o Memorias
- Contadores
- Funciones aritméticas
o Sumador
o Restador
o Multiplicador
o Divisor
4
1.2
Sistemas de numeración
Todos estamos familiarizados con el sistema de numeración decimal porque usamos los
números decimales cada día.
El sistema binario es simplemente otra forma de representar magnitudes. Este sistema es
menos complicado que el sistema decimal ya que sólo tiene dos dígitos.
El sistema decimal con sus diez dígitos es un sistema en base 10, el sistema binario con sus
dos dígitos es un sistema en base 2. Los dos dígitos binarios (bits) son 1 y 0.
Además de estos dos sistemas de numeración también estudiaremos otros dos que nos van a
ser muy útiles, el sistema de numeración octal (base 8) y el hexadecimal (base 16).
1.2.1 Tipos de datos y representación
Como es fácil construir circuitos digitales que reconozcan y manipulen sólo 0´s y 1´s ,
nuestro objetivo en el diseño de sistemas es realizar todas las operaciones usando
únicamente estos dos dígitos. En consecuencia, todos los números y datos de un computador
tienen que representarse en esta forma binaria.
Los datos que podemos encontrar en un sistema digital se pueden clasificar en 3 categorías
generales que incluyen:
1. Números que se usan en operaciones aritméticas.
2. Letras del alfabeto que se usan en procesamiento de datos.
3. Una serie de símbolos discretos para diversos usos.
Estos tres tipos de datos se representan en computadores en código binario.
1.2.2 Sistemas de numeración. Conversión entre bases.
Los sistemas de numeración que estudiaremos en esta sección tienen una estructura de
pesos, es decir que un mismo dígito tiene diferentes valores dependiendo la posición que
ocupe.
Sistema decimal
Aunque ya estamos muy familiarizados con este sistema de numeración, nos interesa
comprender su estructura de pesos, lo que nos ayudará a entender a los otros sistemas de
numeración.
Este sistema utiliza diez dígitos (base 10) desde el 0 hasta el 9.
Puede expresar cantidades hasta 9 antes de quedarse sin dígitos. Si se desea expresar una
cantidad mayor, se usan dos o más dígitos, y la posición de cada uno de ellos dentro del
número le dice la magnitud que representa.
105 = 1x102 + 0x101 + 5x100 = 100 + 0 + 5
Peso = 10i, donde i es la posición que ocupa el dígito.
5
Los pesos para los números enteros son potencias positivas de diez que aumentan de derecha
a izquierda, comenzando por 100 = 1.
Para números fraccionarios, los pesos son potencias negativas de diez que aumentan de
izquierda a derecha, comenzando por 10-1 = 0,1.
… 102 101 100, 10-1 10-2 10-3 …
coma fraccionaria
El valor de un número decimal es la suma de los dígitos después de haber multiplicado cada
dígito por su peso (como vimos en el ejemplo del 105).
Sistema binario
También es un sistema con pesos, donde lo único que varía respecto al decimal es su base.
Para contar en binario se hace igual que en decimal con la única diferencia que ahora sólo
contamos con dos dígitos (bits), el 0 y el 1. Si se quiere expresar una cantidad mayor hemos
de ir añadiendo dígitos.
Decimal
Binario
Para aprender a contar en binario hay que observar
0
0
como contamos en el sistema decimal.
Empezamos en 0 y contamos hasta 9
1
1
antes de quedarnos sin dígitos.
2
10
Luego comenzamos con otra posición
3
11
de dígitos (a la izquierda) y
4
100
contamos desde 10 hasta 99.
5
101
Es necesaria otra posición para
contar desde 100 hasta 999. Y así
6
110
sucesivamente.
7
111
En binario es similar:
8
1000
Con un solo bit contamos de 0 a 1.
9
1001
Necesitamos otro bit a la izquierda
10
1010
para contar de 2 a 3.
Con el tercer bit podemos contar de
11
1011
4 a 7.
12
1100
Con el cuarto, de 8 a 15. Y así
13
1101
sucesivamente.
14
1110
15
1111
…
…
El bit más a la derecha es el bit menos significativo: LSB (Least Significant Bit) y tiene un
peso de 20 = 1.
Los pesos de los respectivos bits crecen de derecha a izquierda según las potencias de 2.
… 23 22 21 20
El bit más a la izquierda es el bit más significativo: MSB (Most Significant Bit) y su peso
depende del tamaño del número binario.
6
Los números con parte fraccionaria también se pueden representar en binario con pesos que
van desde 2-1 hasta 2-n, donde n es el número de bits a partir de la coma fraccionaria.
… 22 21 20, 2-1 2-2 2-3 … = … 4 2 1, 0,5 0,25 0,125 0,0625 …
coma fraccionaria
2-1 = 0,5
2-2 = 0,25
2-3 = 0,125
2-4 = 0,0625
2-5 = 0,03125
2-6 = 0,015625
…
Conversión binario a decimal:
Recordar:
n-1
∑ ai 2i
i= -m
1010011100(2 = 29 + 27 + 24 + 23 + 22 = 512 + 128 + 16 + 8 + 4 = 660(10
1001.101(2 = 23 + 20, 2-1 + 2-3 = 8 + 1, 0,5 + 0,125 = 9,625(10
Conversión decimal a binario:
Existen principalmente dos métodos:
- Suma de pesos
- Divisiones sucesivas
Suma de pesos:
- Al número se le resta la mayor potencia de 2 que no lo sobrepase.
- Sucesivamente, se irá restando a lo que nos quede las potencias de 2 hasta llegar a
0.
- Se asignará un 1 al peso de las potencias de 2 que hemos utilizado.
9,625(10 = 1001,101(2
Parte entera
9
-8 -> 23
1
-1 -> 20
0
Parte fraccionaria
0,625
-0,5 -> 2-1
0,125
-0,125 -> 2-3
0
En este caso, la parte fraccionaria ha sido
exacta pero en la mayoría de los casos esto
no ocurre, por lo que tendremos que poner
un límite al número de bits que queramos
aproximar al igual que ocurre en el sistema
decimal.
7
Divisiones sucesivas:
Parte entera:
- El número se divide por dos.
- Sucesivamente se irán dividiendo los cocientes por dos hasta que el resto sea 0 o 1.
- El último cociente será el MSB. El resto de bits lo formarán todos los restos que
hemos ido obteniendo, siendo el LSB el primer resto obtenido.
9 2
LSB 1 4 2
0 2 2
0 1 MSB
Parte fraccionaria:
- El número se multiplica por dos. La parte que queda como entera se extrae como
bit. Éste será el MSB.
- Sucesivamente se irá multiplicando la parte fraccionaria por dos hasta que ésta
sea 0 o se llegue al límite de bits.
0,625 x 2 = 1,25 -> 1 (MSB)
0,25 x 2 = 0,5
-> 0
0,5 x 2 = 1,0
-> 1 (LSB)
Otro ejemplo: 25,7187(10. Limitar la parte fraccionaria a 6 bits
25,7187(10 = 11001,101101(2
Parte entera
Parte fraccionaria
25
0,7187
4
-0,5
-> 2-1
-16 -> 2
9
0,2187
3
-8 -> 2
-0,125 -> 2-3
1
0,0937
0
-0,0625 -> 2-4
-1 -> 2
0
0,0312
-0,015625 -> 2-6
0,015575
25 2
LSB 1 12 2
0 6 2
0 3 2
1 1 MSB
0,7187 x 2 = 1,4374 -> 1 (MSB)
0,4374 x 2 = 0,8748 -> 0
0,8748 x 2 = 1,7496 -> 1
0,7496 x 2 = 1,4992 -> 1
0,4992 x 2 = 0,9984 -> 0
0,9984 x 2 = 1,9968 -> 1
8
Sistemas octal y hexadecimal
Los números binarios largos son difíciles de leer y escribir ya que es fácil omitir o
transponer un bit.
Puesto que los computadores sólo entienden los 1´s y los 0´s, es necesario emplear estos
dígitos cuando se programa en lenguaje máquina.
Si, por ejemplo, tenemos que escribir una instrucción de 60 bits existe una probabilidad alta
de equivocarnos, así que trabajaremos con otro sistema más sencillo.
Una posibilidad sería trabajar en decimal y luego pasarlo a binario, pero hemos visto que la
conversión no es directa, así que buscaremos algún sistema donde la conversión sea directa.
Solución: Utilizar los sistemas octal y hexadecimal, que al ser potencias de 2, la conversión
es muy sencilla.
- El sistema octal necesita 8 dígitos (base 8): 0, 1, 2, 3, 4, 5, 6 y 7.
- El sistema hexadecimal necesita 16 dígitos (base 16): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A,
B, C, D, E y F.
Conversión binario a octal:
Se agrupan los bits de 3 en 3, ya que 8 = 23
668(10 = 1010011100(2 = 1234(8
1 2 3 4
Conversión binario a hexadecimal: Se agrupan los bits de 4 en 4, ya que 16 = 24
668(10 = 1010011100(2 = 29C(16
2 9
C
La equivalencia sería:
DECIMAL
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
BINARIO
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
10000
OCTAL
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
20
HEXADECIMAL
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
Conversión octal, hexadecimal a binario:
Se realiza el proceso inverso, es decir,
vamos sustituyendo cada dígito por sus
correspondientes bits (3 en octal y 4 en
hexadecimal).
9
Conversión octal, hexadecimal a decimal:
Es equivalente a como lo hacíamos en binario. Lo único que cambia es la base.
Tener en cuenta también en hexadecimal que A equivale a 10, …, y F a 15.
n-1
∑ ai 2i
i= -m
1234(8 = 1x83 + 2x82 + 3x81 + 4x80 = 1x512 + 2x64 + 3x8 + 4x1 = 668(10
29C(16 = 2x162 + 9x161 + Cx160 = 2x256 + 9x16 + 12x1 = 668(10
Conversión decimal a octal y hexadecimal:
La suma de pesos sólo sirve en binario porque cada peso se multiplica por 1. Por lo tanto
utilizaremos:
- Divisiones sucesivas.
- Conversión a binario y de aquí a octal o hexadecimal.
72541(10 = 11B5D(16
72541 16
13 4533 16
5 283 16
11 17 16
1
1
1.3
Aritmética Binaria
La aritmética binaria es un procedimiento sencillo ya que utiliza técnicas que se aplican a los
números decimales. Para entender los sistemas digitales se deben conocer los principios
básicos de la suma, resta, multiplicación y división binarias.
Suma binaria
Las cuatro reglas básicas para sumar dígitos binarios son:
0 + 0 = 0 Suma 0 y acarreo (“me llevo”) 0
0 + 1 = 1 Suma 1 y acarreo (“me llevo”) 0
1 + 0 = 1 Suma 1 y acarreo (“me llevo”) 0
1 + 1 = 10 Suma 0 y acarreo (“me llevo”) 1
Observar que las tres primeras dan como resultado un único bit.
En la última, la suma de 1 + 1 = 2 (en binario 10) produce que el resultado no se pueda
representar con un único bit. Como ocurre en el sistema decimal cuando el resultado de la
10
suma es mayor que 9, por ejemplo 7 + 5 = 12, lo que hacemos es poner 2 y “nos llevamos”
(acarreo) 1 para la siguiente suma parcial.
Cuando existe acarreo, se produce una situación en la que hay que sumar tres bits:
1 + 0 + 0 = 1 Suma 1 y acarreo (“me llevo”) 0
1 + 0 + 1 = 10 Suma 0 y acarreo (“me llevo”) 1
1 + 1 + 0 = 10 Suma 0 y acarreo (“me llevo”) 1
1 + 1 + 1 = 11 Suma 1 y acarreo (“me llevo”) 1
1 0 1 0 1 1 0, 1 1
0 1 1 1 0 1 1, 0 1
1 0 0 1 0 0 1 0,0 0
-> 86,75
-> 59,25
-> 146,00
Resta binaria
Las cuatro reglas básicas para restar dígitos binarios son:
0-0=0
1-1=0
1-0=1
0 - 1 = 1 y nos llevamos 1
Como ocurre en el sistema decimal, cuando el sustraendo es mayor que el minuendo, el
resultado de la resta es la distancia entre los dos (en el caso binario siempre es 1) y nos
llevamos 1. Este 1 se suma al sustraendo de la siguiente resta parcial.
1 0 1 0 1 1 0, 1 1 -> 86,75
- 0 1 1 1 0 1 1, 0 1 -> 59,25
0 0 1 1 0 1 1, 1 0 -> 27,50
0
-1
0
=> -1 0
1
0
Minuendo Sustraendo P-1
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
Diferencia P
0
0
1
1
1
1
0
1
1
0
0
0
0
0
1
1
Multiplicación binaria
Las cuatro reglas básicas para multiplicar dígitos binarios son:
0x0=0
0x1=0
1x0=0
1x1=1
Se realiza igual que en el sistema decimal con la ventaja de que sólo tenemos 1´s y 0´s. Se
realizan productos parciales, desplazando cada producto una posición a la izquierda y luego
se suman dichos productos.
11
1 0 1 1 -> 11
1 0 0 1 -> 9
1 0 1 1 -> 99
1011
1 1 0 0 0 1 1 -> 143(8 -> 64 + 4x8 + 3 = 99(10
División binaria
Utiliza el mismo método que el sistema decimal: multiplicación y resta.
1 0 0 0 1 1 110
110
101
001011
110
101
1.4
35 / 6 = 5 y de resto 5
Representación de los números binarios con signo
A partir de ahora, consideramos que el formato de almacenamiento de los números dentro
de un ordenador tiene un tamaño fijo. Supongamos 8 bits.
Para la representación de los números binarios con signo, estudiaremos tres posibilidades:
- Signo y magnitud
- Complemento a 1
- Complemento a 2
1.4.1 Signo y magnitud
Los números positivos y negativos se representan de la misma forma, pero cambiando su
signo, que es el bit de más a la izquierda (MSB).
Si estamos considerando números de 8 bits, tendremos 1 bit para el signo y 7 para la
magnitud.
- Magnitud: indica el valor del número
- Signo: indica si el número es positivo o negativo
o Positivo: MSB = 0
o Negativo MSB = 1
Con 8 bits ( 1 para el signo y 7 para la magnitud => 27-1 = 127) podremos representar en
decimal desde el –127 hasta el 127)
1 1111111
01111111
Signo Magnitud
-> -127
-> 127
12
Conversión a decimal:
La magnitud es la misma que en los números positivos por tanto, se calcula exactamente igual
(utilizando únicamente la mantisa) y se le cambia el signo.
1 0 0 1 1 0 0 1 = -(24 + 23 + 20) = -( 16 + 8 + 1) = -25
Operaciones aritméticas
Suma/resta: Se ha de comparar tanto el signo, como la magnitud de los operandos.
Mismo signo: se suman las magnitudes y se le pone el signo de los operandos.
Diferente signo: se resta siempre a la magnitud mayor, la más pequeña, y al resultado
se le pone el signo de la magnitud mayor.
24 – 25 = -1
00011000 - 10011001 = 10000001
10011001
00011000
10000001
-> -25
-> 24
->
-1
Multiplicación/división: Se multiplican o dividen las magnitudes al igual que se hacía con los
números positivos, y si los operandos tenían:
Mismo signo: el resultado es positivo.
Diferente signo: el resultado es negativo.
Inconvenientes de esta representación:
- Necesita operación de resta.
- Es un sistema muy lento, ya que requiere comparar signos y magnitudes.
1.4.2 Complemento a 1
Los números positivos se representan de la misma forma que los positivos de signo y
magnitud.
Los números negativos se representan mediante el complemento a 1 del número positivo.
Complemento a 1: cambiar los 1´s por 0´s y los 0´s por 1´s.
0 0 0 1 1 0 0 1 -> 25
1 1 1 0 0 1 1 0 -> -25
Con 8 bits podremos representar en decimal desde el –127 hasta el 127)
1 0 0 0 0 0 0 0 -> -127
0 1 1 1 1 1 1 1 -> 127
13
El 0 se puede representar de dos formas diferentes:
0 0 0 0 0 0 0 0 -> 0
11111111
-> - 0 = 0
000 ->
001 ->
010 ->
011 ->
100 ->
101 ->
110 ->
111 ->
0
1
2
3
-3
-2
-1
0
Conversión a decimal:
Los números positivos se convierten igual que hasta ahora.
Los números negativos (MSB = 1):
- Se asigna valor negativo al peso del MSB
- El resto de bits, se calculan tal y como lo hemos hecho anteriormente.
- Al resultado se le suma 1.
1 1 1 0 0 1 1 0 = -27 + 26 + 25 + 22 + 21 + 1 = -128 + 64 + 32 + 4 + 2 + 1 = -25
Operaciones aritméticas
Suma/resta: Tiene la ventaja que nos ahorramos la operación de resta, ya que para restar es
suficiente con sumarle el complemento a 1 del número a restar.
24 – 25 = -1
00011000 - 11100110 = 11111110
00011000
11100110
11111110
-> 24
-> -25
-> -1
Esto es correcto porque la magnitud del número negativo es mayor que la del positivo, pero
si fuera al revés, o sumáramos dos números negativos, se nos produciría “carry” (acarreo), es
decir que de la última suma parcial (la de los dos bits MSB) “nos llevamos 1”. Este 1 se lo
tenemos que sumar al resultado de la suma para obtener el resultado final.
25 – 24 = 1
00011001 - 11100111 = 00000000+1=00000001
00011001
1 11001 11
100000000
1
carry
00000001
-> 25
-> -24
1
14
-4 + (–4) = -8
11111011 + 11111011 = 11110110+1=11110111
11111011
11111011
111110110
1
carry
11110111
->
->
-4
-4
-8
Inconvenientes de esta representación:
- El 0 se puede representar con dos valores diferentes.
- En ciertas operaciones tenemos que sumarle el carry para obtener el resultado
final.
Lo que se suele utilizar es el complemento a 2.
1.4.3 Complemento a 2
Los números positivos se representan de la misma forma que los positivos de signo y
magnitud.
Los números negativos se representan mediante el complemento a 2 del número positivo.
Complemento a 2: Complemento a 1 + 1.
0 0 0 1 1 0 0 1 -> 25
1 1 1 0 0 1 1 0 -> complemento a 1
1
1 1 1 0 0 1 1 1 -> -25
Método alternativo para hallar el complemento a 2:
- Se empieza por el bit de más a la derecha (LSB) y vamos recorriendo hacia la
izquierda, dejándolos como están hasta que encontremos el primer 1 (incluido).
- A partir de aquí se hace el complemento a 1 del resto.
0 1 0 1 0 0 -> 20
1 0 1 0 1 1 complemento a 1
1
1 0 1 1 0 0 -> -20
101100
Con 8 bits podremos representar en decimal desde el –128 hasta el 127)
1 0 0 0 0 0 0 0 -> -128
0 1 1 1 1 1 1 1 -> 127
Conversión a decimal:
Los números positivos se convierten igual que hasta ahora.
15
Los números negativos (MSB = 1):
- Se asigna valor negativo al peso del MSB
- El resto de bits, se calculan tal y como lo hemos hecho anteriormente.
1 1 1 0 0 1 1 1 = -27 + 26 + 25 + 22 + 21 + 20 = -128 + 64 + 32 + 4 + 2 + 1 = -25
Operaciones aritméticas
Antes de hablar de las operaciones aritméticas en complemento a 2, aclararemos dos
conceptos que se nos van a producir en ellas (también se producen en las otras formas de
representación):
- Overflow (desbordamiento): Se puede producir cuando al operar con dos números,
sobrepasamos la capacidad de lo que podemos almacenar. En nuestro caso (8 bits)
si el resultado es > 127 o < 128.
En el caso de la suma, sólo puede pasar con números del mismo signo. En este caso
el resultado es de signo contrario a los operandos y por tanto, incorrecto.
- Carry (acarreo): Se puede producir cuando alguno de los operandos (o los dos), son
negativos. El hecho de representar los números en complemento a 2 hace que el
resultado tenga 1 bit más de lo que podemos almacenar (9 en nuestro caso). Esto no
es un error y sencillamente despreciamos este bit de acarreo.
Resta: La resta se realiza mediante la suma del complemento a 2 del número que queremos
restar: a – b = a + (-b) por tanto, le sumamos a “a” el complemento a 2 de “b”.
Suma:
- Ambos positivos: No se puede producir carry pero sí overflow.
01111101
-> 125
00111010
-> 58
10110111
183
overflow: la suma de dos números positivos nos da como resultado uno negativo. Esto es
debido a que rebasamos la capacidad máxima que es 127. Resultado incorrecto.
-
Ambos negativos: Se produce carry. Se puede producir overflow.
11111011
-> -5
11111010
-> -6
111110101
-> -11
carry: El resultado tiene 1 bit más que se descarta. El resultado es correcto.
10000011
-> -125
11000110
-> -58
101001001
-183
En este caso, además del carry, se produce overflow por lo que el resultado es incorrecto.
16
-
Signo contrario: No se produce overflow. Se puede producir carry si la magnitud
del número positivo es mayor que la del negativo.
00111001
11100011
100011100
00011101
11000111
11100100
-> 57
-> -29
-> 28
->
29
-> -57
-> -28
Se produce carry pero no overflow.
Resultado correcto.
No se produce carry ni overflow.
Resultado correcto.
Producto: Hay muchas formas de realizarlo que estudiaremos más adelante, así que
asumiremos que miramos el signo de los operandos para decidir el resultado final. Si algún
operando es negativo, se le hace el complemento a 2 para pasarlo a positivo. Se realiza el
producto, y si el resultado era negativo se halla el complemento a 2.
Cociente: Se suele realizar mediante restas (sumas del complemento a 2) sucesivas.
1.5
Códigos con pesos
De hecho, todos los sistemas estudiados hasta ahora: decimal, binario, octal y hexadecimal
son códigos con pesos, donde la posición de cada dígito tiene un peso igual a la base elevada a
la posición que ocupa.
Hemos visto que es muy fácil la conversión de binario a octal o hexadecimal o viceversa. Sin
embargo, no lo es tanto si queremos hacer la conversión a decimal al cual estamos más
acostumbrados, por ello podemos utilizar un sistema de fácil conversión al decimal, el BCD:
Binary Coded Decimal.
BCD: El código decimal binario es un código que permite expresar cada uno de los dígitos
decimales con un código binario.
En el BCD, existen diferentes códigos, de los cuales el más utilizado es el 8421, llamado así
porque utiliza 4 dígitos para representar los números decimales y el peso que se asigna a
cada uno de ellos es precisamente 8, 4, 2, 1 = 23, 22, 21, 20
A partir de ahora, nos referiremos siempre a este código por lo que tanto dará nombrarlo
como BCD o como 8421.
Con 4 dígitos se pueden representar 16 números: 0000 .. 1111 pero el código 8421 sólo utiliza
10 (0 .. 9), del 0000 al 1001
17
Decimal
0
1
2
3
4
5
6
7
8
9
8421
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
Para convertir a BCD un número decimal, basta con reemplazar cada dígito por los
correspondientes 4 bits. La operación contraria nos serviría para la conversión de BCD a
decimal.
35
2469
00110101
0010010001101001
Representación de los números en BCD con signo
Para la representación de los números en BCD con signo, estudiaremos dos posibilidades:
- Signo y magnitud
- Complemento a 10
Signo y magnitud:
- El signo se representa en una cadena de 4 bits.
- No nos interesa porque implica realizar la operación de resta.
Complemento a 10:
- Restar al número, la potencia de 10 correspondiente.
- Tiene que tener también un bit de signo.
0011110001001
789
1000
1 0 0 1 0 0 0 0 1 0 0 0 1 -789
-789
signo
211
Operaciones aritméticas
Suma: Se realiza la suma binaria pero agrupando los bits de 4 en 4:
- Si el resultado de esta suma de 4 bits es igual o menor a 1001 (9) el resultado es
válido.
- Si el resultado es mayor, o si genera un acarreo, se le suma 0110 (6) al resultado.
Si en esta segunda suma se genera un acarreo, se le suma al grupo de 4 bits
siguiente
18
00100011
00010101
00111000
23
15
38
1001
0100
1101
0110
00010011
9
4
13
1001
1001
00010010
0110
00011000
9
9
18
00010110
00010101
00101011
0110
00110001
16
15
31
Las 2 sumas parciales: 3+5 y 2+1, dan un resultado < 9 y
además no generan acarreo.
La suma de 9+4 da un resultado > 9 (1001) por tanto, le
sumamos 6 (0110).
Esta segunda suma produce un acarreo que se le suma al
grupo de 4 bits siguiente (0000).
La suma de 9+9 da un resultado parcial < 9, en este
caso 0010 (2), pero produce un acarreo, por tanto hay
que sumarle 6 (0110).
La suma parcial 6+5 produce un resultado > 9, por lo que
hay que sumarle 6 (0110).
Esta segunda suma produce a su vez un acarreo que se le
suma al segundo grupo de bits
01100111
01010011
10111010
01100110
000100100000
67
53
120
Las 2 sumas parciales: 6+5 y 7+3 dan resultados > 9,
por lo que les sumamos 6.
Las segundas sumas producen a su vez un acarreo que
se le suma al siguiente grupo de 4 bits.
01101001
00111001
10100010
01100110
000100001000
69
39
108
La suma 9+9 produce acarreo, por lo que hay que sumarle
6.
La suma 6+3 no es > 9 ni produce acarreo. Sin embargo,
al sumarle el acarreo de los otros 4 bits, nos da como
resultado 10 > 9, por lo que también hay que sumarle 6.
Resta: Se realiza la suma del complemento a 10 del número a restar.
0011110001001
789
1 0 1 1 0 0 1 0 0 0 0 0 1 -359 -> 641
1 110111001010
430
011001100110
carry
10010000110000
19
Multiplicación/División: No los estudiaremos pero se pueden realizar mediante sumas o
restas sucesivas.
1.6
Códigos alfanuméricos
Para la comunicación, no sólo se necesitan números sino también letras y otros símbolos.
Los códigos alfanuméricos representan números y caracteres alfabéticos. Aunque la mayoría
de estos códigos también representan otros caracteres tales como símbolos y distintas
instrucciones necesarias para la transferencia de información.
Como mínimo un código alfanumérico debe representar los diez dígitos decimales y las 26
(27 en España) letras del alfabeto => 36 elementos.
25 = 32 -> necesitamos 6 bits 26 = 64, por lo que 28 (64 – 36) elementos no se utilizan. Pero
siempre hacen falta otros símbolos: punto, coma, interrogante, ...
ASCII: American Standard Code for Information Interchange.
Código alfanumérico universalmente aceptado, que se usa en la mayoría de las computadoras
y equipos electrónicos.
La mayor parte de los teclados se estandarizan de acuerdo con el código ASCII, y cuando se
pulsa una letra, un número o un comando de control, es el código ASCII el que se introduce
en el ordenador.
El código ASCII dispone de 128 caracteres que se representan mediante un código binario
de 7 bits, aunque realmente son 8 con MSB = 0.:
- Los primeros 32 caracteres son comandos no gráficos (no se imprimen ni salen por
pantalla) y son de control (CR, ESC, ...)
Decimal: 0 .. 31
binario: 00000000 .. 00011111
hexadecimal: 00 .. 1F
- Los demás caracteres son símbolos gráficos que pueden imprimirse o mostrase por
pantalla, e incluyen las letras del alfabeto (mayúsculas y minúsculas), los diez
dígitos decimales, los signos de puntuación, y otros símbolos comúnmente
utilizados.
Decimal: 32 .. 127
binario: 00100000 .. 01111111
hexadecimal: 20 .. 7F
ASCII extendido: Además de los 128 caracteres ASCII estándar, existen otros 128
caracteres adicionales (MSB = 1) que fueron adoptados por IBM para utilizar en sus PC´s.
Debido a la popularidad del PC, estos caracteres especiales se han extendido a otras
aplicaciones, convirtiéndose en un estándar no oficial.
Los nuevos caracteres que van en decimal desde 128 a 255 o en hexadecimal de la 20 a FF,
están formados por:
- Caracteres alfabéticos no ingleses (ñ, ...)
- Símbolos no ingleses
20
1.7
Letras griegas
Símbolos matemáticos (±, ÷, ...)
Caracteres para gráficos
Caracteres gráficos de barras
Caracteres sombreados
Códigos detectores y correctores de error
En un sistema digital, la información se transmite mediante 0´s y 1´s, que equivale a subidas
y bajadas de tensión.
Estas señales eléctricas se pueden ver alteradas a causa de fallos físicos (subidas de
tensión , ruidos, ...), por lo que se producen diferencias entre los datos transmitidos y los
recibidos.
Para entender los códigos de detección de error es importante conocer el concepto de
distancia, también denominado comúnmente como distancia de Hamming: nº de dígitos (bits)
que hay que cambiar para obtener otra combinación de ese código.
Este concepto ahora no es trivial ya que estamos acostumbrados a trabajar con códigos
consecutivos, es decir que cualquier modificación de 1 bit (distancia 1) nos da otra
combinación de ese código.
Códigos de detección de errores: es aquel que tiene la propiedad de que ciertos errores
pueden transformar palabras del código en palabras que no lo son.
Para detectar un error de 1 bit es necesario que como mínimo, la distancia sea 2 => añadir 1
bit => nº palabras código = nº palabras que no lo son.
Por ejemplo, supongamos un código de 3 bits formado por 4 palabras:
000 011 100 110
Enviamos la 100, pero el error en 1 solo bit puede hacer que nos llegue la 000 o la 110, que
también son palabras del código y por tanto, no nos daremos cuenta que se ha producido un
error en la transmisión.
Sin embargo, si cambiamos en el código la 100 por la 101, la distancia entre las palabras del
código es 2 (hay que modificar 2 bits para obtener otra palabra de ese mismo código).
Con esto vemos que podemos detectar que se ha producido un error en 1 bit (o en tres), pero
si el error es en dos, obtendremos otra palabra de ese código y por tanto, no detectaremos
el error.
El ejemplo anterior tiene el inconveniente de conocer todas las palabras del código.
Método de paridad para la detección de errores.
21
Muchos sistemas emplean 1 bit de paridad como medio para la detección de errores de 1 bit.
Cualquier grupo de bits contiene un número par o impar de 1´s.
Un bit de paridad se añade al grupo de bits para hacer que el número total de 1´s sea
siempre par (paridad par), o impar (paridad impar).
Un determinado sistema puede trabajar con paridad par o impar, pero no con ambas.
Paridad par: nº de 1´s par
Paridad impar: nº de 1´s impar
bit de paridad par
bit de paridad impar
00000
10001
10010
00011
10000
00001
00010
10011
Como la distancia es 1, sólo podemos detectar errores en un nº impar de bits.
Se suele utilizar en ASCII.
Códigos de corrección de errores: Para corregir un error en 1 bit, se necesita más de 1 bit
de paridad ya que éste sólo puede indicar si la cadena es correcta o incorrecta.
Necesitaremos log2n bits extra. Es decir, para transmitir una cadena de 1 bit necesitaremos
21 bit extra. Para transmitir una cadena de dos bits, necesitaremos 22, …
Vamos a transmitir una cadena de 1 bit o sea , el 1 o el 0.
0 -> representado por 000 (2 bits extra)
1 -> representado por 111 (2 bits extra)
Tomaremos como 0, todas aquellas combinaciones que tengan más 0´s que 1´s. Lo mismo
ocurrirá con el 1.
000, 001, 010, 100 -> 0
011, 101, 110, 111 -> 1
Aún así vemos que si se modifican 2 bits tomaremos un resultado incorrecto. Mientras mayor
fiabilidad queramos, mayor nº de bits extra necesitaremos.
Otra solución es utilizar el código de Hamming.
Código Hamming de corrección de errores.
El código utiliza un nº de bits de paridad (dependiendo del nº de bits de información),
localizados en determinadas posiciones del grupo del código.
Número de bits de paridad
22
Descargar