TEMA
6: CODIGOS
Se necesita un codigo para
representar los caracteres. Los codigos que veremos son de 7 y 8 bits.
A.- NUMEROS ENTEROS
1.-
Codigo BCD ó 8421.
Es de 8 bits. Se utiliza para la
representacion de numeros. Cada digito lo representamos con 4 bits (Ej: 3 =
0011). Hay 2 tipos:
- Desempaquetado o extendido:
Los 4 bits de la derecha representan el numero, y los de la izquierda estan
rellenos a 0 o a 1 (segun el fabricante)
Para convertir a BCD extendido
desde decimal, hay que traducir termino a termino al binario (con 4 bits),
añadiendo 4 bits delante, bien 0 ó 1.
Ej: 12510=
000000010000001000000101
Para convertir de BCD extendido
a decimal, separamos los bits de 8 en 8.
Ej: 00001000 00000111 00000101 = 87510
- Empaquetado o condensado:
En un byte estan los 2 digitos (no llevan relleno)
Para la conversion, se hace
igual que antes (digito a digito, grupos de 4 bits), pero sin relleno.
Ej: 1710 = 0001 0111
2.-
Codigo ASCII. (1963)
Es el mas frecuente. Es de 7
bits, aunque a veces tiene un bit extra, el bit de paridad. Organizaciones como
ISO o CCITT, dedicadas a la creacion de standars, usan (a veces) codigo ASCII.
3.-
Codigo para VideoTexto.
Es codigo ASCII, mas una serie
de caracteres: mosaicos. Los caracteres estan organizados en rejillas: G0, G1 y
G2.
Para acceder a estos caracteres
(a las rejillas G1 y G2), hay que enviar:
-
19H para G2
-
0E para G1.
Para volver a la rejilla G0:
-
desde G2 no hace falta enviar ningun caracter
-
desde G1, enviamos 0F
- Modos: Afecta
a los atributos de:
-
Modo pantalla completa: Caracteres
de toda la pantalla.
-
Modo linea completa: Caracteres de toda la linea.
-
Modo paralelo: Caracteres antes del cursor.
-
Modo serie: Caracteres despues del cursor.
- Para posicionar el cursor en
la pantalla, usamos codigos de control:
-
1F, col, fila.
-
08: izquierda.
-
09: derecha.
4.-
Codigo EBCDIC.
Es un codigo de 8 bits. Es de
IBM. A veces aparece un bit más (bit de paridad).
B.- NUMEROS REALES.
1.- Punto fijo. El programador es el responsable de colocar el
punto decimal. Podemos representar los numeros de 3 formas:
1.-
Numeros binarios enteros.
Usamos el MSB para el signo. Los
negativos se representan en C-2. Se pueden representar un numero limitado de
numeros (con 16 bits: 32767 (215-1), -32768 (-215)).
2.-
BCD extendido. El signo se introduce en el MSB (bits de relleno) del ultimo
digito, siendo 1011 (B) positivo y 1101 (D) negativo.
3.-
BCD empaquetado. El signo se introduce detras del ultimo digito. Son los mismos
codigos que para el extendido.
2.- Punto flotante. Este tipo de representacion se introduce para
reducir el espacio de almacenamiento.
Tiene 2 partes, mantisa y
exponente. Ej: 12 · 108, donde 12 es la mantisa y 8 el exponente.
No obstante lo mas corriente es
utilizar el exponente sesgado, para evitar exponentes negativos.
Ej: Sesgo: 5
-123.45: mantisa: -0.12345
exp.
sesg.: 3+5=8
-0.12345 +8
Forma normalizada: Un
numero en punto flotante esta normalizado si la cifra inmediatamente a la
derecha es distinta de 0, y a la izquierda es 0.
Utilizando este tipo de
representacion, tenemos el Estandar IEE:
-
Sesgo: 64.
-
Se utiliza la representacion hexadecimal.
-
Usa 32 bits:
- Exponente sesgado: 7 primeros
bits.
- Signo: bit siguiente.
- Mantisa: los bits restantes.
-
Para codificar un numero en decimal en formato IEE:
1.- Convierto a hexadecimal.
2.- Normalizo.
3.- Hallo el exponente sesgado.
4.- Lo escribo en “binario”, y
traduzco a hexadecimal.
Ej: 10.5010
en formato IEE;
1.-
1010=A16
0.510 · 2 =12 10002 = 816
10.5010 = A.816
2.-
.A8 · 161
3.-
Exponente sesgado: 64 + 1 = 65
4.-
1000 001 0 1010 1000 0000 0000
0000 0000
8 2
A 8 0
0 0 0
-
Para descodificar un numero en IEE a decimal:
1.- Transformo a binario.
2.- Tomo los 7 bits del
exponente sesgado, los transformo a hexadecimal, y hallo el exponente.
3.- Tomo el bit de signo.
4.- Tomo la mantisa. Una vez
aqui, hallo el numero en hexadecimal.
5.- Transformo de hexadecimal a
decimal.
Ej: 84163852
1.-
1000 010 0 0001 0110 0011 1000
0101 0010
2.- Exponente
sesgado: 1000010 = 66
Exponente = 2
3.- 0
positivo.
4.- 0001 0110
0011 1000 0101 0010 = 16385216
Mantisa: .163852
En hexadecimal .163852 · 162
= 16.385216
5.- En
decimal:
1 · 161 + 6 · 160
+ 3 · 16-1 + 8 · 16-2 + 5 · 16-3 + 2 · 16-4
= 22.2210