Post on 08-May-2020
Sistemas de Computação
Bits e operaçõesBits e operações
Sistemas de Computação
Porque utilizar base 2 ?
• Representação na base 10– Estamos acostumados– Representação natural para transações financeiras (precisão)
• Implementação eletrônica na base 10– Difícil de armazenar– Difícil de codificar 10 níveis de tensão em um único fio– Difícil de implementar operações básicas (soma, multiplicação
etc.)
Sistemas de Computação
Representação Binária
• Circuitos eletrônicos trabalham com tensões com valores analógicos, podendo assumir qualquer valor nos limites permitidos
– Ex: Alimentação de 0 a 5 V, valores de 3,67 V, 0,5 V
• Circuitos digitais partem de circuitos eletrônicos e identificam apenas dois valores: 0 e 1
• Uma faixa de valores é definida como 1 e outra como 0
– Ex: Tecnologia TTL: 2-5V 1, 0-0,8 V 0
Sistemas de Computação
Representação Binária
• Vantagens: – Fácil de armazenar em elementos biestáveis– Precisão pode ser menor
• 2,8V e 3,3 V correspondem a 1– Implementação mais fácil das operações aritméticas
• Números de bits necessários para expressar Ncoisas diferentes é K, onde K é o menor número tal que 2K N
– Ex: Qual a cor do seu cabelo (preto,castanho,louro e ruivo)?4 opções, 2K 4, K=2, 2 bits, 00(preto), 01(castanho), 10(louro),
11(ruivo)
Sistemas de Computação
Organização da memória
• Computadores acessam grupos de bits de uma vez
• Menor unidade de endereçamento 1 byte = 8 bits
• Programa em linguagem de máquina enxerga a memória como um grande array de bytes, denominado memória virtual
• Cada byte de memória possui um endereço associado a ele e o conjunto de endereços éconhecido como espaço de endereçamento virtual
Sistemas de Computação
Organização da memória
• Este espaço é implementado por uma combinação de elementos:
– SRAM, DRAM, disco e sistema operacional
• No Unix e Windows, espaço de endereçamento privativo de um processo particular
• Tarefas do compilador e sistema de execução– Alocar e gerenciar onde os programas executáveis devem ser
armazenados– Vários mecanismos: estático, stack e heap– A alocação é sempre realizada dentro de um único espaço de
endereçamento virtual
Sistemas de Computação
Representação Hexadecimal
• Representação binária requer muitos 1s e 0s– 8 bits: 000000002 a 111111112
• Representação hexadecimal é um sistema baseado na base 16
• Requer 16 dígitos diferentes:– 0 a 9, A a F
• Cada dígito hexadecimal representa 4 bits de número representado em binário
– 8 bits: 0016 a FF16
Sistemas de Computação
Conversão entre Bases 2 e 10
• Números são representados utilizando-se a base 2– 1012, número binário cujo valor decimal é 5
• Valor de um número decimal: – D0 100 + D1 101 + D2 102 + …– 903, D0 = 3, D1 = 0, D2 = 9– 3 100 + 0 101 + 9 102 =903
• Valor decimal de um número binário:– B0 20 + B1 21 + B2 22 + …– 100011011, B0,, B1 ,B3, B4, B8
– 20 + 21 + 23 + 24 + 28 = 1 + 2 + 8 + 16 + 256 = 283
Sistemas de Computação
Conversão entre Bases
• Um computador possui uma unidade básica de informação de 12 bits. Quantos números podem ser representados por essa unidade básica e quais são eles ?
Sistemas de Computação
Conversão entre Base 10 e 2
1. Dividir número decimal por 2 e colocar o resto como o algarismo menos significativo
2. Enquanto o quociente for diferente de 02.1 Dividir o quociente por 22.2 Colocar o resto à esquerda do anterior2.3 Volte ao passo 2
Sistemas de Computação
Representação de Números em Base 16, 10 e 2
Dígito hexadecimal Valor decimal Valor binário
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
A 10 1010
B 11 1011
C 12 1100
D 13 1101
E 14 1110
F 15 1111
Sistemas de Computação
Conversão entre as Base 2 e 16
• 16 = 24
• Um algarismo hexadecimal é representado por 4 bits
• Divide-se o número binário em grupos de 4 bits da direita para a esquerda e substitui-se o algarismo hexadecimal correspondente ao grupo
Ex: (1011011011)2
(0010)(1101)(1011)2=(2DB)16
2 D B
Sistemas de Computação
Conversão entre as Base 16 e 2
• Substitui-se cada algarismo hexadecimal pelo grupo de 4 bits correspondente
Ex: (306)16
(0011)(0000)(0110)2=(001100000110)2
3 0 6
Sistemas de Computação
Conversão entre Bases 16 e 10
• Valor decimal de um número hexadecimal:– H0 160 + H1 161 + H2 162 + …Ex:
(2A5)16 = 5160 + 10161 + 2162 = 5 +160 + 512 = (677)10
Sistemas de Computação
Conversão entre Base 10 e 16
1. Dividir número decimal por 16 e colocar o resto como o algarismo menos significativo
1. Enquanto o quociente for diferente de 02.1 Dividir o quociente por 162.2 Colocar o resto à esquerda do anterior2.3 Volte ao passo 2
Sistemas de Computação
Palavras utilizadas nas máquinas
• Cada máquina possui um tamanho de palavra– Define o maior tamanho de inteiro da máquina incluindo endereços
• A maioria das máquinas possui uma palavra de tamanho igual a 32 bits
– Limita endereçamento a 4GB
• Estão aparecendo sistemas com tamanho de palavra de 64 bits
– Capacidade de endereçamento de aproximadamente 1,8 1019
bytes
Sistemas de Computação
Organização da memória orientada a palavra
• Endereços especificam localizações de bytes
– endereço do primeiro byte da palavra
– endereços de palavras sucessivas diferem por 4 (32-bit) ou 8 (64-bits)
End.=
0000
End.=
0008
End.=
0000
End.=
0004
End.=
0008
End.=
0012
Palavra de 32 bits
Palavra de 64 bits
Bytes Endereços
0000000100020003000400050006000700080009001000110012001300140015
Sistemas de Computação
Representação de dados
• As máquinas suportam múltiplos formatos de dados
– Utilizam frações ou números múltiplos do tamanho da palavra– Sempre um número inteiro de bytes
• Tamanhos de objetos em C (em bytes)Declaração em C 32-bit típico Compaq Alpha
char 1 1short int 2 2
int 4 4long int 4 8
char * 4 8float 4 4
double 8 8
Sistemas de Computação
Ordenação dos bytes
• Como os bytes de uma palavra multibytes devem ser ordenados na memória ?
• PCs são máquinas Little Endian– O byte menos significativo possui o menor endereço
• Suns, Macs são máquinas Big Endian– O byte menos significativo possui o maior endereço
Sistemas de Computação
Ordenação dos bytes
• Exemplo:– Variável X possui a representação 0x01234567– Endereço de X é 0x100
Big endian
Little endian
01 23 45 67
67 45 23 01
0x100 0x101 0x102 0x103
0x100 0x101 0x102 0x103
Sistemas de Computação
Examinando representação de dados
• Código para imprimir a representação de dados
• Associa a um ponteiro o tipo unsigned char *cria um array de bytes
typedef unsigned char *byte_pointer;void show_bytes(byte_pointer start, int len){int i;for (i=0; i<len; i++)printf("%p\t%.2x\n", start+i,start[i]);
printf("\n");}
Sistemas de Computação
Examinando representação de dados
• int a = 15213;
• printf("int a = 15213;\n");
• show_bytes((byte_pointer) &a, sizeof(int);
Resultado:
int a = 15213;11ffffcb8 6d11ffffcb9 3b11ffffcba 0011ffffcbb 00
Sistemas de Computação
Representando inteiros
int A = 15213; Decimal: 15213Binário: 0011 1011 0110 1101Hexa: 3 B 6 D
Alpha, Linux, NT Sun
6D
3B
00
00
00
00
3B
6D
Sistemas de Computação
Representando ponteiros
int A = 15213int *P = &A
Endereço AlphaHexa: 1 F F F F F C A 0Bin.: 0001 1111 1111 1111 1111 1111 1100 1010 0000
Endereço SunHexa: E F F F F B 2 CBin.: 1110 1111 1111 1111 1111 1011 0010 1100
A0
FC
FF
FF01
00
00
00
EF
FF
FB
2C
Sistemas de Computação
Representando floats
float A = 15213,0;
Representação em ponto flutuante padrão IEEEHexa: 4 6 6 D B 4 0 0 Binário: 0100 0110 0110 1101 1011 0100 0000 0000
Alpha, Linux, NT Sun
00
B4
6D
46
46
6D
B4
00
Sistemas de Computação
Representando strings em C
• Representados como um array de caracteres
• Cada caracter no formato ASCII
– codificação 7-bit– caracter 0 tem o cód. 0x30
• dígito i tem cód. 0x30+i
• Último caracter é o caracter nulo
• Sem problemas de ordenação de bytes, pois o dado é um byte
• Arquivos texto geralmente independentes de plataforma
Alpha, Linux, NT Sun
31
35
32
31
33
00
char *S= ”15123 ”
31
35
32
31
33
00
Sistemas de Computação
Representação de código de máquina
• O programa é codificado como uma seqüência de instruções
– Operações simples: aritméticas, leitura ou escrita da memória, desvio condicional
– Instruções codificadas em bytes• Alpha, Sun,Mac utilizam instruções de 4 bytes (RISC)• PC utiliza instruções de tamanho variável (CISC)
– Tipos de instruções e codificação diferentes para máquinas diferentes
• código binário não compatível
Sistemas de Computação
Representando instruções
Alpha Sun PCint sum (int x, int y)
{
return x+y;
}
• Alpha e Sun utilizam 2 instruções de 4 bytes
• PC utiliza 7 instruções de 1, 2 e 3 bytes
– estruturas do programa em NT e Linux diferentes
000030420180FA6B
81C3E00890020009
5589E58B450C03450889EC5DC3
Sistemas de Computação
Álgebra booleana
• Desenvolvida por George Boole no século 19 aplicada por Claude Shannon em sistemas digitais (1937)
• Representação algébrica da lógica codifica VERDADEIRO como 1 e FALSO como 0
• Operações :– AND: A & B=1 somente quando A=1 e B=1– OR: A | B 1 quando A=1 ou B=1– NOT: ~A=1 quando A=0– XOR= A^B=1 quando A=1 ou B=1, mas não ocorre quando ambos
iguais a 1
Sistemas de Computação
01101001 01101001 01101001
& 01010101 | 01010101 ^ 01010101 ~01010101
01000001 01111101 00111100 10101010
Álgebra booleana
• Pode operar em vetores de bits
• Representação de conjuntos– Um vetor com w bits representa os subconjuntos {0,...,w} e aj=1 se j A
• 01101001 {0,3,5,6}• 01010101 {0,2,4,6}
– & Interseção 01000001 {0,6}– | União 01111101 {0,2,3,4,5,6}– ~ Complemento 10101010 {1,3,5,7}
Sistemas de Computação
Operações com bits em C
• Operações &, |, ~,^disponíveis em C– Se aplicam a qualquer tipo inteiro: long, int, short, char
• Tratam os argumentos como vetores de bits
• Exemplos (tipo char)– ~0x41 0xBE
01000001 10111110
– 0x69 & 0x55 0x41
01101001 & 01010101 01000001
– 0x69 | 0x55 0x7D
01101001 | 01010101 01111101
Sistemas de Computação
Operações com bits em C
• Rotina para trocar os valores armazenados nos endereços estipulados pelas variáveis do tipo ponteiro x e yvoid troca(int *x, int *y){
*x = *x ^ *y; /* 1 */*y = *x ^ *y; /* 2 */*x = *x ^ *y; /* 3 */
}
Passo *x *yInício A B
1 A^B B2 A^B (A^B)^B=A (̂B^B)=
A^0=A3 (A^B)^A=(B^A)^A=
B (̂A^A)=B^0=BA
Final B A
Sistemas de Computação
Operações lógicas em C
• Operações &&, ||, ! disponíveis em C– Tratam 0 como FALSO– Qualquer coisa diferente de 0 é VERDADEIRO– Sempre retorna 1 ou 0
• Exemplos (tipo char)– !0x41 0x00
– !0x00 0x01
– !!0x41 0x01
– 0x69 && 0x55 0x01
– 0x69 || 0x55 0x01
Sistemas de Computação
Operações de deslocamento em C
Deslocamento à esquerda: x << y– desloca o vetor de bits x, y posições para
a esquerda– joga fora os bits deslocados da esquerda– preenche os bits da direita com 0s
Deslocamento à direita: x >> y– desloca o vetor de bits x, y posições para
a direita– joga fora os bits deslocados da direita– preenche os bits da esquerda com 0s para
desl. lógico– preenche os bit da esquerda com o bit mais
à esquerda que sobrou para desl. aritmético
Argumento x 01100010
<< 3 00010000
Log. >> 2 00011000
Aritm. >> 2 00011000
Argumento x 10100010
<< 3 00010000
Log. >> 2 00101000
Aritm. >> 2 11101000