Você está na página 1de 157

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

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.

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

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

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ética em 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.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

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

7-8

7-4

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

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 de programação

Linguagens

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

Capítulo

UM

Bases Numéricas

1.1 Introdução

Quando o homem aprendeu a contar, ele foi obrigado a desenvolver símbolos que 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):

seria um “sistema unário” (com um único símbolo): Os primeiros algarismos encontrados consistiam em marcas

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):

seguintes símbolos (da esquerda para direita, 1234567890): Este sistema começou a ser utilizado na Europa no

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.

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 (B2), x i representam os algarismos (0x i <B), e n representa o número de posições utilizadas. Com B=10 tem-se o sistema decimal.

a

n

= Σ (x i .B i )

i=–m

O algarismo x i tem peso B i , 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 (B 0 =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 = Σ (x i .B i )

i=0

ou, por extenso, expandindo-se o somatório:

a =x n-1 .B n-1 +x n-2 .B n-2

.

.

+x 2 .B 2 +x 1 .B 1 +x 0 .B 0

ou ainda, simplificando-se a expressão:

a =x n-1 .B n-1 +x n-2 .B n-2

+x 2 .B 2 +x 1 .B+x 0

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,

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:

110001 2 =1.2

5

+1.2 4 +0.2 3 +0.2 2 +0.2 1 +1.2 0

=32+16+0+0+0+1=49 10

110001 2 =1.2 5 +1.2 4 +0.2 3 +0.2 2 +0.2 1 +1.2 0 =40 8 +20 8 +0+0+0+1 8 =61 8

Nos exemplos acima, simplesmente aplicou-se a fórmula:

a = x n-1 .B n-1 +x n-2 .B n-2

+x 2 .B 2 +x 1 .B+x 0

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 =x n-1 .B n-1 +x n-2 .B n-2

+x 2 .B 2 +x 1 .B+x 0

a conversão para determinação dos coeficientes x i é iniciada da esquerda (x n-1 ) para a direita (até x 0 ). Inicia-se determinando os valores de n (a quantidade de dígitos necessária) e de x n-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 x n-1 .B n-1 que seja menor (ou igual) que a. Este coeficiente x n-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 – x n-1 .B n-1 = x n-2 .B n-2

+x 2 .B 2 +x 1 .B+x 0

Para determinar-se o algarismo seguinte à direita (x n-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 B i , utiliza-se agora B i-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 x i é zero.

681-1.2 9 =681-512=169

169-1.2 7 =169-128=41

41-1.2 5 =41-32=9

9-1.2

3

=9-8=1

=1-0.2=1

1-0.2

1

169-0.2 8 =169-0.256=169 41-0.2 6 =41-0.64=41

9-0.2 4 =9-0.16=9

1-0.2

1-1.2

2

0

=1-0.4=1

=1-1=0

Ou seja, o número final, em binário, é 1010101001.

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.2 9 =680-512=168 168-0.2 8 =168-0.256=168

168-1.2 7 =168-128=40

40-1.2 5 =40-32=8 8-0.2 4 =8-0.16=8 8-1.2 3 =8-8=0

40-0.2 6 =40-0.64=40

Os coeficientes restantes (x 2 , x 1 e x 0 ) 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.2

2 =6,125-4=2,125

2,125-1.2

1 =2,125-2=0,125

0,125-0.2

0 =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.8

0,0625-4.8 -2 =0,0625-0,0625=0

0 =6,8125-6=0,8125

0,8125-6.8 -1 =0,8125-0,7500=0,0625

Ou seja, 6,8125 10 =6,64 8 . 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 algarismo mais 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=(x n-1 .B n-1 +x n-2 .B n-2

ou seja

a /B=x n-1 .B n-2 +x n-2 .B n-3

+x 2 .B 2 +x 1 .B+x 0 )/B

+x 2 .B 1 +x 1 , com resto igual a x 0

A divisão seguinte por B produz como resto x 1 , e assim sucessivamente até x n-1 .

53÷2=26, resta 1 13÷2=6, resta 1 3÷2=1, resta 1

26÷2=13, resta 0 6÷2=3, resta 0 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).

Exemplo:

Parte inteira = 1 Parte inteira = 1 Parte inteira = 0 Parte inteira = 1

0,25 . 2 = 0,5 Parte inteira = 0

0,5 . 2 = 1,0

Parte inteira = 1

0,828125 . 2 = 1,65625 0,65625 . 2 = 1,3125 0,3125 . 2 = 0,625 0,625 . 2 = 1,25

Fração = 0,1 Fração = 0,11 Fração = 0,110 Fração = 0,1101 Fração = 0,11010 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=B2 m ; 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 7 8 = 101 001 111 2

7

0 C 16 = 0111 0000 1100 2

• 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,01101 2 = 001 110 , 011 010 = 1 6 , 3 2 8 1110,01101 2 = 1110 , 0110 1000 = E , 6 8 16

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

1. Converter para a base decimal os seguintes números:

a) 101010 2

b)1010 3

c) 1021 4

d) 1025

e) 2165 8

f) 1FA2 16

g) E1A 16

Exercícios propostos

6

h)

707 8

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

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)

101100011010 2 para a base octal

b)

101100011010 2 para a base hexadecimal

c)

00101100101 2 para a base octal

d)

00101100101 2 para a base hexadecimal

e)

347 8 para a base binária

f)

7241 8 para a base binária

g)

3AF 16 para a base binária

h)

7E4B 16 para a base binária

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 = Σ (x i .B i )

i=0

será representada por a=Σ n-1 x i B i , 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 B n combi- nações distintas, ou seja, B n 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

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 (10 3 ) mas sim 1024 (2 10 ). 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

 

00

0

01

1

10

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

   

00000

   

00110

01010

01101

10010

10101

11001

11111

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.1

Números inteiros positivos

Considerando-se somente a representação de números inteiros positivos, com n dígitos pode-se representar B n números, dispostos no intervalo fechado entre zero (o menor) e B n –1 (o maior).

Faixa de representação: [ 0 , B n –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 (000 3 ) a 26 (222 3 ); para 4 dígitos binários tem-se 2 4 =16 números, desde zero (0000 2 ) até 15 (1111 2 ); para 8 dígitos binários tem-se 2 8 =256 números, desde zero (00000000 2 ) até 255 (11111111 2 ); 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 Σ n-1 x i B i , 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: [ –(B n-1 –1) , +(B n-1 –1) ] ou [ –(B n-1 –1) , (B n-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 B n combinações possíveis usam-se somente 2.B n-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.2 n-1 –1, ou seja, 2 n –1 (isto é, B n –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.

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)=Σ n-2 x i B i . 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), + se M(a)<M(c), –

M(a)–M(c)

7

+ -5 = 2

M(c)–M(a)

5

+ -7 = -2

+

se M(a)>M(c), – se M(a)M(c), +

M(a)–M(c)

-7 + 5 = -2 -5 + 7 = 2

M(c)–M(a)

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, B n –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 x i é complementado individualmente pela fórmula B–1–x i . A tabela a seguir ilustra o cálculo do complemento para diversas bases.

Algarismo

B=2

B=3

B=4

B=8

B=9

B=10

     

0123789

     
     

1012678

     
     

2-01567

     

3-

   

-0456

     

4-

 

-

   

-345

 

5-

 

-

   

-234

 

6-

 

-

   

-123

 

7-

 

-

   

-012

 
 

8-

-

-

 

-01

 
     

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:

Faixa de representação, para B ímpar:

[ –(B n /2–1) , +(B n /2–1) ]

[ –(B n –3)/2 , +(B n –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 para a 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).

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=Σ n-1 x i B i , se aB n /2, então este número em complemento de (B–1) é negativo. Se a<B n /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 3 3 = 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 4 3 = 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)=Σ n-1 x i B i . 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)=Σ n-1 (B-1-x i )B i = Σ n-1 (B-1)B i Σ n-1 x i B i = B n –1–Σ n-1 x i B i =B n –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 3 3 –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

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=B n –1–a. Note-se que –(–(a)) = –(B n –1–a) = B n –1–(B n –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 B n -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 B n –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 B n 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 B n 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 B n , basta eliminar-se este “vai-um”. E para eliminar o termo (–1), adiciona-se um ao resultado.

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)

B n -1-M(a) + B n -1-M(c)

B

n -1+B n -1-(M(a)+M(c))

B n -1 + B n -1 - M(d) B n -1 + d (*)

+

se M(a)M(c), +

M(a)–M(c)

M(a) + B n -1-M(c) B n -1 + M(a)-M(c) B n -1 + d (*) M(a) + B n -1-M(c)

se M(a)<M(c), –

M(c)–M(a)

B n -1 - (M(c)-M(a)) B n - 1 - M(d)

d

+

se M(a)>M(c), –

M(a)–M(c)

B n -1 - M(a) + M(c)

B n -1 - (M(a)-M(c)) B n -1 - M(d)

d

se M(a)M(c), +

M(c)–M(a)

B n -1 - M(a) + M(c) B n -1 + (M(c)-M(a)) B n -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.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 B n –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:

Faixa de representação, para B ímpar:

[ –(B n /2) , +(B n /2–1) ]

[ –(B n –1)/2 , +(B n –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.

Base

Num.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=Σ n-1 x i B i , se aB n /2, então este número em complemento de B é negativo. Se a<B n /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.

determinação da magnitude do número. Se o número a for positivo, então sua magnitude é dada por M(a)=Σ n-1 x i B i . Se o número a for negativo, para obter seu valor deve-se calcular o complemento de B do número:

M(a)=B n –a = B n Σ n-1 x i B i

Note-se que B n -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, (B n –1–a)+1 = B n –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 B n -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

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 B n . 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)

B

n -M(a) + B n -M(c)

B

n +B n - (M(a)+M(c))

B

n + B n - M(d)

B

n + d (*)

+

se M(a)M(c), +

M(a)–M(c)

M(a) + B n -M(c)

B

n + M(a)-M(c)

B

n + d (*)

se M(a)<M(c), –

M(c)–M(a)

M(a) + B n -M(c)

B

n - (M(c)-M(a))

B

n - M(d)

d

+

se M(a)>M(c), –

M(a)–M(c)

B

n - M(a) + M(c)

B

n - (M(a)-M(c))

B

n - M(d)

d

se M(a)M(c), +

M(c)–M(a)

B

n - M(a) + M(c)

B

n + (M(c)-M(a))

B

n + 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 B n , 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.

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

1111

0010

2222

0011

3333

0100

4444

0101

5555

0110

6666

0111

7777

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

1110

14 –6

–1

–2

1111

15 –7

–0

–1

Tabela 2.16 - Interpretação de números binários

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

 

00

0

0

1

1 e “pede-um”

10

1

11

0

Tabela 2.17 - Tabela verdade de um meio-subtrator

a

c

emprestou um

d=a–c

pede um

   

00000

   

00111

01011

01101

10010

10100

11000

11111

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

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 01101101 2 ? 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.

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 –47 10 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;

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

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:

(b) 010101 e 010110

(c) 110101 e 110110

(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 de dois. 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.

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,

mecanismo para multiplicação e divisão

multipl., divisão

1827

Babbage:

avaliação polinomial por diferenças finitas