Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Organização e Arquitetura de Computadores 
Aula 01 
 
Prof. Harlei Miguel de Arruda Leite 
Sumário 
• Organização e Arquitetura 
• Sistema de Numeração 
• Números de Base 
• Conversão Numérica 
• Números Binários Negativos 
• Números de Ponto Flutuante 
• Aritmética Binária 
• Overflow 
• Código de Caracteres 
• Exercícios 
• Homework 
• Referências 
Organização e Arquitetura 
• Introdução 
 
– Ao descrever computadores, normalmente é feita uma distinção entre 
arquitetura de computador e organização de computador. 
 
• Arquitetura de Computador 
 
– Refere-se aos atributos de um sistema visível a um programador. 
– Ex: Conjunto de instruções, mecanismos de E/S, endereçamento, etc. 
 
• Organização de Computador 
 
– Refere-se às unidades operacionais e sua interconexões 
– Ex: Detalhes do hardware, tecnologia de memória, interfaces, etc. 
Organização e Arquitetura 
• Para pensar... 
 
– Saber se um computador terá uma instrução de multiplicação é uma questão 
de arquitetura ou de organização? 
 
– Saber se iremos implementar esta instrução por meio de uma unidade de 
multiplicação especial ou por um mecanismo que faça uso repetido da 
unidade de adição do sistema é uma questão de arquitetura ou de 
organização? 
Organização e Arquitetura 
• Para pensar... 
 
– Saber se um computador terá uma instrução de multiplicação é uma questão 
de arquitetura ou de organização? 
• R: É uma questão de Arquitetura 
 
– Saber se iremos implementar esta instrução por meio de uma unidade de 
multiplicação especial ou por um mecanismo que faça uso repetido da 
unidade de adição do sistema é uma questão de arquitetura ou de 
organização? 
• R: É uma questão de Organização 
 
Organização e Arquitetura 
• Atualidade 
 
– Atualmente, muitos fabricantes de computador oferecem uma família de 
modelos de computador, todos com a mesma arquitetura, mas com 
diferenças na organização. 
 
– Consequentemente, os diferentes modelos na família têm diferentes 
características de preço e desempenho. 
 
– Uma arquitetura em particular pode se espalhar por muitos anos e abranger 
diversos modelos de computador diferentes, com sua organização variando 
conforme a mudança da tecnologia 
Organização e Arquitetura 
• Atualidade 
 
– Um exemplo proeminente desses dois fenômenos é a arquitetura IBM 
System/370, introduzida inicialmente em 1970 e que incluía diversos 
modelos. 
 
– O cliente com requisitos modernos poderia comprar um modelo mais barato, 
mais lento, e, se a demanda aumentasse, atualizar mais tarde para um 
modelo mais caro e mais rápido, sem ter que abandonar o software 
desenvolvido. 
 
Organização e Arquitetura 
• IBM System/370 
Sistema de Numeração 
• Introdução 
 
– A aritmética usada por computadores é um pouco diferente daquela utilizada 
pelas pessoas. A diferença mais importante é que computadores realizam 
operações com números cuja precisão é finita e fixa. 
 
• Números de precisão finita 
 
– Quando estamos efetuando aritmética, em geral, nem pensamos na questão 
de quantos dígitos decimais são necessários para representar um número. 
Os físicos podem calcular que existem 1078 elétrons no universo sem se 
preocupar com o fato de que são necessários 79 dígitos decimais para 
escrever esse número extenso. Nunca surge o problema do papel não ser 
grande o bastante para números de sete dígitos. 
Sistema de Numeração 
• Números de precisão finita 
 
– Com computadores, a quantidade de memória disponível para armazenar um 
número é fixada no momento em que o equipamento é projetado. A 
natureza finita do computador nos força a lidar somente com valores que 
podem ser representados em um número fixo de dígitos. Estes são chamados 
números de precisão finita. 
Sistema de Numeração 
• Números de precisão finita 
 
– Para estudar as propriedades dos números de precisão finita, vamos 
examinar o conjunto de inteiros positivos que podem ser representados por 
três dígitos decimais, sem qualquer ponto decimal ou sinal. Esse conjunto 
tem exatamente 1000 membros: 000, 001, ..., 999. Com essa restrição, é 
impossível expressar certos tipos de números, como 
 
1. Números maiores que 999 
2. Números negativos 
3. Frações 
4. Números irracionais 
5. Números complexos 
Sistema de Numeração 
• Números de precisão finita 
 
– Uma propriedade importante da aritmética no conjunto de todos os inteiros 
refere-se ao fechamento com respeito as operações de adição, subtração e 
multiplicação. 
 
– Para cada par de inteiros i e j, i + j, i – j e i x j também são inteiros. O conjunto 
de inteiros não é fechado quanto à divisão, porque existem valores de i e j 
para os quais i/j não pode ser expresso como inteiro (ex: 7/2). 
Sistema de Numeração 
• Números de precisão finita 
 
– Números de precisão finita não são fechados em relação a nenhuma dessas 
quatro operações básicas, como mostramos a seguir, usando números 
decimais de três dígitos como exemplo. 
 
– 600+600 = 1200 (muito grande) 
– 003-005 = -2 (negativo) 
– 050x050 = 2500 (muito grande) 
– 007/002 = 3.5 (não é um inteiro) 
Sistema de Numeração 
• Números de precisão finita 
 
– As violações podem ser divididas em três classes mutuamente exclusivas: 
 
1. Operações cujo resultado é maior que o maior número no conjunto 
2. Operações cujo resultado é menor que o menor número no conjunto 
3. Operações cujo resultado não é membro do conjunto 
Sistema de Numeração 
• Números de precisão finita 
 
– Como computadores têm memórias finitas e, portanto, devem 
necessariamente realizar aritmética com números de precisão finita, os 
resultados de certos cálculos serão, do ponto de vista da matemática clássica, 
errados. Alguns computadores têm hardware especial que detecta erros de 
excesso. 
Sistema de Numeração 
• Números de precisão finita 
 
– A álgebra de números de precisão finita é diferente da álgebra normal. Como 
exemplo, considere a lei associativa: 
 
a + (b - c) = (a + b) – c 
 
– Considerando a = 700, b = 400 e c = 300: 
 
700 + (400 – 300) = (700 + 400) – 300 
700 + 100 = 1100 – 300 
 
– Note que resulta em um excesso na aritmética finita de inteiros de três 
dígitos, que acarretará em um erro que invalidará a aritmética associativa. 
 
Sistema de Numeração 
• Curiosidade 
 
– Como representar números gigantes? 
 
• Criando sua própria estrutura 
• Usando uma biblioteca específica 
 
– Referências: 
 
• https://www.ime.usp.br/~walterfm/cursos/mac0122/2004/resumo1.pdf 
• http://www.ttmath.org/ 
 
Números de Base 
• Introdução 
 
– Um número decimal comum, com o qual todos estamos acostumados, 
consiste em uma sequência de dígitos decimais e, possivelmente, um ponto 
decimal (vírgula aritmética). 
 
 
 
dn ... d2 d1 d0 . d-1 d-2 d-3 ... d-k 
 
 
 
 
 
 
 
Posição 
de 100 
Posição 
de 10 
Posição 
de 1 
Posição 
de 0.1 
Posição 
de 0.01 
Posição 
de 0.001 
𝑁ú𝑚𝑒𝑟𝑜 = 𝑑𝑖 × 10
𝑖
𝑛
𝑖=−𝑘
 
Números de Base 
• Exemplo 
Números de Base 
• Introdução 
 
– Quando se trata de computadores, muitas vezes é conveniente usar outras 
bases que não sejam 10. As bases mais importantes são 2, 8 e 16, chamados 
de binários, octais e hexadecimais. 
 
– Um sistema numérico de base k requer k símbolos diferentes para 
representar os dígitos de 0 a k-1. Números decimais são formados partir de 
10 dígitos decimais. 
 
0 1 2 3 4 5 6 7 8 9 
 
– Números binários são construídos a partir de 2 dígitos binários 
 
0 1Números de Base 
• Introdução 
 
– Números hexadecimais são construídos com 16 dígitos. Assim, precisamos de 
seis novos símbolos. Por convenção, usamos as letras maiúsculas de A a F 
para os seis dígitos depois de 9. 
 
0 1 2 3 4 5 6 7 8 9 A B C D E F 
Conversão Numérica 
• Da base 10 para a base N 
 
– Basta fazer divisões sucessivas por N 
 
– Exemplo: Converter 1024(10) para binário (N=2) 
 
 
 
 
1024(10) = 10000000000(2) 
 
Quociente Resto 
1024 0 
512 0 
256 0 
128 0 
64 0 
32 0 
16 0 
8 0 
4 0 
2 0 
1 1 
Conversão Numérica 
• Da base N para a base 10 
 
– Basta fazer multiplicações sucessivas 
 
– Exemplo: Converter 1A2F(16) para decimal 
 
1 x 163 + A x 162 + 2 x 161 + F x 160 
1 x 163 + 10 x 162 + 2 x 161 + 15 x 160 
1 x 4096 + 10 x 256 + 2 x 16 + 15 x 1 
4096 + 2560 + 32 + 15 
1A2F(16) = 6703(10) 
 
 
 
Números Binários Negativos 
• Introdução 
 
– Quatro sistemas diferentes para representar números negativos já foram 
usados em computadores digitais: 
 
1. Magnitude com sinal 
2. Complemento de um 
3. Complemento de dois 
4. Excesso 
Números Binários Negativos 
• Magnitude com sinal 
 
– Nesse sistema, o bit da extrema esquerda é o bit de sinal (0 é + e 1 é -). 
 
– Desvantagem: Etapa extra para definir o sinal do resultado de uma operação 
aritmética. 
 
– Como representar o número zero? 
 
00000000 ou 10000000 (considerando 1 byte) 
 
– Exemplo de representação: 
 
-6 = 10000110 (considerando 1 byte) 
 
Números Binários Negativos 
• Complemento de um 
 
– Nesse sistema também tem um bit de sinal que é 0 para mais e 1 para 
menos. Para tornar um número negativo, substitua cada 1 por 0 e cada 0 por 
1. Isso vale também para o bit de sinal. O complemento de um é obsoleto. 
 
– Como representar o número zero? 
 
00000000 ou 11111111 (considerando 1 byte) 
 
– Exemplo de representação: 
 
– 7(10) = 0000111(2) 
– -7(10) = 11111000(2) 
Números Binários Negativos 
• Complemento de dois 
 
– Nesse sistema, também tem um bit que é 0 para mais e 1 para menos. Negar 
um número é um processo em duas etapas. Na primeira, cada 1 é substituído 
por 0 e cada 0 por 1, assim como no complemento de um. Na segunda, 1 é 
somado ao resultado. 
 
– A vantagem é que nesse sistema, só existe uma representação para o 
número 0 (00000000). A desvantagem é o fato de ser um código assimétrico, 
por exemplo, com oito bits em complemento de dois podemos representar 
os números decimais de -128 a +127. 
Números Binários Negativos 
• Complemento de dois 
 
– Exemplo de representação: 
 
– Para converter -7(10), primeiro descobrimos a representação binária de 7(10) 
 
7(10) = 00000111(2) 
 
– Assim como o complemento de um, iniciamos com 1 e invertemos os dígitos 
 
-7(10) = 11111000(2) 
 
Por fim, somamos 00000001(2) 
 
-7(10) = 11111001(2) 
Números Binários Negativos 
• Excesso 
 
– A notação por excesso 2m-1 para números de m bits, representa um número 
armazenando-o como a soma dele mesmo com 2m-1. 
 
– Exemplo: Para números de 8 bits, m = 8, o sistema é denominado excesso 
128 e um número é armazenado como seu verdadeiro valor mais 128. 
 
O número -3 se torna -3 + 128 = 125 = 01111101(2) 
 
– Os números de -128 a +128 mapeiam para 0 a 255, todos os quais podem ser 
expressos como um inteiro positivo de 8 bits. 
Números de Ponto Flutuante 
• Introdução 
 
– Até por volta de 1980, cada fabricante de computador tinha seu próprio 
formato de ponto flutuante. Não é preciso dizer que todos era diferentes e 
alguns efetuavam aritmética incorretamente. 
 
– No final da década de 1970, o IEEE instituiu um comitê para padronizar a 
aritmética de ponto flutuante. O trabalho levou ao IEEE Standard 754. A 
maioria das CPUs de hoje possuí instruções de ponto flutuante que 
obedecem ao padrão IEEE. 
 
– O padrão foi desenvolvido pelo professor de matemática de Universidade de 
Berkeley William Kahan. 
Números de Ponto Flutuante 
• Formato de ponto flutuante padrão IEEE 754 
 
(a) Precisão Simples (32 bits) 
 
 
 
 
 
(b) Precisão Dupla (64 bits) 
 
 
Expoente 
Sinal 
Mantissa 
1 bit 8 bits 23 bits 
Expoente 
Sinal 
Mantissa 
1 bit 11 bits 23 bits 
Números de Ponto Flutuante 
• Exemplo 
 
– Converter 25.5(10) para o padrão IEEE 754. 
 
– Primeira etapa: Representar o número na forma 1.### x 2### 
 
Isso é alcançado por meio de divisões ou multiplicações. Se utiliza 
multiplicações quando o número é < 1 e divisões quando o número é > 1. 
 
Nesta etapa, o sinal negativo do número, caso exista, deve ser ignorado. 
Números de Ponto Flutuante 
• Exemplo 
 
25.5 / 2 = 12.75 
12.75 / 2 = 6.375 
6.375 / 2 = 3.1875 
3.1875 / 2 = 1.59375 
 
Ao final desta etapa, podemos representar 25.5(10) da seguinte maneira 
 
1.59375 x 24 
Números de Ponto Flutuante 
• Exemplo 
 
– Segunda etapa: Calcular a mantissa com base na parte fracionária 
 
Esse processo se da sempre através de multiplicações sucessivas, até que o 
resultado seja 0, ou até um máximo de 23 multiplicações. 
 
No exemplo, a parte fracionária é 0. 59375, portanto 
 
0.59375 x 2 = 1.1875 
0.1875 x 2 = 0.375 
0.375 x 2 = 0.75 
0.75 x 2 = 1.5 
0.5 x 2 = 1.0 
0.0 x 2 = 0.0 (encerra o procedimento) 
Números de Ponto Flutuante 
• Exemplo 
 
Mantissa calculada = 100110 
 
Como a mantissa possuí somente 6 bits, completamos com 0 até completar 23 
bits. 
 
Mantissa: 10011000000000000000000 
Números de Ponto Flutuante 
• Exemplo 
 
– Terceira etapa: Coletaras informações necessárias para montar a 
representação no padrão IEEE 754. 
 
– Sinal: 0 para positivo e 1 para negativo 
 
No exemplo, o sinal é 0. 
 
– Expoente: 4 (calculado na primeira etapa) 
 
Porém, esse expoente deve ser acrescido de 127 (notação por excesso) 
 
– 4 + 127 = 131 = 10000011(2) 
Números de Ponto Flutuante 
• Exemplo 
 
– Mantissa: 10011000000000000000000 
 
– Quarta etapa: Montar a representação no padrão IEEE 754 
 
0 10000011 10011000000000000000000 
Expoente 
Sinal 
Mantissa 
1 bit 8 bits 23 bits 
Números de Ponto Flutuante 
• Converter um número no padrão IEEE 754 para decimal 
 
1 10000010 11010000000000000000000 
 
– Primeira etapa: Extrair os campos 
 
Sinal: 1 (1 é negativo e 0 positivo) 
Expoente: 10000010 (130 em decimal) 
Mantissa: 11010000000000000000000 
Números de Ponto Flutuante 
• Converter um número no padrão IEEE 754 para decimal 
 
– Segunda etapa: Calcular o expoente 
 
– O expoente foi acrescido de 127 por conta da notação por excesso. Portanto, 
devemos subtrair 127 do expoente. 
 
– Expoente = 130 – 127 = 3 
Números de Ponto Flutuante 
• Converter um número no padrão IEEE 754 para decimal 
 
– Terceira etapa: Calcular o valor decimal da mantissa 
 
Basta multiplicar cada bit da mantissa pela potência de 2 correspondente 
àquela posição e somar todos os resultados. Aqui todas as potências são 
negativas, pois estamos calculando uma fração e não um número inteiro. 
 
1 x 2-1 = 0.5 
1 x 2-2 = 0.25 
0 x 2-3 = 0.0 
1 x 2-4 = 0.0625 
0 x 2-5 = 0.0 
 
0.5 + 0.25 + 0.0625 = 0.8125 
Números de Ponto Flutuante 
• Converter um número no padrão IEEE 754 para decimal 
 
– Quarta etapa: Montar a representação decimal 
 
Basta juntar o sinal, o expoente e a mantissa, para montar o valor decimal na 
forma 1.### x 2###. 
 
1.8125 x 23 = -14.5 
Aritmética Binária 
• Adição 
 
– A tabela deadição para números binários é apresentada abaixo 
Adendo 0 0 1 1 
Augendo +0 +1 +0 +1 
Soma 0 1 1 0 
Vai-um 0 0 0 1 
Aritmética Binária 
• Adição 
 
– Dois números binários podem ser somados, iniciando no bit da extrema 
direita e somando-se os bits correspondentes nas parcelas. 
 
– Se for gerado um vai-um, ele é transportado uma posição à esquerda, assim 
como na aritmética decimal. 
Aritmética Binária 
• Adição 
 
– Aritmética do complemento de um 
 
Nesta notação, um vai-um gerado pela adição dos bits da extrema esquerda é 
somado ao bit da extrema direita. 
 
00001010 
11111100 
________ 
1 00000110 
 
Vai um 1 
 
00000111 
Aritmética Binária 
• Adição 
 
– Aritmética do complemento de dois 
 
Nesta notação, um vai-um gerado pela adição dos bits da extrema esquerda é 
simplesmente descartado. 
 
00001010 
11111101 
_________ 
1 00000111 
 
Descartado 
Aritmética Binária 
• Curiosidade 
 
– Em ambas as aritméticas, pode ocorrer excesso. 
 
– A maioria dos computadores preserva o vai-um do bit de sinal. 
Overflow 
• Suponha que dois números binários sejam representados utilizando 
5 bits com complemento de dois. 
 
– Suponha também que a soma destes números também deva ser 
representada por 5 bits em complemento de dois. 
 
Overflow 
• Discussão 
 
– No exemplo, a resposta deveria ser =17, mas a magnitude 17 requer mais 
que quatro bits para representá-la. 
 
– Em uma operação, o resultado pode ser maior do que pode ser mantido na 
quantidade disponível de bits. 
 
• Overflow (transbordo, estouro) 
 
– A Unidade Lógica Aritmética precisa sinalizar a ocorrência de um overflow 
pra que não haja qualquer tentativa de usar o resultado. 
Código de Caracteres 
• Introdução 
 
– Cada computador tem um conjunto de caracteres que ele usa. O conjunto 
mínimo contém as 26 letras maiúsculas, as 26 letras minúsculas, os 
algarismos de 0 a 9 e um conjunto de símbolos especiais, como espaço, sinal 
de menos, vírgula e retorno ao início da linha. 
 
– Para transferir esses caracteres para o computador, um número é designado 
a cada um, por exemplo, a = 1, b = 2, ... Z = 26, + = 27, - = 28, etc. 
 
– O mapeamento de caracteres para números inteiros é denominado código de 
caracteres. É essencial que computadores que se comunicam usem o mesmo 
código ou não conseguirão se entender. 
 
– Por essa razão, foram desenvolvidos padrões. 
Código de Caracteres 
• ASCII 
 
– Um código de ampla utilização é denominado ASCII (American Standard for 
Information Interchange – Código Padrão Americano para Troca de 
Informações). 
 
– Cada caractere ASCII tem 7 bits, o que permite 128 caracteres no total. 
Porém, como os computadores são orientados a byte, cada caractere ASCII é 
armazenado em um byte separado. 
Código de Caracteres 
• ASCII 
 
Código de Caracteres 
• Unicode 
 
– O código ASCII é bom para a língua inglesa, mas não tão bom para outros 
idiomas. O francês precisa de acentos (por exemplo, système); o alemão 
precisa de sinais diacríticos (por exemplo, für) e assim por diante. 
 
– Um grupo de empresas de computadores resolveu esse problema formando 
um consórcio para criar um novo sistema, denominado Unicode, e 
transformando-o em um padrão internacional (IS 10646). 
 
– A ideia que fundamenta o Unicode é designar a cada caractere e símbolo um 
valor único de 16 bits, denominado ponto de código. Com símbolos de 16 
bits, o Unicode tem 65.536 pontos de código. 
Código de Caracteres 
• UTF-8 
 
– Embora melhor que ASCII, o Unicode por fim esgotou os pontos de código e 
também requer 16 bits por caractere para representar o texto ASCII puro, o 
que é um desperdício. 
 
– O UTF-8 foi desenvolvido para resolver essas questões. Ele é denominado 
Formato de Transformação UTF-8 UCS em que UCS significa Universal 
Character Set (Conjunto de Caracteres Universal), que é Unicode na essência. 
 
– Códigos UTF-8 têm tamanho variável, de 1 a 4 bytes, e podem codificar cerca 
de dois bilhões de caracteres. Ele é o conjunto de caracteres dominante em 
uso na Web. 
Exercícios 
• Converta os seguintes números para binário, octal e hexadecimal. 
Posteriormente, retornar para decimal: 
(a) 1984(10) 
(b) 4000(10) 
(c) 8192(10) 
 
• Converta o seguinte número decimal para o padrão IEEE 754 
(a) 0.203125(10) 
 
• Converta o seguinte no padrão IEEE 754 para decimal 
(a) 0 10000100 01101000000000000000000 
 
 
 
Referências 
• Stallings, W. Arquitetura e Organização de Computadores. 8ª 
Edição, Editora Pearson, 2010. 
 
• Tanenbaum, A. S.; Austin, T. Organização Estruturada de 
Computadores. 6ª Edição, Editora Pearson, 2013.

Mais conteúdos dessa disciplina