Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução à Arquitetura de Computadores Representação de Dados Arquitetura e Organização Noções de Software Básico Notas de aula Raul Fernando Weber Quarta versão - Março de 1998 Material para uso exclusivo em INF01 107 Departamento de Informática Aplicada Instituto de Informática UFRGS ii iii PREFÁCIO Essas notas de aula são uma compilação dos tópicos desenvolvidos na disciplina de Introdução à Arquitetura de Computadores. Este material foi desenvolvido para suprir a falta de um livro-texto que contivesse todos os itens que são abordados na disciplina. As principais áreas da disciplina são cobertas. Os capítulos 1 e 2 tratam da representação de dados, cobrindo sistemas de numeração e representação de dados numéricos em um computador. Os capítulos 3 e 4 enfocam as noções básicas sobre arquiteturas de computadores, apresentando o modelo de von Neumann e exercitando os principais conceitos através de um computador hipotético, denominado de NEANDER. O capítulo 5 introduz um segundo computador hipotético, o AHMES, dotado de uma maior número de instruções a fim de exercitar os algoritmos de multiplicação e divisão vistos no capítulo 6. Os capítulos 7 e 8 cobrem as notações aritméticas de ponto fixo e ponto flutuante, assim como sistemas de codificação. O capítulo 9 apresenta os blocos básicos da organização de um computador, e o capítulo 10 ilustra a organização do NEANDER. Os capítulos 11 e 12 fornecem as principais noções e a nomenclatura básica da área de entrada e saída e software básico (compiladores, montadores e sistemas operacionais). Enquanto a parte concernente à aritmética binária (capítulos 1, 2, 6, 7 e 8) é completa em si mesmo, as outras visam somente introduzir o aluno nas áreas de arquitetura e sistemas operacionais, e estão longe de estarem completas. Estas demais áreas são posteriormente desenvolvidas em outras disciplinas do Instituto de Informática. iv SOBRE O AUTOR Raul Fernando Weber Doutor em Informática pela Universidade de Karlsruhe (1986), Mestre em Ciência da Computação, UFRGS (1980). Engenheiro Eletrônica, UFRGS (1976). Atualmente professor do Instituto de Informática e do Curso de Pós-Graduação em Ciência da Computação, UFRGS. Áreas de atuação: tolerância a falhas, segurança em sistemas de computação e projeto automatizado de sistemas digitais. Colaboradores Taisy Silva Weber Carlos Arthur Lang Lisboa Ingrid E.S. Jansch-Porto v SUMÁRIO 1 Bases Numéricas 1.1 Introdução........................................................................................1-1 1.2 Representação de números.....................................................................1-2 1.3 Transformação entre bases.....................................................................1-2 1.3.1 Método polinomial............................................................................1-3 1.3.2 Método de subtrações........................................................................1-3 1.3.3 Método das divisões..........................................................................1-4 1.3.4 Método da substituição direta................................................................1-5 1.4 Exercícios propostos............................................................................1-5 2 Sistemas de numeração em computação 2.1 Introdução........................................................................................2-1 2.2 Soma de números binários.....................................................................2-2 2.3 Representação de números.....................................................................2-2 2.3.1 Números inteiros positivos..................................................................2-3 2.3.2 Números com sinal: representação em sinal-magnitude..................................2-3 2.3.3 Números com sinal: representação em complemento de (B–1)..........................2-4 2.3.4 Números com sinal: representação em complemento de B...............................2-9 2.4 Comparação entre os métodos...............................................................2-12 2.5 Subtração.......................................................................................2-13 2.6 Estouro de representação.....................................................................2-13 2.7 Exercícios propostos..........................................................................2-14 3 Componentes do computador e modelo de von Neumann 3.1 Breve histórico...................................................................................3-1 3.2 Princípios básicos...............................................................................3-3 3.3 Elementos funcionais básicos..................................................................3-4 3.3.1 Memória........................................................................................3-5 3.3.2 Unidade operacional..........................................................................3-6 3.3.3 Unidade de controle..........................................................................3-7 3.3.4 Registradores especiais.......................................................................3-8 3.3.5 Conjunto de instruções e modos de endereçamento......................................3-9 3.3.6 Ciclo de busca-decodificação-execução de instruções....................................3-9 3.3.7 Programação de um processador..........................................................3-10 3.4 Um computador de primeira geração: o EDVAC..........................................3-10 3.5 Modelo de von Neumann: o computador IAS.............................................3-15 3.5.1 Organização da UCP.......................................................................3-15 3.5.2 Conjunto de instruções.....................................................................3-15 3.6 Arquiteturas de 4, 3, 2, 1 e 0 endereços....................................................3-17 3.6.1 Arquitetura de 4 endereços.................................................................3-17 3.6.2 Arquitetura de 3 endereços.................................................................3-18 3.6.3 Arquitetura de 2 endereços.................................................................3-18 3.6.4 Arquitetura de um endereço................................................................3-19 3.6.5 Arquitetura de zero endereços.............................................................3-20 4 Computador hipotético NEANDER 4.1 Características....................................................................................4-1 4.2 Modos de endereçamento.......................................................................4-1 4.3 Conjunto de instruções.........................................................................4-2 4.4 Códigos de condição............................................................................4-2 vi 4.5 Formato das instruções.........................................................................4-3 4.6 Exemplo de programação.......................................................................4-3 4.7 Conclusão........................................................................................4-4 4.8 Exercícios de programação usando o NEANDER...........................................4-4 5 Computador hipotético AHMES 5.1 Características....................................................................................5-1 5.2 Modos de endereçamento.......................................................................5-1 5.3 Conjunto de instruções.........................................................................5-2 5.4 Códigos de condição............................................................................5-3 5.5 Manipulação aritmética..........................................................................5-4 5.5.1 Aritméticaem complemento de dois........................................................5-4 5.5.2 Aritmética de inteiros positivos..............................................................5-6 5.5.3 Aritmética em complemento de um.........................................................5-6 5.5.4 Aritmética em sinal/magnitude...............................................................5-7 6 Multiplicação e divisão 6.1 Multiplicação binária (números inteiros positivos)..........................................6-1 6.2 Multiplicação binária (números em complemento de dois).................................6-7 6.3 Divisão binária (números inteiros positivos).................................................6-8 6.4 Divisão binária (números em complemento de dois, positivos).........................6-14 6.5 Divisão binária (números em complemento de dois, positivos ou negativos)..........6-18 6.6 Exercícios resolvidos.........................................................................6-19 7 Números em ponto fixo e ponto flutuante 7.1 Números em ponto fixo........................................................................7-1 7.2 Soma e subtração em ponto fixo...............................................................7-2 7.3 Multiplicação em ponto fixo....................................................................7-3 7.4 Divisão em ponto fixo..........................................................................7-4 7.5 Números em ponto flutuante...................................................................7-4 7.6 Formatos de números em ponto flutuante....................................................7-6 7.7 Soma e subtração de números em ponto flutuante...........................................7-7 7.8 Multiplicação de números em ponto flutuante................................................7-7 7.9 Divisão de números em ponto flutuante......................................................7-8 8 Codificações BCD, Numérica e Alfanumérica 8.1 Números e Aritmética BCD....................................................................8-1 8.2 Codificação.......................................................................................8-3 8.3 Códigos BCD (ou códigos de 4 bits ponderados)...........................................8-3 8.4 Códigos de cinco bits ponderados.............................................................8-5 8.5 Códigos de sete bits ponderados..............................................................8-5 8.6 Códigos Gray (ou códigos cíclicos)...........................................................8-6 8.7 Códigos de detecção e correção de erros.....................................................8-8 8.8 Códigos m-de-n.................................................................................8-9 8.9 Códigos de paridade............................................................................8-9 8.10 Códigos de Hamming.........................................................................8-9 8.11 Códigos alfabéticos (ou códigos alfanuméricos).........................................8-11 9 Elementos básicos de organização 9.1 Introdução........................................................................................9-1 9.2 Portas lógicas e equações booleanas..........................................................9-1 9.3 Equivalência de portas lógicas.................................................................9-5 9.4 Circuitos combinacionais.......................................................................9-7 9.5 Circuitos sequenciais..........................................................................9-10 9.6 Unidade Aritmética e Lógica.................................................................9-15 9.7 Memória........................................................................................9-18 10 Organização do Neander 10.1 Elementos necessários.......................................................................10-1 vii 10.2 Fluxo de dados...............................................................................10-1 10.3 Sinais de controle............................................................................10-7 11 Entrada e saída 11.1 Introdução....................................................................................11-1 11.2 Dispositivos periféricos.....................................................................11-2 11.3 Memória secundária.........................................................................11-2 11.4 Comunicação com outras máquinas.......................................................11-2 11.5 Sistemas de E/S..............................................................................11-3 11.5.1 Entrada e saída programada..............................................................11-3 11.5.2 Acesso direto à memória..................................................................11-5 11.5.3 Interrupção.................................................................................11-5 11.5.4 Informações complementares............................................................11-5 12 Software básico 12.1 Introdução....................................................................................12-1 12.2 Linguagens de programação................................................................12-1 12.3 Exemplo com NEANDER..................................................................12-2 12.4 Programas a nível de sistema...............................................................12-5 12.5 Interfaces entre hardware e software......................................................12-7 12.6 Sistemas operacionais.......................................................................12-8 12.7 Funções básicas dos sistemas operacionais..............................................12-11 12.8 Processos e escalonamento................................................................12-12 12.9 Carga do sistema (inicialização da máquina).............................................12-13 12.10 Multiprogramação.........................................................................12-13 12.11 Multiprocessamento.......................................................................12-15 12.12 Exemplos de sistemas operacionais.....................................................12-15 12.13 Redes de computadores...................................................................12-16 Bibliografia Apêndice: Utilização dos simuladores e depuradores A.1 Simulador.......................................................................................A-1 A.2 Formato da tela.................................................................................A-1 A.3 Entrada numérica...............................................................................A-2 A.4 Comandos de operação........................................................................A-2 A.4.1 Hexadecimal x decimal.....................................................................A-3 A.4.2 Visualização Simbólica.....................................................................A-3 A.4.3 Editando um programa na memória.......................................................A-3 A.4.4 Inspecionando a memória..................................................................A-4 A.4.5 Imprimindo porções da memória..........................................................A-4 A.4.6 Zerando uma área de memória.............................................................A-4 A.4.7 Movendo blocos.............................................................................A-4 A.4.8 Executando um programa..................................................................A-4 A.4.9 Salvando e carregando arquivos...........................................................A-5 1-1 Capítulo UM Bases Numéricas 1.1 Introdução Quando o homem aprendeu a contar, ele foi obrigado a desenvolver símbolosque representassem as quantidades e grandezas que ele queria utilizar. Estes símbolos, os algarismos, constituem a base dos sistemas de numeração. Nos tempos pré-históricos o homem utilizou uma correspondência um-para-um entre os objetos a serem contados e os seus dedos, ou então para pedrinhas ou mesmo para “riscos”. Um sistema deste tipo seria um “sistema unário” (com um único símbolo): Os primeiros algarismos encontrados consistiam em marcas horizontais ou verticais (como as acima) com traços de ligação entre elas para definir as quantidades superiores a um. Os símbolos romanos básicos podem ser considerados como uma evolução do sistema acima. Os algarismos romanos são basicamente aditivos: assim, por exemplo, III = I + I + I. Para facilitar a representação de grandes quantidades, foram introduzidos símbolos especiais para grupos: I=1 V=5 X=10 L=50 C=100 D=500 M=1000 Além disto, utilizam-se uma série de regras (como por exemplo a posição relativa dos símbolos aos seus vizinhos), que permitiam interpretar estes símbolos e determinar qual o número que estava sendo representado: VI=5+1=6 CXVI=100+10+5+1=116 IV=5-1=4 MCMLIX=1000+(1000-100)+50+(10-1)=1959 A realização de cálculos com este sistema, especialmente para operações como multiplicação e divisão, era entretanto extremamente complexa e de aplicação praticamente impossível. Posteriormente, os árabes utilizaram-se de um sistema originário da Índia, que possuía 10 símbolos (0 a 9), com os seguintes símbolos (da esquerda para direita, 1234567890): Este sistema começou a ser utilizado na Europa no século 12, e é conhecido atualmente como sistema de numeração arábica (mas com outros algarismos), e se destaca pelas seguintes características: • existe um símbolo para o valor nulo. • cada algarismo utilizado é uma unidade maior que o seu predecessor. 1-2 • a notação é posicional, ou seja, o valor de um algarismo é determinado pela sua posição dentro do número. Cada posição possui um determinado peso. 1.2 Representação de números Os sistemas atuais formam os números pela fórmula a seguir, onde a representa o número propriamente dito, B representa a base do sistema de numeração (B‡ 2), xi representam os algarismos (0£ xi<B), e n representa o número de posições utilizadas. Com B=10 tem-se o sistema decimal. n a = S (xi.Bi) i=–m O algarismo xi tem peso Bi, determinado pela sua posição. Para i com valores positivos, tem-se pesos maiores que a unidade; para i=0 tem-se exatamente o peso unitário (B0=1). Para valores negativos de i, tem-se pesos menores que a unidade (fracionários). Para o caso específico de números inteiros, utilizando-se n dígitos (ou “casas”), indexados de 0 até n–1, a fórmula fica: n-1 a = S (xi.Bi) i=0 ou, por extenso, expandindo-se o somatório: a =xn-1.Bn-1+xn-2.Bn-2+. . . . +x2.B2+x1.B1+x0.B0 ou ainda, simplificando-se a expressão: a =xn-1.Bn-1+xn-2.Bn-2+. . . . +x2.B2+x1.B+x0 Para os sistemas de numeração utilizam-se as seguintes regras: • A base B de um sistema é igual à quantidade de algarismos distintos utilizados. Para a base decimal, tem-se 10 algarismos distintos (de 0 a 9). • Quando uma posição é ocupada pelo maior algarismo, e ela deve ser aumentada de uma unidade, então esta posição recebe o símbolo nulo e a posição seguinte deve ser aumentada de uma unidade. Assim, 9+1=10, 19+1=20, 99+1=100, 1999+1=2000. • O algarismo mais a direita (denominado de dígito menos significativo) tem peso um. O algarismo imediatamente a esquerda tem o peso da base B, o seguinte a esquerda tem peso de B ao quadrado, depois B ao cubo, e assim por diante. • O valor de cada algarismo de um número é determinado multiplicando-se o algarismo pelo peso de sua posição. • O valor de um número é determinado pela soma dos valores de cada algarismo. 1.3 Transformação entre bases Os computadores atuais utilizam internamente somente um sistema de numeração: o sistema binário (B=2), com os algarismos 0 e 1. Este sistema foi estudado profundamente pelo matemático alemão Leibniz, no século 17. Somente com o advento dos computadores eletrônicos digitais, entretanto, tal sistema começou a ser utilizado na prática. Atualmente, 1-3 todos os computadores utilizam internamente o sistema binário para armazenamento e manipulação de números e dados. O tratamento de números representados em outras bases ocorre através de rotinas de codificação e decodificação. O mesmo ocorre com símbolos alfanuméricos. 1 .3 .1 Método polinomial Como cada número pode ser representado por um polinômio em uma certa base, tudo o que se deve fazer para transformar um número de uma base para outra é interpretar este número como um polinômio utilizando-se aritmética da base de destino: 1100012=1.25+1.24+0.23+0.22+0.21+1.20=32+16+0+0+0+1=4910 1100012=1.25+1.24+0.23+0.22+0.21+1.20=408+208+0+0+0+18=618 Nos exemplos acima, simplesmente aplicou-se a fórmula: a = xn-1.Bn-1+xn-2.Bn-2+. . . . +x2.B2+x1.B+x0 onde B é a base de origem e a é o número resultante na base destino. Observe-se que todos os cálculos são realizados na aritmética da base de destino. 1 .3 .2 Método de subtrações Sabendo-se que um número em uma determinada base B é representado pela fórmula a =xn-1.Bn-1+xn-2.Bn-2+. . . . +x2.B2+x1.B+x0 a conversão para determinação dos coeficientes xi é iniciada da esquerda (xn-1) para a direita (até x0). Inicia-se determinando os valores de n (a quantidade de dígitos necessária) e de xn-1 (o dígito mais significativo). Para tanto procura-se o produto (na base origem) do maior coeficiente com a maior potência da nova base, que está contido no número a ser convertido, ou seja, procura-se o maior produto xn-1.Bn-1 que seja menor (ou igual) que a. Este coeficiente xn-1 é o algarismo a ser utilizado na posição mais à esquerda (dígito mais significativo) do número na nova base. Subtrai-se este produto do número a ser convertido. Com isto tem-se: a ' = a – xn-1.Bn-1 = xn-2.Bn-2+. . . . +x2.B2+x1.B+x0 Para determinar-se o algarismo seguinte à direita (xn-2), repete-se o processo, usando agora a diferença do passo anterior (a') e a potência imediatamente inferior (se no passo anterior usou-se a potência Bi, utiliza-se agora Bi-1), e assim sucessivamente até todos os n dígitos terem sido determinados. Note-se que o resultado das diversas subtrações sempre deve ser positivo (ou zero). Se a subtração não for possível, isto indica que o coeficiente xi é zero. 681-1.29=681-512=169 169-0.28=169-0.256=169 169-1.27=169-128=41 41-0.26=41-0.64=41 41-1.25=41-32=9 9-0.24=9-0.16=9 9-1.23=9-8=1 1-0.22=1-0.4=1 1-0.21=1-0.2=1 1-1.20=1-1=0 Ou seja, o número final, em binário, é 1010101001. 1-4 Se o resultado de uma subtração produzir resultado zero, isto significa que todos os dígitos restantes são zero, como ilustrado no exemplo a seguir. 680-1.29=680-512=168 168-0.28=168-0.256=168 168-1.27=168-128=40 40-0.26=40-0.64=40 40-1.25=40-32=8 8-0.24=8-0.16=8 8-1.23=8-8=0 Os coeficientes restantes (x2, x1 e x0) são iguais a zeros, e o número final, em binário, é 1010101000. O método também se aplica para números com frações. Se não for possível chegar a zero após um certo número de posições, então interrompe-se o método após o número de casas desejado. 6,125-1.22=6,125-4=2,125 2,125-1.21=2,125-2=0,125 0,125-0.20=0,125-0.1=0,125 0,125-0.2-1=0,125-0.0,5=0,125 0,125-0.2-2=0,125-0.0,25=0,125 0,125-1.2-3=0,125-0,125=0 Ou seja, o número final é 110,001. O método também se aplica para outras bases. Seja a conversão de 6,8125 de decimal para octal: 6,8125-6.80=6,8125-6=0,8125 0,8125-6.8-1=0,8125-0,7500=0,0625 0,0625-4.8-2=0,0625-0,0625=0 Ou seja, 6,812510=6,648. Note-se que sempre se utiliza a aritmética da base de origem. 1 .3 .3 Método das divisões O número a ser convertido é dividido pela nova base (na aritmética da base de origem). O resto desta divisão forma o algarismomais a direita (menos significativo) do número convertido. O quociente é novamente dividido, e assim sucessivamente, até o quociente final ser zero. A sequência de todos os restos forma o novo número. Note-se que ao dividir o número a pela base B obtém-se: a /B=(xn-1.Bn-1+xn-2.Bn-2+. . . . +x2.B2+x1.B+x0)/B ou seja a /B=xn-1.Bn-2+xn-2.Bn-3+. . . . +x2.B1+x1, com resto igual a x0 A divisão seguinte por B produz como resto x1, e assim sucessivamente até xn-1. 53÷2=26, resta 1 26÷2=13, resta 0 13÷2=6, resta 1 6÷2=3, resta 0 3÷2=1, resta 1 1÷2=0, resta 1 Número binário resultante: 110101 Para frações, o método se modifica um pouco: a fração é multiplicada pela nova base; a parte inteira resultante forma o algarismo mais à esquerda da nova fração e a parte fracionária é submetida novamente ao método, até o resultado ser zero (ou até atingir-se o número de dígitos significativos desejado). 1-5 Exemplo: 0,828125 . 2 = 1,65625 Parte inteira = 1 Fração = 0,1 0,65625 . 2 = 1,3125 Parte inteira = 1 Fração = 0,11 0,3125 . 2 = 0,625 Parte inteira = 0 Fração = 0,110 0,625 . 2 = 1,25 Parte inteira = 1 Fração = 0,1101 0,25 . 2 = 0,5 Parte inteira = 0 Fração = 0,11010 0,5 . 2 = 1,0 Parte inteira = 1 Fração = 0,110101 1 .3 .4 Método da substituição direta Este é o método mais fácil, entretanto funciona somente para bases que são potências inteiras entre si, como por exemplo de octal para binário (e vice-versa) ou de hexadecimal para binário (e vice-versa). Seja B1=B2m; para um determinado m inteiro, então tem-se as seguintes regras: • para converter de B1 (a maior base) para B2 (a menor base), cada algarismo de B1 é substituído por m algarismos equivalentes de B2: 5 1 78 = 101 001 1112 7 0 C16 = 0111 0000 11002 • para converter de B2 para B1, agrupam-se os algarismos em grupos de m, tomando-se a vírgula como referência, ou seja, formam-se grupos de m algarismos tanto para a esquerda da vírgula (parte inteira) como para a direita (parte fracionária). Cada grupo é então transformado no seu algarismo equivalente na nova base: 1110,011012 = 001 110 , 011 010 = 1 6 , 3 28 1110,011012 = 1110 , 0110 1000 = E , 6 816 Observe-se que este método também pode ser utilizado entre duas bases que não seja diretamente uma potência da outra, desde que ambas sejam potências inteiras de uma terceira base. Assim, por exemplo, pode-se converter da base octal para hexadecimal (usando-se a base 2 como terceira base). 1.4 Exercícios propostos 1. Converter para a base decimal os seguintes números: a) 1010102 b)10103 c) 10214 d) 10256 e) 21658 f) 1FA216 g) E1A16 h) 7078 2. Usando o método das divisões, converter os seguintes números decimais para a base indicada: a) 96 para a base ternária b) 96 para a base octal c) 258 para a base hexadecimal d) 258 para a base binária e) 49 para a base quaternária f) 57 para a base ternária 1-6 g) 56 para a base binária 3. Usando o método das subtrações, converter os seguintes números decimais para a base indicada: a) 96 para a base ternária b) 96 para a base octal c) 258 para a base hexadecimal d) 258 para a base binária e) 49 para a base quaternária f) 57 para a base ternária g) 56 para a base binária 4. Usando o método das substituições, converter os seguintes números para a base indicada: a) 1011000110102 para a base octal b) 1011000110102 para a base hexadecimal c) 001011001012 para a base octal d) 001011001012 para a base hexadecimal e) 3478 para a base binária f) 72418 para a base binária g) 3AF16 para a base binária h) 7E4B16 para a base binária 2-1 Capítulo DOIS Sistemas de numeração em computação 2.1 Introdução Em todas as fórmulas usadas a seguir, ‘B’ representa a base do sistema de numeração, ‘n’ representa a quantidade de dígitos disponíveis para representar os números, e ‘a’, ‘b’ e ‘c’ representam números. A fórmula utilizada para representar um número inteiro: n-1 a = S (xi.Bi) i=0 será representada por a=S n-1xiBi, ficando a variação de i desde 0 até o limite (n-1) implícita. Para uma determinada base B, empregando-se n dígitos, pode-se representar Bn combi- nações distintas, ou seja, Bn números distintos. Assim, para base decimal com três dígitos pode-se representar 1000 números distintos (com zero incluído!). Entretanto, com os mesmos três dígitos e base dois, representa-se somente 8 números distintos. Assim, números binários vão exigir um grande número de dígitos, e normalmente trabalha-se com grandes cadeias de zeros e uns. Isto pode levar a erros visuais, e por isso empregam-se comumente as notações em base 8 e base 16 para representar números binários. A tabela abaixo lista os primeiros 16 números em binário, decimal, octal e hexadecimal. Binário Decimal Octal Hexadecimal 0000 0 00 0 0001 1 01 1 0010 2 02 2 0011 3 03 3 0100 4 04 4 0101 5 05 5 0110 6 06 6 0111 7 07 7 1000 8 10 8 1001 9 11 9 1010 10 12 A 1011 11 13 B 1100 12 14 C 1101 13 15 D 1110 14 16 E 1111 15 17 F Tabela 2.1 - Números em binário, decimal, octal e hexadecimal Em computação trabalha-se normalmente com quatro bases: a decimal, para entrada e saída dos dados (já que nossa sociedade é baseada no sistema decimal); a binária, para os cálculos internos; a hexadecimal, como forma compactada de representação interna; e a octal, também por este motivo. Note-se que a escolha das bases 8 e 16 não é ocasional: as transformações 2-2 entres as bases 2, 8 e 16 pode ser feita facilmente pelo método da substituição direta. Embora a base hexadecimal seja de representação mais complexa (utiliza letras e dígitos), ela é preferida sobre a base octal por ser mais compacta, ou seja, requerer menos espaço para representar os resultados. Os números do sistema binário são formados como qualquer outro número do sistema de numeração arábico (inclusive em octal ou hexadecimal): cada novo número é obtido por enumeração, somando-se um ao seu antecessor (e observando-se a regra do “vai-um”). Cada dígito do sistema binário (0 e 1) é denominado de bit, a contração de binary digit. A determinados conjuntos de bits são empregados nomes específicos. Assim, um quarteto (4 bits) é frequentemente denominado de nibble, e um octeto (8 bits) recebe a denominação de byte (ou o termo aportuguesado baite). Os múltiplos deste conjuntos utilizam os mesmos denominadores que no sistema decimal (K para kilo, M para Mega, G para giga, T para Tera, P para Peta), mas o fator multiplicativo não é 1000 (103) mas sim 1024 (210). Assim, um kilobit (abreviado 1Kb) são 1024 bits, e um kilobyte (abreviado 1KB) são 1024 bytes. Um megabyte (1MB) são 1024 KB; um gigabyte (1GB) são 1024 MB, um terabyte (1TB) são 1024 GB e assim por diante. 2.2 Soma de números binários A soma de dois números binários utiliza as mesmas regras da soma no sistema decimal. Como existem entretanto somente dois símbolos, a tabela de soma é extremamente simples: a c d=a+c 0 0 0 0 1 1 1 0 1 1 1 0 e “vai-um” Tabela 2.2 - Tabela verdade de um meio-somador (half adder) Observe-se que soma de 1 mais 1 resulta em 10 (dois), ou seja, o dígito do resultado é zero e existe a ocorrência de um “vai-um” (carry out, em inglês). Considerando-se a possível existência de um “vem-um” (carry in) e de “vai-um” (carry out), obtém-se a tabela a seguir. a c vem-um d=a+c vai-um 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 Tabela 2.3 - Tabela verdade de um somador completo (full adder) 2.3 Representação de números A representação de números inteiros positivos é direta e imediata. Entretanto, é necessário expandir (ou modificar) esta representação para incluir também números negativos. Diversas representações foram desenvolvidas com este propósito. Quatro destas representações, as mais comuns atualmente, são analisadas a seguir: inteiros positivos, sinal/magnitude, complemento de B-1 e complemento de B.2-3 2 .3 .1 Números inteiros positivos Considerando-se somente a representação de números inteiros positivos, com n dígitos pode-se representar Bn números, dispostos no intervalo fechado entre zero (o menor) e Bn–1 (o maior). Faixa de representação: [ 0 , Bn–1 ] Assim, para 2 dígitos decimais tem-se 100 números, de 0 a 99; para 3 dígitos em base 3 tem- se 27 números, de 0 (0003) a 26 (2223); para 4 dígitos binários tem-se 24=16 números, desde zero (00002) até 15 (11112); para 8 dígitos binários tem-se 28=256 números, desde zero (000000002) até 255 (111111112); Não existe previsão para números negativos. Cálculo do valor do número O valor de número positivo é calculado pelo polinômio S n-1xiBi, exatamente o mesmo método utilizado para a conversão pelo método polinomial. Troca de sinal Como não existe a capacidade de representar números negativos, não existe tal função. Soma de dois números A soma de dois números positivos é realizada somando-se os dois polinômios dígito a dígito, de acordo com as tabelas da soma na base em questão. Para base 2 utiliza-se a Tabela 2.3 da seção 2.2. Naturalmente, nesta soma leva-se em conta os eventuais “vai-um” e “vem- um”. 2 .3 .2 Números com sinal: representação em sinal-magnitude Para permitir números com sinal, esta representação utiliza um dígito (normalmente o mais significativo) para representar o sinal. No sistema decimal, o símbolo ‘–’ é usado para indicar números negativos e ‘+’ (ou simplesmente um espaço vazio) para números positivos. Com isto ganha-se a possibilidade de representar inteiros negativos, mas a faixa de representação é reduzida porque tem-se agora somente (n–1) dígitos para representar a magnitude. Faixa de representação: [ –(Bn-1–1) , +(Bn-1–1) ] ou [ –(Bn-1–1) , (Bn-1–1) ] Divide-se a gama de representação em dois subconjuntos simétricos, um para números negativos e outro para positivos. A faixa dos números positivos é reduzida de um fator igual a base B. Por exemplo, para base decimal com dois dígitos, se consideramos somente números positivos tem-se a faixa de 0 até 99; com a representação em sinal magnitude obtém-se a faixa de –9 até +9. Além disto, existem duas representações para o zero: –0 e +0. De um modo geral, para uma base qualquer, das Bn combinações possíveis usam-se somente 2.Bn-1–1 (descontando-se o duplo zero). No exemplo acima, das 100 combinações são utilizadas somente 19. Em binário, entretanto, com B=2, obtém-se 2.2n-1–1, ou seja, 2n–1 (isto é, Bn–1). Assim, somente uma representação é perdida (a do duplo zero). Obs.: no sistema binário costuma-se utilizar ‘1’ no lugar de ‘–’, e ‘0’ no lugar de ‘+’. Assim, para 4 dígitos, 0111 representa 7, 1111 representa –7, 0000 representa zero e 1000 representa –0. 2-4 Cálculo do valor do número Um número em sinal magnitude, independente de qual a base utilizada, é formado por duas parcelas, escritas lado a lado. A parcela à esquerda (S(a)) representa o sinal e a parcela à direita (M(a)) a magnitude: a = S(a)M(a) onde S(a) é ‘+’ ou ‘–’, e M(a)=S n-2xiBi. Em binário, utiliza-se usualmente ‘0’ no lugar de ‘+’ e ‘1’ ao invés de ‘-’. Troca de sinal Para trocar o sinal de um número ‘a’ em sinal magnitude, troca-se simplesmente S(a), mantendo-se a magnitude M(a). Assim, no caso de c=–a, tem-se M(c)=M(a), e se S(a)=‘+’, então S(c)=‘–’, e se S(a)=‘–’ então S(c)=‘+’. Soma de dois números A soma de dois números em sinal magnitude é realizada de acordo com as regras da tabela abaixo. No caso, deseja-se calcular d=a+c. S(a) S(c) S(d) M(d) Exemplo + + + M(a)+M(c) 5 + 7 = 12 – – – M(a)+M(c) -5 + -7 = -12 + – se M(a)‡ M(c), + M(a)–M(c) 7 + -5 = 2 se M(a)<M(c), – M(c)–M(a) 5 + -7 = -2 – + se M(a)>M(c), – M(a)–M(c) -7 + 5 = -2 se M(a)£ M(c), + M(c)–M(a) -5 + 7 = 2 Tabela 2.4 - Soma em sinal / magnitude Note-se que, para realizar somas de números em sinal/magnitude, deve-se conhecer as tabelas de soma e de subtração da base em que se estiver trabalhando. Esta necessidade de realizar duas operações distintas (soma e subtração) torna muito mais complexa a manipulação de números em sinal/magnitude pelo computador. Assim, apesar de familiar ao ser humano, esta notação é pouco utilizada em computação. Para resolver o problema de representação de números negativos, optou-se por usar a notação em complemento da base, como visto a seguir. Duas notações foram desenvolvidas: em complemento de (B-1) e em complemento de B Observação: a tabela de subtração em binário será vista mais adiante (seção 2.5). 2 .3 .3 Números com sinal: representação em complemento de (B–1) Para permitir que a operação de soma seja realizada de forma única, sem preocupação com os sinais dos operandos, é utilizada a representação em complemento. Números positivos são representados na forma normal, e números negativos são representados em complemento. Na representação em complemento de (B-1), o complemento de um número a é obtido subtraindo-se este número da maior quantidade representável, ou seja, Bn–1–a. Assim, na base 10, com 3 dígitos, o complemento de 9 (10-1) de um número a é obtido pela fórmula 999-a. Note-se que isto equivale a subtrair cada um dos dígitos de a de 9, que é justamente a base 10 menos um. Generalizando, para representar números negativos em complemento de B–1, cada algarismo xi é complementado individualmente pela fórmula B–1–xi. A tabela a seguir ilustra o cálculo do complemento para diversas bases. 2-5 Algarismo B=2 B=3 B=4 B=8 B=9 B=10 0 1 2 3 7 8 9 1 0 1 2 6 7 8 2 - 0 1 5 6 7 3 - - 0 4 5 6 4 - - - 3 4 5 5 - - - 2 3 4 6 - - - 1 2 3 7 - - - 0 1 2 8 - - - - 0 1 9 - - - - - 0 Tabela 2.5 - Exemplos de cálculo de complemento de B-1 A notação em complemento elimina a necessidade de representação explícita do símbolo do sinal, ou seja, não existe um símbolo especial para o sinal. A faixa de números representáveis é dividida em duas. Uma das faixas representa números positivos, e a outra faixa representa números negativos. Existindo m representações, as primeiras m/2 são utilizadas para números positivos (de 0 a m/2), e as m/2 representações seguintes (de m/2 até m) são utilizadas para números negativos. A faixa de representação fica: Faixa de representação, para B par: [ –(Bn/2–1) , +(Bn/2–1) ] Faixa de representação, para B ímpar: [ –(Bn–3)/2 , +(Bn–1)/2 ] A tabela a seguir ilustra as faixas para diversas bases. Note-se que a gama de representação é dividida em dois subconjuntos, um para números negativos e outro para positivos. A faixa dos números positivos é reduzida da metade (em relação aos inteiros positivos). Continua existindo a dupla representação do zero, assim como em sinal magnitude, mas não existe mais a perda de capacidade de representação devido a existência do dígito de sinal. Base Num.dig. Faixa Faixa em decimal 2 4 1000,1001,..,1111,0000,0001,..,0111 –7,–6,..,–0,+0,1,..7 3 3 112,120,121,..,222,000,001,..,111 –12,–11,–10,..,–0,+0,1,..,13 4 3 200,201,..,333,000,001,..,132,133 –31,–30,..,–0,+0,1,..31 8 3 400,401,..,777,000,001,..,376,377 –255,–254,..,–0,+0,..,255 9 2 45,46,..,88,00,01,..,43,44 –39,–38,..,–0,+0,1,..,39,40 10 2 50,51,..,98,99,00,01,..,48,49 –49,–48,..,–1,–0,+0,..,48,49 Tabela 2.6 - Exemplos de faixas de representação em complemento de B-1 Por exemplo, para base decimal com dois dígitos, se consideramos somente números posi- tivos tem-se a faixa de 0 até 99; com a representação em complemento de 9 obtém-se a faixa de 50 a 99 e 0 a 49. A primeira metade (de 50 a 99) representa números negativos (de –49 a –0); a segunda metade (de 0 a 49) representa números positivos. Note-se que um número iniciando por 9, 8, 7, 6 ou 5 é negativo; iniciando por 0, 1, 2, 3 ou 4 é positivo. Em binário, para 4 dígitos, tem-se a faixa 1000 a 1111 (–7 a –0) e 0000 a 0111 (0 a 7). Números iniciando por 1 são negativos, e iniciando por 0 são positivos. Para bases ímpares, existe um número positivo a mais, e paraa determinação do sinal não basta a verificação do dígito mais significativo (veja-se a seguir). Por exemplo, na tabela 2.6, os números em base 3 iniciando por zero são positivos, e os números iniciando por 2 são negativos, mas dos números iniciando por 1 metade são positivos (100, 101, 102, 110 e 111) e metade são negativos (112, 120, 121 e 122). 2-6 Cálculo do valor do número Um número em complemento de (B–1) tem o seu valor calculado de acordo com os seguintes passos: • determinação do sinal: se a representação do número, interpretado como inteiro positivo, estiver na metade superior da faixa, ele é negativo. Se estiver na metade inferior da faixa, é positivo. Ou seja, sendo o número a=S n-1xiBi, se a ‡ Bn/2, então este número em complemento de (B–1) é negativo. Se a<Bn/2, então, em complemento de (B–1), ele é positivo. Obs.: para bases pares, basta analisar o dígito mais significativo, conforme já explicado. Assim, por exemplo, para base 3 com três dígitos, tem-se 33 = 27 representações. A metade é 13,5, e assim os números de 0 a treze (representados respectivamente por 000 a 111) são positivos, e os de 14 a 26 (representados por 112 a 222) são negativos. Note-se que existem 14 números positivos, e 13 números negativos. Em outro exemplo, para base 4 com três dígitos, tem-se 43 = 64 combinações. A metade é 32, e então os números de 0 a 31 (representados por 000 a 133) são positivos, e os de 32 a 63 (representados por 200 a 333) são negativos. Existem neste caso 32 números positivos e 32 números negativos. • determinação da magnitude do número. Se o número a for positivo, então sua magnitude é dada por M(a)= S n-1xiBi. Se o número a for negativo, para calcular sua magnitude (valor absoluto) deve-se calcular o complemento de (B–1) de cada algarismo, ou seja, substitui-se cada dígito pelo seu complemento. Alternativamente, também é possível manipular todo o número: M(a)=S n-1(B-1-xi)Bi = S n-1(B-1)Bi – S n-1xiBi = Bn–1– S n-1xiBi =Bn–1–a Assim, por exemplo, para base 3 com três dígitos, a magnitude de 110 é 12 (o número é positivo). Já o número 112 é negativo, e assim seus dígitos devem ser complementados, resultando em 110, ou seja, a magnitude também é 12. Utilizando-se a fórmula acima, tem-se também 33–1–(112)3 = 27–1–14=26–14=12. A tabela a seguir fornece diversos exemplos do cálculo do valor de um número, de acordo com as regras descritas acima. Base Num.dig. Número Sinal Magnitude Num.decim. 2 4 1110 – 1 –1 2 4 1001 – 6 –6 2 4 1010 – 5 –5 2 4 0101 + 5 +5 3 3 102 + 11 +11 3 3 111 + 13 +13 3 3 121 – 10 –10 10 2 98 – 1 –1 10 2 99 – 0 –0 10 3 45 + 45 +45 10 3 54 – 45 –45 10 3 76 - 23 -23 10 3 50 - 49 -49 Tabela 2.7 - Exemplos de cálculo do valor de um número em complemento de B-1 2-7 Troca de sinal Para trocar o sinal de um número a em complemento de (B–1), basta complementar, também em B–1, cada um de seus dígitos. Assim, no caso de c=–(a), tem-se, pelo raciocínio acima, c=Bn–1–a. Note-se que –(–(a)) = –(Bn–1–a) = Bn–1–(Bn–1–a) = a. No caso de bases ímpares, o maior positivo, ao ser trocado de sinal, resulta novamente em si próprio. Nestes casos, diz-se que houve estouro de representação (veja seção 2.6). Para bases pares, isto nunca ocorre (para complemento de B-1). A tabela abaixo ilustra diversos casos de troca de sinal. Base Num.dig. Número Núm.negado Magnitude 2 4 1110 0001 1 2 4 1001 0110 6 2 4 1010 0101 5 2 4 0101 1010 5 3 3 102 120 11 3 3 111 111 (estouro) 13 3 3 121 101 10 10 2 98 01 1 10 2 99 00 0 10 2 45 54 45 10 2 54 45 45 16 2 01 FE 1 16 2 FF 00 0 16 2 98 67 103 Tabela 2.8 - Exemplos de troca de sinal para números em complemento de B-1 Soma de dois números Para entender-se o processo de soma de dois números em complemento de (B–1), deve-se analisar os mesmos casos da soma em sinal magnitude. Na Tabela 2.9 a seguir, deseja-se realizar a soma d=a+c. Os números a e c estão em complemento de (B–1), e quer-se obter d também em complemento de (B–1). Note-se que um número x, quando for negativo, está representado por Bn-1-M(x). As quatro primeiras colunas da esquerda da tabela mostram os mesmos seis casos da soma em sinal/magnitude, e a coluna da direita ilustra o resultado obtido pela simples soma dos dois operandos, sem analisar-se seus sinais, suas magnitudes ou se eles devem na realidade ser somados ou subtraídos (ou seja, simplesmente realiza-se a soma a+c). Em todos os casos mostrados na Tabela 2.9, usam-se sempre as mesmas tabelas de soma de números inteiros (não se utilizam tabelas especiais para soma ou subtração em complemento de (B–1)). Note-se que em três casos, marcados com (*), não se obtém diretamente o número já representado em complemento de (B–1); existe um termo excedente de Bn–1. Nos outros três casos, não marcados, o resultado obtido já está correto. Para reconhecer facilmente os casos que necessitam de correção, basta observar-se que o termo Bn corresponde a um dígito na posição (n+1). Como os números representados tem somente n posições, a posição (n+1) só será ocupada naquelas somas que produzirem um “vai-um”. Assim, se o termo Bn estiver presente, ele só pode ter sido gerado, na soma, por um “vai-um”. Ou seja, somente os casos que produzirem um “vai-um” são os que necessitam de correção. Para eliminar o termo Bn, basta eliminar-se este “vai-um”. E para eliminar o termo (–1), adiciona-se um ao resultado. 2-8 S(a) S(c) S(d) M(d) Resultado obtido pela simples soma de a+c + + + M(a)+M(c) a+c – – – M(a)+M(c) Bn-1-M(a) + Bn-1-M(c) Bn-1+Bn-1-(M(a)+M(c)) Bn-1 + Bn-1 - M(d) Bn-1 + d (*) + – se M(a)‡ M(c), + M(a)–M(c) M(a) + Bn-1-M(c) Bn-1 + M(a)-M(c) Bn-1 + d (*) se M(a)<M(c), – M(c)–M(a) M(a) + Bn-1-M(c) Bn-1 - (M(c)-M(a)) Bn - 1 - M(d) d – + se M(a)>M(c), – M(a)–M(c) Bn-1 - M(a) + M(c) Bn-1 - (M(a)-M(c)) Bn-1 - M(d) d se M(a)£ M(c), + M(c)–M(a) Bn-1 - M(a) + M(c) Bn-1 + (M(c)-M(a)) Bn-1 + d (*) Tabela 2.9 - Soma em complemento de B-1 Simplificando, tem-se a seguinte regra de correção: para obter a soma correta em complemento de (B–1), basta somar o “vai-um” ao resultado (e eliminar o “vai-um”). Ou, dito de outra maneira, se ocorrer um “vai-um”, deve-se somar um ao resultado para corrigi- lo. Se não ocorrer “vai-um”, o resultado já está correto. A tabela a seguir ilustra exemplos de diversas somas, tanto em base 2 (complemento de um) como em base 10 (complemento de nove). Base Num.dig. a c d=a+c d corrigido 2 4 1110 0001 1111 1111 2 4 1111 0001 10000 0001 2 4 1001 0111 10000 0001 2 4 0110 1111 10101 0110 2 4 0101 1000 1101 1101 2 4 0011 0011 0110 0110 2 4 1111 1111 11110 1111 2 4 0001 1110 1111 1111 10 2 98 37 135 36 10 2 99 00 99 99 10 2 99 01 100 01 10 2 45 55 100 01 10 2 45 45 90 90 10 2 76 45 121 22 Tabela 2.10 - Exemplos de soma em complemento de B-1 2-9 2 .3 .4 Números com sinal: representação em complemento de B Para representar números em complemento de B, utiliza-se a fórmula Bn–a. Note-se que, ao contrário de complemento de (B–1), esta fórmula é aplicada sobre todo o número, e não sobre os seus algarismos individuais. Desta maneira elimina-se a dupla representação do zero, e faixa de representação fica: Faixa de representação, para B par: [ –(Bn/2) , +(Bn/2–1) ] Faixa de representação, para B ímpar: [ –(Bn–1)/2 , +(Bn–1)/2 ] Note-se que a gama de representação é dividida em dois subconjuntos, um para números negativos e outro para positivos. Não existe mais a dupla representação do zero. Observe-se também que as faixas (considerando-se a representação dos números) continuam as mesmas da representação em complemento de B–1. Como estes números são agora interpretados em complemento de B, entretanto, os valores das faixas mudam. A faixa positiva permanece a mesma, mas a faixa negativa sofre um deslocamento de uma unidade, de forma a eliminar o zero negativo. A tabela a seguir ilustra as faixas para diversas bases. BaseNum.dig. Faixa Faixa em decimal 2 4 1000,1001,..,1111,0000,..,0111 –8,–7,..,–1,0,1,..7 3 3 112,120,121,..,222,000,001,..,111 –13,–12,–11,..,–1,0,1,..,13 4 3 200,201,..,333,000,001,..,132,133 –32,–31,..,–1,0,1,..31 8 3 400,401,..,777,000,001,..,376,377 –256,–255,..,–1,0,1,..,255 9 2 45,46,..,88,00,01,..,43,44 –40,–39,..,–1,0,1,..,39,40 10 2 50,51,..,98,99,00,01,..,48,49 –50,–49,..,–2,–1,0,1,..,48,49 Tabela 2.11 - Exemplos de faixas de representação em complemento de B Na Tabela 2.11, por exemplo, para base decimal com dois dígitos, com números positivos tem-se a faixa de 0 até 99; com a representação em complemento de 9 obtém-se a faixa de 50 a 99 e 0 a 49. Esta faixa continua a mesma para complemento de 10; e da mesma maneira a primeira metade (de 50 a 99) representa números negativos; a segunda metade (de 0 a 49) representa números positivos. Entretanto, agora 99 representa –1 (e não mais zero, como em complemento de 9) e 50 representa o número –50 (que não tem representação positiva equivalente!). Ou seja, todos os números negativos sofreram um acréscimo de –1. As demais propriedades se mantém: um número iniciando por 9, 8, 7, 6 ou 5 é negativo; iniciando por 0, 1, 2, 3 ou 4 é positivo. Em binário, para 4 dígitos, tem-se a faixa 1000 a 1111 (–8 a –1) e 0000 a 0111 (0 a 7). Números iniciando por 1 são negativos, e iniciando por 0 são positivos. Note-se também que agora as bases ímpares tem faixas simétricas, mas que as bases pares possuem um número negativo a mais, que não tem equivalente positivo dentro da faixa. Cálculo do valor do número Um número em complemento de B, tem o seu valor calculado de acordo com os seguintes passos: • determinação do sinal: a regra é a mesma de complemento de (B–1): se a representação do número, interpretado como inteiro positivo, estiver na metade superior da faixa, ele é negativo. Se estiver na metade inferior da faixa, é positivo. Ou seja, sendo o número a=S n-1xiBi, se a ‡ Bn/2, então este número em complemento de B é negativo. Se a<Bn/2, então sua interpretação é de um número positivo. Obs.: para bases pares, a regra pode ser simplificada: basta analisar o dígito mais significativo, conforme já foi explicado. 2-10 • determinação da magnitude do número. Se o número a for positivo, então sua magnitude é dada por M(a)=S n-1xiBi. Se o número a for negativo, para obter seu valor deve-se calcular o complemento de B do número: M(a)=Bn–a = Bn – S n-1xiBi Note-se que Bn-1-a é a representação em complemento de (B–1). Assim, uma maneira rápida de calcular o complemento de B é realizando o complemento de (B–1) de cada algarismo e a seguir somar um no número resultante. Ou seja, (Bn–1–a)+1 = Bn–a, que é o número desejado em complemento de B. A tabela a seguir fornece diversos exemplos. Base Num.dig. Número Sinal Magnitude Num.decim. 2 4 1110 – 2 –2 2 4 1001 – 7 –7 2 4 1010 – 6 –6 2 4 1000 – 8 –8 2 4 0101 + 5 +5 2 4 0111 + 7 +7 3 3 102 + 11 +11 3 3 111 + 13 +13 3 3 112 – 13 –13 3 3 121 – 11 –11 10 2 98 – 2 –2 10 2 99 – 1 –1 10 3 45 + 45 +45 10 3 54 – 46 –46 10 3 50 – 50 –50 Tabela 2.12 - Exemplos de cálculo do valor de um número em complemento de B Troca de sinal Para trocar o sinal de um número a em complemento de B, basta calcular Bn-a. Ou, pelo raciocínio acima, calcula-se o complemento de (B–1), complementando cada algarismo, e depois soma-se um. A tabela a seguir ilustra diversos casos de troca de sinal. Note-se que, para bases pares, a troca de sinal do menor número negativo (de maior magnitude) provoca estouro de representação, pois este número não tem equivalente positivo. Em bases ímpares isto não ocorre. Base Num.dig. Número Núm.negado Magnitude 2 4 1110 0010 2 2 4 1001 0111 7 2 4 1010 0110 6 2 4 0101 1011 5 2 4 1000 1000 (estouro) 8 (–8) 3 3 102 121 11 3 3 111 112 13 3 3 121 102 10 10 2 98 02 2 10 2 99 01 1 10 3 45 55 45 10 3 54 46 46 10 3 50 50 (estouro) 50 (–50) Tabela 2.13 - Exemplos de troca de sinal para números em complemento de B 2-11 Soma de dois números O raciocínio é análogo ao utilizado em complemento de (B–1). Deve-se analisar os mesmos casos da soma em complemento de (B–1) e da soma em sinal magnitude. Na tabela a seguir, deseja-se calcular d=a+c. Os números a e c estão representados em complemento de B, e quer-se obter d também em complemento de B. A tabela é praticamente uma cópia da usada para complemento de (B–1); comparando-se as duas nota-se que a diferença está na eliminação de todos os termos “–1” (que é justamente a diferença entre (B–1) e (B). Como no caso de complemento de B-1, tem-se seis casos a serem analisados. A coluna da direita mostra o resultado obtido se for realizada simplesmente uma soma dos dois operandos, sem a preocupação de analisar previamente os operandos. Em todos os casos, usam-se sempre as mesmas tabelas de soma de números inteiros (não se utilizam tabelas especiais para complemento de B). Note-se que em três casos, marcados com (*), não se obtém diretamente o número já representado em complemento de B; existe um termo excedente de Bn. Nos outros três casos, não marcados, o resultado obtido já está correto. S(a) S(c) S(d) M(d) d (Soma de a + c) + + + M(a)+M(c) a+c – – – M(a)+M(c) Bn-M(a) + Bn-M(c) Bn+Bn - (M(a)+M(c)) Bn + Bn - M(d) Bn + d (*) + – se M(a)‡ M(c), + M(a)–M(c) M(a) + Bn-M(c) Bn + M(a)-M(c) Bn + d (*) se M(a)<M(c), – M(c)–M(a) M(a) + Bn-M(c) Bn - (M(c)-M(a)) Bn - M(d) d – + se M(a)>M(c), – M(a)–M(c) Bn - M(a) + M(c) Bn - (M(a)-M(c)) Bn - M(d) d se M(a)£ M(c), + M(c)–M(a) Bn - M(a) + M(c) Bn + (M(c)-M(a)) Bn + d (*) Tabela 2.14 - Soma em complemento de B Os casos a serem corrigidos são identificados da mesma maneira que em complemento de (B–1). Somente os casos que produzirem um “vai-um” são os que necessitam de correção. Para eliminar o termo Bn, basta eliminar este “vai-um”; não existe a necessidade de somar um ao resultado. Para todos os fins práticos, esta “eliminação” é realizada simplesmente ignorando-se a existência do “vai-um” em um primeiro momento (a ocorrência ou não do “vai-um” ainda pode influenciar a análise do resultado da soma, mas não a soma propriamente dita). A tabela a seguir ilustra exemplos de diversas somas, tanto em base 2 como em base 10, considerando que os números estão representados em complemento de B. 2-12 Base Num.dig. a c d=a+c d corrigido 2 4 1110 0001 1111 1111 2 4 1001 0111 10000 0000 2 4 1111 0001 10000 0000 2 4 0110 1111 10101 0101 2 4 0101 1000 1101 1101 2 4 0011 0011 0110 0110 2 4 1111 1111 11110 1110 2 4 0001 1110 1111 1111 10 2 98 37 135 35 10 2 99 00 99 99 10 2 99 01 100 00 10 2 45 55 100 00 10 2 45 45 90 90 10 2 76 45 121 21 Tabela 2.15 - Exemplos de soma em complemento de B 2.4 Comparação entre os métodos Dos quatro métodos estudados nas seções anteriores, dois são amplamente utilizados: o de representação de números positivos e o de representação em complemento de B. Nestas duas representações, somas são realizadas através das mesmas tabelas; nenhum procedimento especial é necessário para somar-se dois números em complemento de dois (exceto a eventual eliminação do “vai-um”). Os outros dois métodos, de sinal magnitude e de complemento de (B–1), sofrem da desvantagem de necessitarem de procedimentos mais complexos para realização da soma, além de apresentarem duas representações para o zero. Em sistemas atuais, a base é binária e utiliza-se para tratamento de números negativos a representação em complemento de 2. A título de comparação, a tabela a seguir mostra a interpretação decimal de números binários de 4 dígitos nas quatro maneiras analisadas. Binário Int.positivo sinal mag. compl. de 1 compl. de 2 0000 0 +0 0 0 0001 1 1 1 1 0010 2 2 2 2 0011 3 3 3 3 0100 4 4 4 4 0101 5 5 5 5 0110 6 6 6 6 0111 7 7 7 7 1000 8 –0 –7 –8 1001 9 –1 –6 –7 1010 10 –2 –5 –6 1011 11 –3 –4 –5 1100 12 –4 –3 –4 1101 13 –5 –2 –3 111014 –6 –1 –2 1111 15 –7 –0 –1 Tabela 2.16 - Interpretação de números binários 2-13 2.5 Subtração A operação de subtração, seja qual for o método de representação utilizado, pode ser facilmente realizada transformando-a em uma soma: d = a – c = a + (–c) Assim, para realizar subtrações, pode-se simplesmente trocar o sinal do subtraendo e somá- lo ao minuendo. A troca de sinal e a soma seriam então realizadas de acordo com o sistema de representação utilizado. A subtração pode, também ser realizada através de tabelas próprias. Neste caso, no lugar de “vem-um” (carry in), tem-se o “emprestou-um”(borrow in); e no lugar de “vai um” (carry out) tem-se o “pede-um” (borrow out). a c d=a-c 0 0 0 0 1 1 e “pede-um” 1 0 1 1 1 0 Tabela 2.17 - Tabela verdade de um meio-subtrator a c emprestou um d=a–c pede um 0 0 0 0 0 0 0 1 1 1 0 1 0 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 0 0 1 1 0 0 0 1 1 1 1 1 Tabela 2.18 - Tabela verdade de um subtrator completo Apesar destas tabelas serem análogas às utilizadas para a soma, a grande maioria dos computadores não as utiliza; subtrações são realizadas internamente usando-se o método do complemento do subtraendo. 2.6 Estouro de representação Os números representados em um computador são limitados. Quanto maior o número de dígitos disponíveis, maior será a faixa dos números representáveis, mas esta faixa sempre será finita. Assim, ao realizar-se a soma (ou subtração) de dois números, o resultado pode cair fora da faixa representável. Nestes casos, diz-se que houve estouro ou transbordamento da representação (overflow). Para representar corretamente o resultado quando ocorreu estouro necessitaria-se de um dígito a mais para representar o número. Por exemplo, para números binários de 4 dígitos, tem-se: 1000 + 0001 = 1001 –8 + 1 = –7 (correto) 1000 + 1111 = 0111 –8 + –1 = 7 (incorreto; deveria ser –9) 0111 + 1111 = 0110 7 + –1 = 6 (correto) 0111 + 0011 = 1010 7 + 3 = –6 (incorreto; deveria ser 10) Note-se que o estouro não está diretamente relacionado com o “vai-um”. Os exemplos acima ilustram isto. No primeiro caso, não ocorreu nem estouro nem “vai-um”; no segundo caso 2-14 ocorreram tanto estouro como “vai-um”; no terceiro caso ocorreu “vai-um”, mas não estouro; e no quarto caso não ocorreu “vai-um”, mas ocorreu estouro. Existe uma regra simples para determinação de estouro em complemento de 2: ocorre estouro quando o “vai-um” do dígito mais significativo é diferente do “vem-um” para este mesmo dígito. Note-se que o dígito mais significativo é o utilizado para indicar o sinal do número. Esta é a maneira como os computadores internamente calculam se o resultado “estourou” ou não. Uma outra maneira, que não necessita da análise dos “vai-um” e “vem-um”, utiliza somente os dígitos mais significativos dos dois operandos e do resultado, ou seja, analisam-se os sinais dos operandos e do resultado. Esta análise está resumida na tabela a seguir (seja d=a+c). Sinal de a Sinal de c Sinal obtido para d Sinal real de d Estouro + + + + Não + + – + Sim – – – – Não – – + – Sim + – +/– +/– Nunca ocorre – + –/+ –/+ Nunca ocorre Tabela 2.19 - Análise dos casos de estouro de representação Pela tabela, pode-se observar que: • se os dois operandos tiverem sinais diferentes, nunca ocorre estouro (a representação do resultado sempre estará dentro da faixa). • somente ocorre estouro quando os dois operandos tiverem sinais iguais, e este sinal é diferente do sinal obtido para o resultado. Ou seja, quando somando-se dois números positivos obtém-se um resultado negativo, e quando somando-se dois números negativos obtém-se um número positivo. Nestas duas situações, o sinal do resultado está obviamente incorreto, e esta é uma indicação clara que ocorreu estouro de representação. Assim, em uma soma, ocorre estouro quando S(a)=S(c) e S(a) „ S(d). Analogamente, em uma subtração ocorre estouro quando S(a)„ S(c) e S(a)„ S(d). 2.7 Exercícios propostos 1. Qual o valor decimal de 011011012? Qual a representação binária de 654? 2. Converter para binário os seguintes números decimais: (a) 39 (b) 0,4475 (c) 256,75 (d) 129,5625 3. Converter para decimal os seguintes números binários: (a) 01101 (b) 0,001101 (c) 0111011,1011 (d) 010110011 4. Quantos números diferentes podem ser representados em uma palavra binária de 6 bits? 5. Quantos números diferentes podem ser representados em um conjunto de 4 chaves, cada uma com três posições diferentes? 6. Escrever os 12 primeiros números no sistema de numeração de base 5. 2-15 7. Escrever os 26 primeiros números no sistema de numeração de base 12. Usar a letra A para o decimal 10 e a letra B para o decimal 11. 8. Representar o número 12,1 em binário de dez bits, com 5 bits de parte inteira e 5 bits de parte fracionária. 9. Represente o número –4710 usando representações binárias de 8 bits em (a) sinal e magnitude, (b) complemento de um e (c) complemento de dois. 10. Converter os seguintes números hexadecimais em decimais: (a) B6C7 (b) D2763 (c) 9,1A 11. Converter os seguintes números octais em binário: (a) 56 (b) 32,234 (c) 231,2 (d) 3364 12. Converter os seguintes números hexadecimais em binários: (a) AB2 (b) 12,A (c) 649 (d) 0,D19 13. Converter os seguintes números binários em hexadecimais: (a) 010110111 (b) 011110,01011 (c) 01110100010101 14. Considerando um processador que opere com a base quaternária utilizando 5 bits. 14.1 Para números inteiros positivos: a) Quantos números diferentes podem ser representados? (Fórmula de cálculo e valor decimal) b) Quais são os limites inferior e superior desta faixa? (Valor quaternário e decimal correspondente) c) Como seria representado o número 126 neste sistema? 14. 2 Supondo que se queira representar os números inteiros com sinal, usando sinal e magnitude: a) Quantos números diferentes podem ser representados? (Fórmula de cálculo e valor decimal) b) Quais são os limites inferior e superior desta faixa? (Valor quaternário e decimal correspondente) c) Como seria representado o número 126 neste sistema? d) Como seria representado o número -126 neste sistema? 14.3 Agora supondo que se quer representar estes números usando complemento de B-1: a) Quantos números diferentes podem ser representados? (Fórmula de cálculo e valor decimal) b) Quais são os limites inferior e superior desta faixa? (Valor quaternário e decimal correspondente) c) Como seria representado o número 126 neste sistema? d) Como seria representado o número -126 neste sistema? 14.4 Agora supondo que se quer representar estes números usando complemento de B: a) Quantos números diferentes podem ser representados? (Fórmula de cálculo e valor decimal) b) Quais são os limites inferior e superior desta faixa? (Valor quaternário e decimal correspondente) c) Como seria representado o número 126 neste sistema? d) Como seria representado o número -126 neste sistema? 15. Considere os pares de números binários de 6 bits indicados abaixo. Efetue a operação de soma entre eles supondo, independentemente, que: 1) os números estão representados em sinal e magnitude; 2) os números estão representados em complemento de um; 2-16 3) os números estão representados em complemento de dois. Para cada caso, interprete o resultado, isto é, determine qual é o seu valor numérico e indique se este valor é o resultado correto da operação para a forma de representação sugerida. (a) 010101 e 110110 (b) 010101 e 010110 (c) 110101 e 110110 16. Efetuar as seguintes subtrações em um sistema decimal de 4 dígitos, utilizando uma vez complemento de 9 e outra vez complemento de 10: (a) 1024–913 (b) 249–137 (c) 119–239 17. Repetir o exercício 16, agora para um sistema binário de 12 bits, uma vez utilizando complemento de um e outra vez com complemento de dois. 18. Efetuar as operações indicadas abaixo (em decimal) em um sistema binário de 10 bits, com notação em complemento dedois. Analise o resultado, indicando a eventual existência de estouro de representação: (a) 475 + 128 (b) - 506 + -6 (c) 436 – 475 (d) 506 + 6 (e) 128 – 128 (f) - 475 + 511 19. Converta os números 17 e 15 para binário usando 6 bits e efetue a operação de soma entre eles (17+15), usando as seguintes representações: a) sinal magnitude; b) complemento de um; c) complemento de dois. Analise os resultados obtidos quanto à correção (sem calcular o seu valor correspondente em decimal). 20. Repita o exercício 19 para os números 13 e 8. 21. Repita o exercício 19 para os números -17 e -15 (realizando a soma -17+(-15)). 22. Mostre como somar em complemento de um, para n=6 bits, as seguintes parcelas decimais: (a) 27 e –7 (b) 27 e 8 (c) 1 e 5 23. Repetir o exercício 23, com as parcelas codificadas em complemento de dois, também para 6 bits. 24. Usando a técnica de subtrair através de complemento do subtraendo, mostrar como obter as seguintes diferenças em binário, 6 bits, complemento de um: (a) 8 – 7 (b) -16 – 16 (c) 15 – 24 25. Repetir o exercício 25 para complemento de dois em 6 bits. 26. Repetir o exercício 25 para sinal / magnitude. 27. Converta os seguintes números para binário, usando a representação destinada a inteiros positivos, usando o número necessário de bits e efetue a subtrações indicadas usando a tabela de subtração: (a) 32 - 15 (b) 31 - 14 (c) 17 - 9 28. Supondo um sistema decimal, com 4 dígitos, que trabalhe com representação de negativos em complemento de 9, mostre como realizar as operações: (a) 0136 + 7654 (b) 9998 + 7777 (c) 0010 – 0108 29. Repetir o exercício 28 para representação em complemento de 10. 3-1 Capítulo TRÊS Componentes do computador e modelo de von Neumann 3.1 Breve histórico Uma das mais importantes investidas na área computacional, e que merece registro histórico, foi a do inglês Charles Babbage. Ele projetou dois computadores: Difference Engine (denominado a seguir “Dispositivo Diferencial”), iniciado em 1823, e o Analytical Engine (“Dispositivo Analítico”), concebido em 1834, tendo ambos representado grandes avanços científicos em sua época, embora nenhuma deles tenha sido concluído. O objetivo do Dispositivo Diferencial era o cômputo automático de tabelas matemáticas. Sua única operação era a adição, mas a máquina podia resolver grande número de funções úteis pela técnica de diferenças finitas. Esta máquina foi projetada para polinômios de grau 6 e números binários de 20 dígitos, mas não foi concluída devido a problemas de inadequação da tecnologia mecânica disponível. Outra tentativa de Babbage, foi a construção do Dispositivo Analítico, que deveria realizar qualquer operação matemática automaticamente. Esta máquina já tinha módulos de armazenamento (memória) e uma unidade operadora (realizando 4 operações aritméticas). A entrada e saída de dados era feita através de cartões perfurados. Esta máquina permitia a alteração da seqüência dos comandos executados, dependendo do resultado de testes realizados. Novamente por problemas técnicos, a construção desta máquina não chegou ao final. Na tabela a seguir estão reunidas algumas das principais tentativas de valor histórico no âmbito computacional. Data Inventor:máquina Capacidade Inovações técnicas 1642 Pascal adição, subtração transferência automática de vai-um; representação em complemento 1671 Leibnitz adição, subtração, multipl., divisão mecanismo para multiplicação e divisão 1827 Babbage: Difference Engine avaliação polinomial por diferenças finitas operação automática com diversos passos 1834 Babbage: Analytical Engine computador de propósitos gerais mecanismo automático de controle de sequência (programa) 1941 Zuse: Z3 computador de propósitos gerais primeiros computadores de propósitos gerais operacionais 1944 Aiken: Harward Mark I computador de propósitos gerais primeiros computadores de propósitos gerais operacionais Tabela 3.1 - Principais avanços na computação Uma das primeiras tentativas para construção de computadores eletrônicos foi feita por volta de 1930 por John Atanasoff, na Universidade Estadual de Iowa. Era uma máquina construída com base em válvulas para resolução de equações lineares. O primeiro computador eletrônico de propósitos gerais foi provavelmente o ENIAC (Eletronic Numerical Integrator and Calculator), construído entre 1943 e 1946, na Universidade da Pensilvânia, sob a coordenação de J. Mauchly e J. P. Eckert. Analogamente à primeira máquina de Babbage, parte da motivação do ENIAC foi a necessidade de construir tabelas de forma automática, por interesse do sistema militar americano (tabelas balísticas). Fisicamente, era uma máquina enorme que pesava 30 toneladas e empregava cerca de 18000 3-2 válvulas. Para se ter uma idéia do tempo de execução nesta máquina, eram necessários cerca de 3 ms para realização de uma multiplicação de 10 dígitos (decimais), o que se constituiu em grande avanço para a época. Ele trabalhava preponderantemente com valores decimais e não binários. Na Figura 3.1 é mostrada a estrutura básica do ENIAC. Com o avanço da pesquisa e o conseqüente desenvolvimento tecnológico, houve grandes modificações nos computadores. Basicamente, ao longo do tempo, a tecnologia e os estilos usados na construção de computadores apresentam pontos comuns, que nos permitem classificá-los em gerações. Na tabela a seguir, são apresentadas as gerações de computadores de acordo com sua classificação histórica. Geração Tecnologias Característica de hardware Característica de software Exemplo 1a (1946 - 54) Válvulas, memória de tubos catódicos aritmética de ponto fixo linguagem de máquina, linguagem assembler IAS, UNIVAC 2a (1955 - 64) Transistores, núcleos de ferrite, discos magnéticos ponto flutuante registrador índice processadores E/S ling. alto-nível bibliot. de subrotinas monitores batch IBM7094 CDC1604 3a (1965 - 74) Circuitos integrados (SSI e MSI) microprogramação pipeline memória cache multiprogramação multiprocessamento sistema operacional memória virtual IBM S/360; DEC PDP-8 4a (1975 - ?) Circuitos LSI memórias semicondutoras Amdahl 470; Intel 8748 Tabela 3.2 - Gerações de computadores Atualmente, esta tabela [HAY78] já poderia ser completada com uma quinta geração que incluiria as máquinas maciçamente paralelas, os circuitos VLSI, as máquinas “data-flow”, etc, dependendo do parâmetro escolhido para embasar esta evolução. multiplicador divisor e raiz quadrada tabelas de funções a c u m u l. unidade mestre de programação leitora de cartões impressora e perf. de cartões Figura 3.1 - Estrutura básica do ENIAC 3-3 3.2 Princípios básicos Cada computador tem um conjunto de operações e convenções único para determinar as posições dos dados com os quais a operação será realizada. Os vários computadores diferem nas operações específicas que fornecem e nos métodos que eles usam para referenciar dados que serão manipulados por uma operação. Em geral, uma operação tem a forma OPERAÇÃO OPERANDOS e é denominada de instrução. OPERAÇÃO especifica a função que será desempenhada. OPERANDOS fornece a maneira de calcular a posição atual dos dados com os quais a operação será realizada. Um programa é constituído de uma seqüência pré-determinada de instruções, que deve ser seguida para que seja atingido o objetivo computacional. Este programa e os dados correspondentes estão armazenados na memória da máquina; o conjunto de instruções (ou programa) deve ser interpretado para realização do processamento, isto é, a informação codificada correspondente às ações e operandos deve ser entendida e então processada. A memória de um sistema de computador tem a função de armazenar dados e instruções; é organizada em posições, que podemser visualizadas como elementos em uma matriz. Cada elemento tem um endereço. Assim, pode-se falar de uma memória que tenha x posições: cada posição pode ser referenciada diretamente de acordo com a sua colocação na seqüência. Por exemplo, se uma memória tem 4096 posições, existem posições de memória 0, 1, 2, 3,...., 4094 e 4095. Quando um destes números aparece nos circuitos de controle conectados à memória, o conteúdo (o valor que está na posição) será trazido da memória para os circuitos da unidade de processamento ou a informação na unidade de processamento será armazenada na memória, dependendo do trabalho associado com o endereço. Instruções em um computador são executadas em uma seqüência determinada por suas posições de memória. Na maioria dos computadores (que formam a classe das chamadas máquinas de von Neumann, cujo modelo básico será visto na seção 3.5), instruções e dados são distribuídos em posições de memória. O endereço representa uma posição particular na memória e pode ser formado de várias maneiras. A representação trivial de um endereço está na parte de uma instrução chamada campo de endereço. Contudo, há várias maneiras de se modificar um campo de endereço por valores em outras partes do processador (aritmética de endereços). As diversas possibilidades e vantagens destas técnicas serão mostradas mais adiante na disciplina. A unidade lógica e aritmética realiza ações indicadas nas instruções, executando operações numéricas (aritméticas) e não numéricas (lógicas) além da preparação de informações para desvios do programa. O controle do programa e a unidade lógica e aritmética formam a unidade central de processamento (UCP), ou simplesmente processador. Busca - decodificação - execução de instruções Um elemento no processador, denominado de contador de instruções ou apontador de instruções, contém a posição da próxima instrução a ser executada. Quando uma seqüência de execução de instruções tem início, a instrução cujo endereço está no contador de instruções é trazida da memória para uma área de armazenamento chamada registrador de instrução. Este processo consiste na busca de instrução. A instrução é interpretada por circuitos de decodificação que fazem com que sinais eletrônicos sejam gerados no processador como resultado do valor do campo de operação, isto é, decodificam a informação correspondente à operação a ser realizada. Esses sinais, ou seqüência de sinais, resultam na execução da instrução. Execução é a aplicação da função do operador nos operandos. Quando a execução de uma instrução é 3-4 terminada, o contador de instruções é atualizado para o endereço de memória da próxima instrução. Esta instrução é então trazida da memória para o registrador de instruções e executada, repetindo-se assim o ciclo de busca-decodificação-execução. A seqüência de instruções pode mudar como resultado de uma instrução que direciona um desvio (também chamada transferência ou salto). Estas instruções contêm o endereço da próxima instrução a ser executada ao invés do endereço de um operando. Elas causam mudanças no fluxo do programa como resultados das condições nos dados. O desvio condicional representado por uma estrutura de programação de alto nível de IF (teste para uma condição especificada e alteração do fluxo de programa se a condição é atendida) traduz- se em algum tipo de instrução de desvio. 3.3 Elementos funcionais básicos Um computador é composto por blocos convencionalmente chamados de memória, unidades operacionais, unidades de controle e dispositivos de entrada e saída (Figura 3.2). A unidade operacional e a unidade de controle tem funcionalidade específica, conforme será visto na seqüência. Reunidas, entretanto, recebem no seu conjunto a denominação de unidade central de processamento (UCP) ou processador. Memórias, unidades operacionais, unidades de controle e dispositivos de entrada e saída são formados por elementos de menor complexidade, tais como registradores, contadores, multiplexadores, seletores, decodificadores, somadores e portas lógicas (AND, OR, INVERSOR). Registradores são elementos digitais com capacidade de armazenar dados. Têm associados a si sinais de carga, que determinam quando serão armazenados novos conteúdos nestes elementos; ao ser acionado este sinal (carga), o registrador copia para si o dado que está em suas linhas de entrada. Contadores, multiplexadores, seletores, decodificadores, somadores e portas lógicas são elementos com capacidade de operar sobre dados, alterando-os ou fornecendo um novo dado como resultado da operação que realizam. Elementos digitais necessitam ser ativados ou habilitados para realizar uma determinada operação. Os sinais responsáveis pela ativação ou habilitação de componentes digitais são conhecidos como sinais de controle. controle unidadeoperacional memória entrada/ saída Figura 3.2 - Elementos básicos de um computador Dados são transferidos, entre os diversos elementos de um computador, por caminhos físicos chamados barramentos. Barramentos são caminhos físicos que permitem o transporte de dados entre os vários elementos da parte operacional, memória e sistema de 3-5 entrada e saída. Um barramento só pode receber dados de uma fonte de cada vez. Do ponto de vista de arquitetura, um barramento se caracteriza pela sua largura em bits. A largura em bits do barramento deve corresponder ao comprimento dos elementos (dados, endereço, controle) que são por ele transportados. Cada um dos blocos básicos do computador é comentado, em detalhes, a seguir. 3 .3 .1 Memória A memória é formada por elementos armazenadores de informação. Uma memória está dividida em palavras. Cada palavra ocupa uma posição de memória e é identificada univocamente por um endereço. O conteúdo armazenado nas palavras da memória tanto pode representar dados como instruções. Um esquema da estrutura convencional para a memória de um computador é mostrado na Figura 3.3. memória RDM out RDM in R E M read write Figura 3.3 - Modelo estrutural da memória Os registradores mostrados na Figura 3.3 são: REM: registrador de endereços da memória - contém o endereço do dado a ser lido ou escrito na memória. RDMi n : registrador de dados da memória (entrada) - contém o dado a ser escrito na memória. RDMout: registrador de dados da memória (saída) - contém o dado lido da memória. Os sinais de controle significam: read: leitura da memória - o conteúdo da posição de memória endereçada por REM é copiada em RDMout. write: escrita na memória - a posição de memória endereçada por REM recebe o conteúdo de RDMin. Uma memória é caracterizada por vários parâmetros. Os mais importantes são: tamanho, velocidade e tecnologia. No nível de arquitetura, interessam: tamanho da palavra em bits e tamanho da memória em palavras. Estes tamanhos geralmente são indicados sob a forma de potências de dois. O tamanho da palavra determina o comprimento em bits do RDM (registrador de dados) e o tamanho da memória o comprimento em bits do REM (registrador de endereços). 3-6 3 .3 .2 Unidade operacional A unidade operacional, também chamada de bloco operacional, executa as transformações sobre dados especificadas pelas instruções de um computador. Compõe-se basicamente de uma unidade lógica e aritmética, de registradores de uso geral e específico e dos barramentos que interligam todos esses elementos. O número, tamanho e uso dos registradores e a quantidade e tipo de operações que a unidade lógica e aritmética realiza são alguns dos fatores que determinam o porte de um processador. Unidade lógica e aritmética (ULA) A ULA realiza operações aritméticas e operações lógicas sobre um ou mais operandos. Exemplos de operações realizadas pela ULA: soma de dois operandos; negação de um operando; inversão de um operando; AND (“E” lógico) de dois operandos; OR (“OU” lógico) de dois operandos; deslocamento
Compartilhar