Buscar

Codificação de Bytes BCD, Gray e Caracteres - Organização de Computadores

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Codificação de bytes
Códigos BCD
Motivação
O uso de valores binários é conveniente para cálculos, mas implica em rotinas de conversão para decimal.
Uma alternativa utilizada em máquinas antigas, para facilitar a conversão, é se armazenar em binário os dígitos do numero, e não seu valor.
Cada digito irá necessitar de 4 bits para ser armazenado.
Codificação
4 bits : 16 combinações possíveis.
Existem apenas 10 algarismos, portanto pode haver várias formas de codifica-los.
Esta codificação é denominada Binary Coded Decimal (Decimal codificado em binário – BCD).
Diferença entre os códigos: peso (valor absoluto) dado aos diversos bits.
Codificação
Código NBCD : pesos 8 4 2 1
Código de Aiken: pesos 2 4 2 1
Código de Stibitz: pesos 8 4 2 1 - 3 
Exemplo (codificação do digito 7)
0111 em NBCD
1101 em Aiken
1010 em Sitbitz
Tabela de valores
 
Dígito
NBCD
8421
Aiken
2421
Stibitz
8421 + 3
0
0000
0000
0011
1
0001
0001
0100
2
0010
0010
0101
3
0011
0011
0100
4
0100
0100
0111
5
0101
1011
1000
6
0110
1100
1001
7
0111
1101
1010
8
1000
1110
1011
9
1001
1111
1100
Exemplo de uso
Numero 4563 em decimal:
Em binário:
 0001000111010011 (0x11D3)
Em NBCD:
0100010101100011 (0x4563)
Em Aiken:
0100101111000011 (0x4BC3)
Em Stibitz:
0111100010010100 (0x7894)
Código mais utilizado
Dos 3 códigos vistos, o NBCD foi o mais utilizado, também pelo fato de que seu valor em hexadecimal tem os mesmos digitos que o valor em decimal.
O código NBCD é denominado também simplesmente de BCD.
Aritmética BCD
Para se somar dois números codificados em BCD:
Soma-se digito a digito, em binário. 
Três opções podem ocorrer:
Resultado é um digito válido e não existe carry. Manter o resultado obtido.
Resultado não é digito válido, não houve carry (valor entre 10 e 15). Subtrair 10 (ou somar 6) ao resultado, gerar um carry para próximo digito.
Resultado não é digito válido, houve carry (valor entre 16 e 18). Manter o carry e subtrair 10 (ou somar 6) ao resultado para obter digito correto. 
Exemplo de cálculo
832 + 983 = 100000110010 + 100110000011
 1000		0011		0010 
 1001		1000		0011
10001		1011		0101
Digito válido, sem carry – mantido
Digito inválido, sem carry – somar 6 (carry para próx. digito)
	0110		0001
Digito válido, com carry – somar 6, carry para próximo digito
	0110		1000
	0001
 10010		
Resultado: 0001 1000 0001 0101 (0x1815),
1815 em decimal.
Exercício de fixação
Converter os valores 574 e 386 para BCD e efetuar sua soma (em BCD)
0101 0111 0100
0011 1000 0110
1000 1111 1010
0001 0001 0110
1001 10000 0000
 0110
 0110
100101100000 = 0x960, 960 decimal
11
Códigos cíclicos (Gray)
Conceituação
Não são usados para cálculo, mas para indicar variação de grandezas analógicas (para sensores de temperatura, pressão, peso, etc).
Nesse tipo de codificação, quando se muda de um digito para outro, somente um único bit varia.
Tabela de exemplo
Com 4 digitos, todos os digitos usados
Valor
Gray
0
0000
1
0001
2
0011
3
0010
4
0110
5
0111
6
0101
7
0100
8
1100
9
1101
10
1111
11
1110
12
1010
13
1011
14
1001
15
1000
Conversão de binário para Gray
Acrescenta-se um zero à esquerda do numero a converter.
Soma-se (desprezando o carry) os pares de digitos do numero, da esquerda para a direita. 
Os resultados obtidos são os digitos do código Gray.
Exemplo: 10110 = 010110 =
 	 0+1 1+0 0+1 1+1 1+0 = 11101
Exercício de fixação
Converter os números 10101, 10110 e 10111 para Gray.
0+1 1+0 0+1 1+0 0+1 = 11111
0+1 1+0 0+1 1+1 1+0 = 11101
0+1 1+0 0+1 1+1 1+1 = 11100
Conversão de Gray para binário
Acrescentar um zero à esquerda do valor em Gray
Da esquerda para a direita:
Separa-se os bits em grupos, delimitados pelo bit 1 (ou pelo fim do valor).
O primeiro grupo (à esquerda) mantem os bits como estão.
O próximo grupo terá seus bits invertidos.
O grupo seguinte volta a ter seus bits não alterados.
Em seguida, o seguinte terá seus bits alterados.
E repete-se novamente até não haver mais grupos.
Exemplo
Valor em Gray: 01001011 = 001001011
Separando os grupos, tem-se:
001	001	01	1
001 manter = 001
001 inverter = 110
01 manter = 01
1 inverter = 0
Resultado: 001110010
Outro exemplo
Valor em Gray: 11100 = 011100
Separando os grupos, tem-se:
01 1 1 00
01 manter = 01
1 inverter = 0
1 manter = 1
00 inverter = 11
Resultado: 010111
Codificação de caracteres
Conceituação
Computadores devem também manipular informação alfabética (caracteres), além da informação numérica.
Letras serão codificadas de forma sequencial e crescente, para facilitar a tarefa de ordenação alfabética.
Letras minúsculas e minúsculas possuem códigos diferentes.
Além das letras, são previstos valores para códigos de controle, sinais de pontuação, e dígitos numéricos, e outros símbolos.
Primeiro código: EBCDIC, usado pela IBM.
Códigos ASCII
Padrão proposto e aceito internacionalmente (ASCII – American Standard Code for Information Interchange – Código Americano para Troca de Informação)
Previsto inicialmente para 7 bits, com numeros e letras maiúsculas e minúsculas.
 Continha 127 posições, sendo os valores de 0 a 31 reservados para caracteres de controle (para terminais e impressoras).
Aumentado depois para 8 bits.
Acima de 127 se encontram os caracteres acentuados maiúsculos e minúsculos, e alguns símbolos semigráficos.
Só há verdadeira padronização nos primeiros 127 caracteres. Existe variação nos caracteres acima deste valor. 
Tabela de códigos ASCII
127 primeiros códigos:
Tabela de códigos ASCII
127 primeiros códigos:
24
Códigos UNICODE
Tabela ASCII se mostrou insuficiente para representar os símbolos de linguagens orientais (grego, árabe, hindu, judaico, etc).
Prroposto o uso de codificação de 16 bits (2 bytes) por caracter. 
Essa tabela recebeu o nome de Unicode.
Pela tabela Unicode, são 65536 símbolos diferentes possíveis. 
As primeiras 256 posições (com o byte superior em 00000000) correspondem à tabela ASCII.
Sistemas operacionais atuais (como por exemplo Windows a partir do XP) já trabalham considerando a tabela Unicode.
Alguns alfabetos disponíveis em Unicode: árabe, armênio, cirílico, hindu, grego, hebraico, tailandês, birmanês, e outros.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais