Representação de Dados
! Porquê usar binário?! 0 ou 1! Verdadeiro ou Falso! Aberto ou Fechado
! P AND Q! P OR Q! NOT P! P XOR Q
A B A AND B 0 0 0 0 1 0 1 0 0 1 1 1 A B A OR B 0 0 0 0 1 1 1 0 1 1 1 1 A B A XOR B 0 0 0 0 1 1 1 0 1 1 1 0 A NOT A 0 1 1 0
! NOT(NOT(A)) = A! Leis de De Morgan:! NOT(A OR B) = NOT(A) AND NOT(B)! NOT(A AND B) = NOT(A) OR NOT(B)
! NAND! NOR
A OUT B
1 OUT 0
1 1 1 1 0 1
0 1 1 1 0 1
0 1 1 1 1 1
0 0 0 0 1 0
0 0 0 0 0 1
! NANDs! Gate Universal
! Decimal 233 10 =2*10 2 +3*10 1 +2*10 0! Binária 11101001 2 =1*2 7 +1*2 6 +1*2 5 +0*2 4+ 1*2 3 +0*2 2 +0*2 1 +1*2 0 = 233 10! Octal 351 8 = 3*8 2 +5*8 1 +1*8 0 = 233 10! Hexadecimal E7 16 = 14*16 1 +7*16 0 = 233 10
! Registos têm tamanho limitado 8, 16, 32, 64 bits! Maior Inteiro? 8: 0..255 10 16: 0.. 65.535 10 32: 0.. 4.294.967.295 10 64: 0.. 18.446.744.073.709.551.615 10! E o sinal?
! Sinal e Absoluto: -6 10 = 10000110 2 00000000 2 = 10000000 2 Subtração diferente de adição! Complemento para 1-6 10 = 11111001 2 Mesmos problemas! Complemento para 2-6 10 = 11111010 2
! 0 com 8 bits! C2(-0)= (2 8 0) mod 2 8 = 0! 80 com 8 bits: 01010000! C2(-80) com 8 bits: 10101111+1=10111111! Truque! Procurar o 1 mais à direita! Inverter depois daí! Intervalo: [-2 L-1 2 L-1-1]
! Complemento para 2 soma corretamente mesmo que sinais sejam diferentes! 5 -> 00001001! -3 -> Complementar(0000011) -> 11111101! Somando: 100000010
! max número sem sinal = 2 L -1! X >= 0,! Complementar(X) = 1111 1111 X = ( 2 L -1 X ) mod 2 L! X < 0,! C2(X)= Complementar( X )+1 = ( 2 L -1 X ) mod 2 L + 1 = (2 L X ) mod 2 L = (2 L +X) mod 2 L
! X > 0 C2(X) = X C2(X) = (2 L +X) mod 2 L! X < 0 C2(X) = (2 L +X) mod 2 L
! X+Y! X > 0, Y < 0! X+ (2 L +Y) mod 2 L =! (2 L +X+Y) mod 2 L =! X + Y > 0 -> X+Y! Senão, C2(X+Y)! Cuidado: overflow
! Se 2 números têm mesmo sinal E resultado com sinal diferente! 2 positivos Resultado negativo! 2 negativos Resultado positivo
! Com 8 bits! 0 ->10000000! 1 -> 10000001! -1 -> 01111111! 127 -> 11111111! -128 -> 00000000! n = 8! E(x) = x+128 = x + 2 n-1
! Comparação é mais fácil! Soma é! Interessante para vírgula flutuante
! Em decimal 2,35 = 2*10 0 +3*10-1 +5*10-2! Em binário 1.01 = 1*2 0 +0*2-1 +1*2-2 = 2,25 10! 1,3 10 pode ser escrita finitamente em binário?
! -5 * 10 23! Mesma ideia em binário - 01010 * 2 0101! Normalização! - 1,010 * 2 0101! Coeficiente (mantissa) é sempre uma fração com primeiro bit a 1! Expoente pode ser positivo ou negativo! Sinal
MANTISSA EXPOENTE SINAL
! 01101011! Positivo! Expoente: (4+2)-2 2 = 2! Mantissa= 1+0*2-1 +1*2-2 +1*2-3 = 1,375! Total = 1*2*1,375=2,75=2+3/4
! 2+5/8! 2+1/2+1/8! 10,101 2! Normalizar=! 10*1,0101=! 011010101! Perdemos o 1/8!!
Tamanho Sinal Mantissa Expoente 16 1 11 5 32 1 24 8 64 1 53 11 128 1 113 15
! Codificar letras como números! A Z -> cabem em 5 bits! + a z -> cabem em 6 bits! + 0 9 ˆ@!#., -> 7 bits! EBCDIC! ASCII
! Latin-1: francês, português, espanhol
! Mais de 110,000 caracteres, e 100 scripts! Usa 32 bits! Codificado em 8 bits (UTF-8)! Em 16 bits (UTF-16)
! Um byte para ASCII! 2 bytes para caracteres com acentos Ç é 0xc387! 3 bytes para caracteres lao! 4 bytes para cuneiforme
! Sequência de caracteres! Editores de texto! Processadores de texto
! Bitmaps! Matriz de pontos coloridos! Côr como mistura de 3 cores básicas
! Conjunto de Vectores! Operações geométricas! Popular em CAD, fonts
! Sequência de números! Codificar valor, ou diferença! CD: 44000 por segundo
! Sequência de Imagens! MPEG standards
! Sem Perdas! Run Length Encoding: 16 20 20 20 20 20 40 -> 16, 5, 20, 40! Frequency Dependent Encoding Ex: Huffman Espaço: 000 a: 010 n: 0010 x: 10010
! Differencial Encoding 09 12 11 12 -> 09 +3-1 +1! Dicionário Usar coleção de palavras frequentes 25000 palavras -> 15 bits Dicionário adaptativo/dinâmico
! Começa com um pequeno dicionário Letras, digitos! Palavras vão sendo adicionadas Melhora a codificação! Descodificação faz o mesmo! xyx xyx xyx xyx! 121343434
! GIF Pixel é codificado como Byte na palette Palette = (0 255, 0 255, 0 255) Pode usar dicionário adpatativo Pixel transparente! JPEG, TIFF Mais complexos
! MPEG! MP3: Máscara temporal Máscara nas frequências! Kbps -> Kilo bits por segundo.
! Bit de paridade! Coleção de bits para palavras maiores! Ex de CRC ou checksum! Não permite recuperação
! Distância entre 2 palavras: Número de bits diferentes Distância de Hamming! Se distância maior que três Erro de bit é recuperável Popular 64+8 bits em sistemas de memória
Manipulação de Dados
Unidade Aritmética/ Lógica Registos Barramento Memória Unidade de Controle
Registos Memória III III I 12 Unidade de Controle IV II 5 V 17
COPY R1,MEM1 COPY R2,MEM2 ADD R3,R2,R1 COPY MEM3,R3 PROGRAMA
Memória COPY R1,MEM1 COPY R2,MEM2 ADD R3,R2,R1 COPY MEM3,R3 Registos III III I 12 Unidade de Controle IV II 5 V 17
MOV R1,MEM1 MOV R2,MEM2 ADD R3,R2,R1 MOV MEM3,R3 ADD MEM3,MEM1,MEM2 CISC RISC
Memória COPY R1,MEM1 COPY R2,MEM2 ADD R3,R2,R1 COPY MEM3,R3 PEEK 15 COPY (MEM4),R4 12 5 17
! ADD! MULT! AND! OR! XOR! SHIFT! ROTATE
! JUMP! CONDITIONAL JUMP BEQ R1, 0,SOMEWHERE test! UNCONDITIONAL JUMP JUMP SOMEWHERE separador
MEMÓRIA Registos Unidade de Controle PC IR
! ADD R5,R4,R3 REGISTO3 02 05 04 03 OPCODE 0010 0101 0100 0011
0010 0101 0100 0011! Lê de memória! 0010: op-code para ADD! Copia registo 0100 para ALU! Copia registo 0011 para ALU! Copia saída de ALU para registo 0101
Controlador Controlador Controlador Controlador
Controlador Controlador Controlador Controlador
Controlador Controlador Controlador Controlador
! Handshaking! Consulto o status de controle! Envio dados/faço pedido
! Série! Paralela
! Bits per second (bps)! Mbps! Gbps
! Organização! Sequência de Bytes! Cada um com endereço
! SRAM: mais rápida! Usada em caches
! Mais compacta! Mais lenta
! Organizada por células! Truques: ler/escrever muitos bits de uma vez
! Cabeças/Discos/Pistas
! Usa espiral! 600 a 700MB! DVD chega a 3GB! Blu-Ray a 15GB
! Permitem ler e primeira escrita rápida! Apagar é lento! Limite nas escritas
! Usam tecnologia NAND! Só podem ler um bit de cada vez! Emula disco
! Decimal 233 10 =2*10 2 +3*10 1 +2*10 0! Binária 11101001 2 =1*2 7 +1*2 6 +1*2 5 +0*2 4+ 1*2 3 +0*2 2 +0*2 1 +1*2 0 = 233 10! Octal 351 8 = 3*8 2 +5*8 1 +1*8 0 = 233 10! Hexadecimal E7 16 = 14*16 1 +7*16 0 = 233 10
! Registos têm tamanho limitado 8, 16, 32, 64 bits! Maior Inteiro? 8: 0..255 10 16: 0.. 65.535 10 32: 0.. 4.294.967.295 10 64: 0.. 18.446.744.073.709.551.615 10! E o sinal?
! Sinal e Absoluto: -6 10 = 10000110 2 00000000 2 = 10000000 2 Subtração diferente de adição! Complemento para 1-6 10 = 11111001 2 Mesmos problemas! Complemento para 2-6 10 = 11111010 2
! max número sem sinal = 2 L -1! Complementar(X) = 1111 1111 X = ( 2 L -1 X ) mod 2 L! C2(-X)= Complementar(X)+1 = ( 2 L -1 X ) mod 2 L + 1 = (2 L X) mod 2 L
! 0 com 8 bits! C2(-0)= (2 8 0) mod 2 8 = 0! 80 com 8 bits: 01010000! C2(-80) com 8 bits: 10101111+1=10111111! Truque! Procurar o 1 mais à direita! Inverter a partir daí! Intervalo: [-2 L-1 2 L-1-1]
! X+C2(-Y) = X + (2 L Y) mod 2 L! = (X-Y) mod 2 L! Se (X-Y) mod 2 L = X-Y OK! Senão, overflow! Com 8 bits 100 10 = 01100100 2 100 + 100 100 100-100 100! Ver com sinais