Sei sulla pagina 1di 157

Introduo Arquitetura

de Computadores
Representao de Dados
Arquitetura e Organizao
Noes de Software Bsico

Notas de aula
Raul Fernando Weber

Quarta verso - Maro de 1998


Material para uso exclusivo em INF01 107
Departamento de Informtica Aplicada
Instituto de Informtica
UFRGS

ii

PREFCIO

Essas notas de aula so uma compilao dos tpicos desenvolvidos na


disciplina de Introduo Arquitetura de Computadores. Este material foi
desenvolvido para suprir a falta de um livro-texto que contivesse todos os
itens que so abordados na disciplina.
As principais reas da disciplina so cobertas. Os captulos 1 e 2 tratam da
representao de dados, cobrindo sistemas de numerao e representao de
dados numricos em um computador. Os captulos 3 e 4 enfocam as noes
bsicas sobre arquiteturas de computadores, apresentando o modelo de von
Neumann e exercitando os principais conceitos atravs de um computador
hipottico, denominado de NEANDER. O captulo 5 introduz um segundo
computador hipottico, o AHMES, dotado de uma maior nmero de
instrues a fim de exercitar os algoritmos de multiplicao e diviso vistos
no captulo 6. Os captulos 7 e 8 cobrem as notaes aritmticas de ponto
fixo e ponto flutuante, assim como sistemas de codificao. O captulo 9
apresenta os blocos bsicos da organizao de um computador, e o captulo
10 ilustra a organizao do NEANDER. Os captulos 11 e 12 fornecem as
principais noes e a nomenclatura bsica da rea de entrada e sada e
software bsico (compiladores, montadores e sistemas operacionais).
Enquanto a parte concernente aritmtica binria (captulos 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 esto longe de estarem completas.
Estas demais reas so posteriormente desenvolvidas em outras disciplinas
do Instituto de Informtica.
iii

SOBRE O AUTOR

Raul Fernando Weber


Doutor em Informtica pela Universidade de Karlsruhe (1986), Mestre em Cincia da
Computao, UFRGS (1980). Engenheiro Eletrnica, UFRGS (1976). Atualmente
professor do Instituto de Informtica e do Curso de Ps-Graduao em Cincia da
Computao, UFRGS. reas de atuao: tolerncia a falhas, segurana em sistemas de
computao e projeto automatizado de sistemas digitais.

Colaboradores
Taisy Silva Weber
Carlos Arthur Lang Lisboa
Ingrid E.S. Jansch-Porto
iv

SUMRIO

1 Bases Numricas
1.1 Introduo........................................................................................1-1
1.2 Representao de nmeros.....................................................................1-2
1.3 Transformao entre bases.....................................................................1-2
1.3.1 Mtodo polinomial............................................................................1-3
1.3.2 Mtodo de subtraes ........................................................................1-3
1.3.3 Mtodo das divises..........................................................................1-4
1.3.4 Mtodo da substituio direta................................................................1-5
1.4 Exerccios propostos............................................................................1-5
2 Sistemas de numerao em computao
2.1 Introduo........................................................................................2-1
2.2 Soma de nmeros binrios.....................................................................2-2
2.3 Representao de nmeros.....................................................................2-2
2.3.1 Nmeros inteiros positivos..................................................................2-3
2.3.2 Nmeros com sinal: representao em sinal-magnitude..................................2-3
2.3.3 Nmeros com sinal: representao em complemento de (B1)..........................2-4
2.3.4 Nmeros com sinal: representao em complemento de B...............................2-9
2.4 Comparao entre os mtodos...............................................................2-12
2.5 Subtrao.......................................................................................2-13
2.6 Estouro de representao.....................................................................2-13
2.7 Exerccios propostos..........................................................................2-14
3 Componentes do computador e modelo de von Neumann
3.1 Breve histrico...................................................................................3-1
3.2 Princpios bsicos...............................................................................3-3
3.3 Elementos funcionais bsicos..................................................................3-4
3.3.1 Memria........................................................................................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 instrues e modos de endereamento ......................................3-9
3.3.6 Ciclo de busca-decodificao-execuo de instrues....................................3-9
3.3.7 Programao de um processador..........................................................3-10
3.4 Um computador de primeira gerao: o EDVAC..........................................3-10
3.5 Modelo de von Neumann: o computador IAS .............................................3-15
3.5.1 Organizao da UCP .......................................................................3-15
3.5.2 Conjunto de instrues.....................................................................3-15
3.6 Arquiteturas de 4, 3, 2, 1 e 0 endereos....................................................3-17
3.6.1 Arquitetura de 4 endereos.................................................................3-17
3.6.2 Arquitetura de 3 endereos.................................................................3-18
3.6.3 Arquitetura de 2 endereos.................................................................3-18
3.6.4 Arquitetura de um endereo................................................................3-19
3.6.5 Arquitetura de zero endereos.............................................................3-20
4 Computador hipottico NEANDER
4.1 Caractersticas....................................................................................4-1
4.2 Modos de endereamento.......................................................................4-1
4.3 Conjunto de instrues .........................................................................4-2
4.4 Cdigos de condio............................................................................4-2
v

4.5 Formato das instrues.........................................................................4-3


4.6 Exemplo de programao.......................................................................4-3
4.7 Concluso........................................................................................4-4
4.8 Exerccios de programao usando o NEANDER...........................................4-4
5 Computador hipottico AHMES
5.1 Caractersticas....................................................................................5-1
5.2 Modos de endereamento.......................................................................5-1
5.3 Conjunto de instrues .........................................................................5-2
5.4 Cdigos de condio............................................................................5-3
5.5 Manipulao aritmtica..........................................................................5-4
5.5.1 Aritmtica em complemento de dois........................................................5-4
5.5.2 Aritmtica de inteiros positivos..............................................................5-6
5.5.3 Aritmtica em complemento de um .........................................................5-6
5.5.4 Aritmtica em sinal/magnitude...............................................................5-7
6 Multiplicao e diviso
6.1 Multiplicao binria (nmeros inteiros positivos)..........................................6-1
6.2 Multiplicao binria (nmeros em complemento de dois).................................6-7
6.3 Diviso binria (nmeros inteiros positivos).................................................6-8
6.4 Diviso binria (nmeros em complemento de dois, positivos) .........................6-14
6.5 Diviso binria (nmeros em complemento de dois, positivos ou negativos)..........6-18
6.6 Exerccios resolvidos .........................................................................6-19
7 Nmeros em ponto fixo e ponto flutuante
7.1 Nmeros em ponto fixo ........................................................................7-1
7.2 Soma e subtrao em ponto fixo...............................................................7-2
7.3 Multiplicao em ponto fixo....................................................................7-3
7.4 Diviso em ponto fixo ..........................................................................7-4
7.5 Nmeros em ponto flutuante...................................................................7-4
7.6 Formatos de nmeros em ponto flutuante....................................................7-6
7.7 Soma e subtrao de nmeros em ponto flutuante...........................................7-7
7.8 Multiplicao de nmeros em ponto flutuante................................................7-7
7.9 Diviso de nmeros em ponto flutuante ......................................................7-8
8 Codificaes BCD, Numrica e Alfanumrica
8.1 Nmeros e Aritmtica BCD....................................................................8-1
8.2 Codificao.......................................................................................8-3
8.3 Cdigos BCD (ou cdigos de 4 bits ponderados)...........................................8-3
8.4 Cdigos de cinco bits ponderados.............................................................8-5
8.5 Cdigos de sete bits ponderados ..............................................................8-5
8.6 Cdigos Gray (ou cdigos cclicos)...........................................................8-6
8.7 Cdigos de deteco e correo de erros .....................................................8-8
8.8 Cdigos m-de-n .................................................................................8-9
8.9 Cdigos de paridade ............................................................................8-9
8.10 Cdigos de Hamming.........................................................................8-9
8.11 Cdigos alfabticos (ou cdigos alfanumricos).........................................8-11
9 Elementos bsicos de organizao
9.1 Introduo........................................................................................9-1
9.2 Portas lgicas e equaes booleanas..........................................................9-1
9.3 Equivalncia de portas lgicas.................................................................9-5
9.4 Circuitos combinacionais.......................................................................9-7
9.5 Circuitos sequenciais..........................................................................9-10
9.6 Unidade Aritmtica e Lgica.................................................................9-15
9.7 Memria........................................................................................9-18
10 Organizao do Neander
10.1 Elementos necessrios.......................................................................10-1
vi

10.2 Fluxo de dados...............................................................................10-1


10.3 Sinais de controle............................................................................10-7
11 Entrada e sada
11.1 Introduo ....................................................................................11-1
11.2 Dispositivos perifricos.....................................................................11-2
11.3 Memria secundria .........................................................................11-2
11.4 Comunicao com outras mquinas .......................................................11-2
11.5 Sistemas de E/S..............................................................................11-3
11.5.1 Entrada e sada programada..............................................................11-3
11.5.2 Acesso direto memria..................................................................11-5
11.5.3 Interrupo.................................................................................11-5
11.5.4 Informaes complementares............................................................11-5
12 Software bsico
12.1 Introduo ....................................................................................12-1
12.2 Linguagens de programao................................................................12-1
12.3 Exemplo com NEANDER..................................................................12-2
12.4 Programas a nvel de sistema...............................................................12-5
12.5 Interfaces entre hardware e software ......................................................12-7
12.6 Sistemas operacionais.......................................................................12-8
12.7 Funes bsicas dos sistemas operacionais..............................................12-11
12.8 Processos e escalonamento................................................................12-12
12.9 Carga do sistema (inicializao da mquina).............................................12-13
12.10 Multiprogramao.........................................................................12-13
12.11 Multiprocessamento.......................................................................12-15
12.12 Exemplos de sistemas operacionais.....................................................12-15
12.13 Redes de computadores...................................................................12-16
Bibliografia
Apndice: Utilizao dos simuladores e depuradores
A.1 Simulador.......................................................................................A-1
A.2 Formato da tela.................................................................................A-1
A.3 Entrada numrica...............................................................................A-2
A.4 Comandos de operao........................................................................A-2
A.4.1 Hexadecimal x decimal .....................................................................A-3
A.4.2 Visualizao Simblica .....................................................................A-3
A.4.3 Editando um programa na memria.......................................................A-3
A.4.4 Inspecionando a memria ..................................................................A-4
A.4.5 Imprimindo pores da memria..........................................................A-4
A.4.6 Zerando uma rea de memria.............................................................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

vii

Apndice
UM
Utilizao dos simuladores e depuradores

As caractersticas e comandos de depurao aqui apresentadas so vlidas para os


simuladores dos pseudo-computadores Neander e Ahmes, estudados nesta disciplina. Estes
comandos sero vlidos tambm para outras mquinas utilizadas na disciplina subseqente
de Arquitetura e Organizao de Computadores I. Estes simuladores foram desenvolvidos
para computadores PC e compatveis, e permitem a execuo e depurao de programas em
linguagem de mquina escritos para os computadores NEANDER e AHMES. Os
simuladores desenvolvidos incorporam grande parte das funes encontradas em
depuradores comerciais, tais como:
edio de memria,
execuo passo a passo,
insero de pontos de parada (break-points),
janela de memria e
visualizao do contedo dos registradores.
Exerccios usando os simuladores visam principalmente familiarizar o usurio com os
conceitos bsicos de arquitetura de computadores, atravs de programao em linguagem de
mquina e simblica, e com as tcnicas de depurao de tais programas.
A.1 Simulador
Os simuladores existem atualemnte em duas verses: para DOS e para Windows. Embora
estas duas verses sejam funcionalemnte equivalentes, recomenda-se fortemente o uso da
verso Windows, pois a verso DOS no ser mais atualizada.
Aps carregado o simulador mostrada a tela de trabalho. Preste bastante ateno a ela. A
tela de trabalho formada por campos de edio, campos de informao esttica (cujo
contedo no se altera) e campos de informao dinmica (cujo contedo se altera em
resposta a uma ao do usurio).
A.2 Formato da tela
Os elementos na tela do simulador so os seguintes:
Janela de Dados (Memria)
mostra o contedo de 16 posies da memria, interpretadas como dados, e permite
eventualmente alterar tais valores.
Registradores
para o computador NEANDER mostrado o contedo do acumulador (AC), do
registrador de status (bits N e Z), do apontador de instrues (PC) e do registrador de
instrues (RI). Para o AHMES apresenta-se a mesma informao, sendo a nica
diferena o maior nmero de bits do registrador de status (bits N, Z, C, V e B). Os
demais computadores possuem outros conjuntos de registradores.
A-1

Janela de Programa (Memria)


mostra o contedo de 16 posies da memria, interpretadas como programa, e permite
eventualmente alterar tais valores.
Break-point
um ponto qualquer do programa, escolhido pelo usurio como ponto de parada (o
simulador para no endereo indicado, sem executar a instruo apontada). O valor do
break-point inicializado com o endereo superior de memria (255 decimal ou FF
hexa).
Tabela de cdigos de instruo
para ajudar a quem possui memria voltil, mostra os mnemnicos e os cdigos das
instrues.
Menu de comandos
mostra os comandos aceitos pelo simulador/depurador. O caractere sublinhado em cada
comando pode ser usado para ativao via teclado.
Os campos listados abaixo so de informao esttica:
- tabela de cdigos de instruo (pode ser ativada ou apagada pela tecla F1)
- menu de comandos
Os campos a seguir so de informao dinmica:
- registradores
- break-point
- linha de mensagens
Os demais so campos de edio:
- janela de dados
- janela de programa
A.3 Entrada numrica
Entradas numricas so necessrias em duas situaes distintas: para fornecer um endereo
solicitado pelo simulador ou para editar posies de memria. Na digitao de valores
numricos, valem as seguintes regras:
valores maiores que 25510 (decimal) e FF16 (hexadecimal) no so aceitos,
valores negativos no so aceitos (devem ser entrados em complemento de dois)
as teclas de edio so vlidas para alteraes e correes
a tecla ENTER termina a entrada do nmero.
Quando necessria a entrada de um endereo, o simulador fornece um valor padro, de
acordo com a situao atual. Para aceitar este valor, basta digitar ENTER . Caso contrrio, o
incio da digitao de um novo nmero anula o valor padro. Durante a entrada de valores na
memria, a utilizao da tecla ENTER incrementa automaticamente o endereo, ou seja,
termina a entrada do nmero e inicia a edio do prximo endereo.
A.4 Comandos de operao
Os comandos que permitem editar e depurar programas usando os simuladores so
apresentados nas prximas sees.

A-2

A . 4 . 1 Hexadecimal x decimal
Todos os valores numricos (endereos, cdigos de instrues, dados) podem ser
representados tanto em hexadecimal como em decimal. O simulador comea sempre a operar
em hexadecimal. Voc pode escolher a forma que melhor lhe convm, atravs dos seguintes
comandos:
Comando Decimal ou Icone 0..9
todos os valores numricos aceitos e mostrados pelo simulador so decimais.
Comando Hexadecimal ou Icone 0..F
todos os valores numricos aceitos e mostrados pelo simulador so hexadecimais.
A . 4 . 2 Visualizao Simblica
A Janela de Programa possui uma coluna que permite visualizar as instrues em modo
simblico, ou seja, em uma interpretao a nvel de linguagem assembler. Note-se que o
cdigo da instruo desmontado, sendo apresentado na forma de mnemnico, mas
endereos e operandos so somente visualizados na forma numrica, em decimal ou
hexadecimal (dependendo da base escolhida).
A visualizao inicia no endereo inicial da janela, independente do fato deste endereo ser
realmente o incio de uma instruo ou no. Por exemplo, considerem-se as duas janelas
abaixo (mostradas somente com 10 posies, em decimal):
Endereo
0
1
2
3
4
5
6
7
8
9
10

Dado
32
128
48
129
48
130
16
128
240
0
0

Simblico
LDA 128
ADD 129
ADD 130
STA 128
HLT
NOP
NOP

Endereo
1
2
3
4
5
6
7
8
9
10
11

Dado
128
48
129
48
130
16
128
240
0
0
0

Simblico
JMP 48
JMP 48
JMP 16
JMP 240
NOP
NOP
NOP

Na janela da esquerda, o endereo inicial zero, e tem-se um programa que soma trs
posies. Ao deslocar-se esta janela de uma posio (com a seta para baixo), tem-se a janela
da direita, cujo contedo o mesmo, mas foi interpretado de forma diferente. Esta
caracterstica no se constitui propriamente um erro, mas tpica da arquitetura de von
Neuman, que permite uma completa liberdade no posicionamento de dados de instrues, e
inclusive no incio das instrues. Um computador deste tipo executa automaticamente as
instrues a partir do endereo apontado pelo PC. Cabe ao programador (ou ao sistema
operacional) garantir que o programa inicie em um endereo coerente.
Caso entretanto se deseje iniciar a interpretao simblica sempre no incio do programa
(endereo zero) e no no incio da janela de programa, pode-se utilizar para isto o comando
Mnemnicos relativos, ou a tecla F2.
A . 4 . 3 Editando um programa na memria
Para alterar o contedo da memria, use os comandos de edio, vlidos tanto para a janela
de dados como para a janela de programa. Ambas apresentam um campo de edio, que
permite alterar um byte de cada vez.

A-3

A escolha de uma das duas janelas para edio feita com o mouse , e a movimentao
dentro da janela tambm. Uma vez ativada uma janela, algumas teclas tambm podem ser
usadas para movimentao:
Tecla
seta para baixo ou enter
seta para cima
page up
page down

Significado
posio posterior de memria
posio anterior de memria
volta 16 posies
avana 16 posies

Tabela A.1 - Movimento do cursor na janela de memria durante edio


As duas janelas podem ter seu tamanho redimensionado, para permitir a visualizao de mais
de 16 posies.
A . 4 . 4 Inspecionando a memria
O comando Ir para permite o deslocamento rpido para qualquer posio da janela de
programa.
A . 4 . 5 Imprimindo pores da memria
O comando Salver Texto permite que trechos de programas possam ser transcritos para um
outro arquivo, para fins de documentao. O comando de impresso no envia os dados
diretamente para um impressora, mas sim armazena toda a informao que se deseja imprimir
em um arquivo, a fim de que o usurio complete esta informao com comentrios e outros
dados.
O formato da impresso segue a base atualmente sendo utilizada (decimal ou hexadecimal),
ou seja, o formato segue exatamente aquele da Janela de Programa.
A . 4 . 6 Zerando uma rea de memria
Uma determinada rea de memria pode ser zerada usando o comando Zerar Memria.
O simulador solicita o endereo inicial e o endereo final da rea de memria a ser zerada.
A . 4 . 7 Movendo blocos
Blocos podem ser movidos na memria atravs do comando Copiar Memria.
O simulador solicita o endereo inicial e o endereo final da rea de memria a ser movida e o
endereo inicial da rea de destino. Fornea-os. O bloco sempre deslocado de forma a
manter a sua integridade na posio de destino. Assim, por exemplo, pode-se mover um
bloco que inicie no endereo 10 e termine no endereo 15 para o endereo de destino 11.
Com isto, as posies 11 a 16 recebero os contedos originais das posies 10 a 15.
Observao: o bloco fonte no alterado, a menos das posies que coincidam com o bloco
destino.
A . 4 . 8 Executando um programa
Voc pode executar um programa em dois modos: passo a passo ou contnuo. Os dois
modos iniciam a execuo a partir do valor atual do apontador de instrues (PC). Este pode
ser ajustado utilizando-se o comando Alterar PC ou Zerar PC (F10). Para o modo
contnuo, atravs do comando Rodar (F9), voce pode determinar um ponto de parada na
execuo do seu programa.
A-4

Alterar AC
permite fornecer um valor inicial para o acumulador (AC). Aps o comando, o
simulador solicita um endereo para inicializar o AC.
Alterar PC
permite fornecer um valor inicial para o apontador de instrues (PC). Aps o
comando, o simulador solicita um endereo para inicializar o PC.
Passo (F8)
cada vez que o comando ativado (via menu, tecla F8, ou iconed e passo a passo), o
simulador executa a instruo apontada pelo PC, parando logo aps.
BP

Break point
permite especificar um endereo de parada. No campo BP da janela de programa
pode ser fornecido o endereo para o break point.

Rodar (F9)
aps o comando Rodar (via menu, tecla F9 ou icone) o simulador executa
continuamente um programa, a partir da posio indicada pelo PC, at encontrar uma
instruo de halt (HLT), o ponto de parada ou o comando ser ativado novamente
(freio de emergncia).
A . 4 . 9 Salvando e carregando arquivos
Para os comandos que seguem, deve ser fornecido um nome de arquivo. Os simuladores
adicionam, automaticamente, o sufixo .mem. Arquivos de simuladores diferentes podem
ou no ser compatveis entre si, dependendo da compatibilidade entre as respectivas
arquiteturas.
Carregar
carrega um arquivo para a memria do computador sendo simulado. O arquivo deve
conter uma memria compatvel com o computador sendo simulado, caso contrrio o
simulador indica erro e o comando anulado.
Salvar
grava o contedo da memria do computador sendo simulado.

A-5

Captulo
UM
Bases Numricas

1 . 1 Introduo
Quando o homem aprendeu a contar, ele foi obrigado a desenvolver smbolos que
representassem as quantidades e grandezas que ele queria utilizar. Estes smbolos, os
algarismos, constituem a base dos sistemas de numerao.
Nos tempos pr-histricos o homem utilizou uma correspondncia um-para-um entre os
objetos a serem contados e os seus dedos, ou ento para pedrinhas ou mesmo para riscos.
Um sistema deste tipo seria um sistema unrio (com um nico smbolo):

Os primeiros algarismos encontrados consistiam em marcas horizontais ou verticais (como as


acima) com traos de ligao entre elas para definir as quantidades superiores a um. Os
smbolos romanos bsicos podem ser considerados como uma evoluo do sistema acima.
Os algarismos romanos so basicamente aditivos: assim, por exemplo, III = I + I + I. Para
facilitar a representao de grandes quantidades, foram introduzidos smbolos especiais para
grupos:
I=1

V=5

X=10

L=50

C=100

D=500

M=1000

Alm disto, utilizam-se uma srie de regras (como por exemplo a posio relativa dos
smbolos aos seus vizinhos), que permitiam interpretar estes smbolos e determinar qual o
nmero 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 realizao de clculos com este sistema, especialmente para operaes como multiplicao
e diviso, era entretanto extremamente complexa e de aplicao praticamente impossvel.
Posteriormente, os rabes utilizaram-se de um sistema originrio da ndia, que possua 10
smbolos (0 a 9), com os seguintes smbolos (da esquerda para direita, 1234567890):

Este sistema comeou a ser utilizado na Europa no sculo 12, e conhecido atualmente como
sistema de numerao arbica (mas com outros algarismos), e se destaca pelas seguintes
caractersticas:
existe um smbolo para o valor nulo.
cada algarismo utilizado uma unidade maior que o seu predecessor.

1-1

a notao posicional, ou seja, o valor de um algarismo determinado pela sua


posio dentro do nmero. Cada posio possui um determinado peso.
1 . 2 Representao de nmeros
Os sistemas atuais formam os nmeros pela frmula a seguir, onde a representa o nmero
propriamente dito, B representa a base do sistema de numerao (B2), x i representam os
algarismos (0xi<B), e n representa o nmero de posies utilizadas. Com B=10 tem-se o
sistema decimal.
n

(xi.B i)

a=

i=m

O algarismo xi tem peso Bi, determinado pela sua posio. Para i com valores positivos,
tem-se pesos maiores que a unidade; para i=0 tem-se exatamente o peso unitrio (B0=1).
Para valores negativos de i, tem-se pesos menores que a unidade (fracionrios). Para o caso
especfico de nmeros inteiros, utilizando-se n dgitos (ou casas), indexados de 0 at n1,
a frmula fica:
n-1

(xi.B i)

a=

i=0

ou, por extenso, expandindo-se o somatrio:


a =xn-1.B n-1+xn-2.B n-2+. . . . +x 2.B 2+x1.B 1+x0.B 0
ou ainda, simplificando-se a expresso:
a =xn-1.B n-1+xn-2.B n-2+. . . . +x 2.B 2+x1.B+x0
Para os sistemas de numerao 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 posio ocupada pelo maior algarismo, e ela deve ser aumentada de uma
unidade, ento esta posio recebe o smbolo nulo e a posio 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 dgito 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 nmero determinado multiplicando-se o algarismo
pelo peso de sua posio.
O valor de um nmero determinado pela soma dos valores de cada algarismo.
1 . 3 Transformao entre bases
Os computadores atuais utilizam internamente somente um sistema de numerao: o sistema
binrio (B=2), com os algarismos 0 e 1. Este sistema foi estudado profundamente pelo
matemtico alemo Leibniz, no sculo 17. Somente com o advento dos computadores
eletrnicos digitais, entretanto, tal sistema comeou a ser utilizado na prtica. Atualmente,
1-2

todos os computadores utilizam internamente o sistema binrio para armazenamento e


manipulao de nmeros e dados. O tratamento de nmeros representados em outras bases
ocorre atravs de rotinas de codificao e decodificao. O mesmo ocorre com smbolos
alfanumricos.
1 . 3 . 1 Mtodo polinomial
Como cada nmero pode ser representado por um polinmio em uma certa base, tudo o que
se deve fazer para transformar um nmero de uma base para outra interpretar este nmero
como um polinmio utilizando-se aritmtica 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+1 8=618
Nos exemplos acima, simplesmente aplicou-se a frmula:
a = xn-1.B n-1+xn-2.B n-2+. . . . +x 2.B 2+x1.B+x0
onde B a base de origem e a o nmero resultante na base destino. Observe-se que todos
os clculos so realizados na aritmtica da base de destino.
1 . 3 . 2 Mtodo de subtraes
Sabendo-se que um nmero em uma determinada base B representado pela frmula
a =xn-1.B n-1+xn-2.B n-2+. . . . +x 2.B 2+x1.B+x0
a converso para determinao dos coeficientes xi iniciada da esquerda (xn-1) para a direita
(at x0). Inicia-se determinando os valores de n (a quantidade de dgitos necessria) e de xn-1
(o dgito mais significativo). Para tanto procura-se o produto (na base origem) do maior
coeficiente com a maior potncia da nova base, que est contido no nmero a ser convertido,
ou seja, procura-se o maior produto xn-1.B n-1 que seja menor (ou igual) que a. Este
coeficiente xn-1 o algarismo a ser utilizado na posio mais esquerda (dgito mais
significativo) do nmero na nova base. Subtrai-se este produto do nmero a ser convertido.
Com isto tem-se:
a ' = a xn-1.B n-1 = xn-2.B n-2+. . . . +x 2.B 2+x1.B+x0
Para determinar-se o algarismo seguinte direita (xn-2), repete-se o processo, usando agora a
diferena do passo anterior (a') e a potncia imediatamente inferior (se no passo anterior
usou-se a potncia Bi, utiliza-se agora Bi-1), e assim sucessivamente at todos os n dgitos
terem sido determinados. Note-se que o resultado das diversas subtraes sempre deve ser
positivo (ou zero). Se a subtrao no for possvel, isto indica que o coeficiente xi zero.
681-1.29=681-512=169
169-1.27=169-128=41
41-1.25=41-32=9
9-1.23=9-8=1
1-0.21=1-0.2=1

169-0.28=169-0.256=169
41-0.26=41-0.64=41
9-0.24=9-0.16=9
1-0.22=1-0.4=1
1-1.20=1-1=0

Ou seja, o nmero final, em binrio, 1010101001.

1-3

Se o resultado de uma subtrao produzir resultado zero, isto significa que todos os dgitos
restantes so zero, como ilustrado no exemplo a seguir.
680-1.29=680-512=168
168-1.27=168-128=40
40-1.25=40-32=8
8-1.23=8-8=0

168-0.28=168-0.256=168
40-0.26=40-0.64=40
8-0.24=8-0.16=8

Os coeficientes restantes (x2, x 1 e x 0) so iguais a zeros, e o nmero final, em binrio,


1010101000.
O mtodo tambm se aplica para nmeros com fraes. Se no for possvel chegar a zero
aps um certo nmero de posies, ento interrompe-se o mtodo aps o nmero de casas
desejado.
6,125-1.22=6,125-4=2,125
0,125-0.20=0,125-0.1=0,125
0,125-0.2-2=0,125-0.0,25=0,125

2,125-1.21=2,125-2=0,125
0,125-0.2-1=0,125-0.0,5=0,125
0,125-1.2-3=0,125-0,125=0

Ou seja, o nmero final 110,001.


O mtodo tambm se aplica para outras bases. Seja a converso de 6,8125 de decimal para
octal:
6,8125-6.80=6,8125-6=0,8125
0,0625-4.8-2=0,0625-0,0625=0

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

Ou seja, 6,8125 10=6,648. Note-se que sempre se utiliza a aritmtica da base de origem.
1 . 3 . 3 Mtodo das divises
O nmero a ser convertido dividido pela nova base (na aritmtica da base de origem). O
resto desta diviso forma o algarismo mais a direita (menos significativo) do nmero
convertido. O quociente novamente dividido, e assim sucessivamente, at o quociente final
ser zero. A sequncia de todos os restos forma o novo nmero.
Note-se que ao dividir o nmero a pela base B obtm-se:
ou seja

a /B=(xn-1.B n-1+xn-2.B n-2+. . . . +x 2.B 2+x1.B+x0)/B


a /B=xn-1.B n-2+xn-2.B n-3+. . . . +x 2.B 1+x1, com resto igual a x0

A diviso seguinte por B produz como resto x1, e assim sucessivamente at xn-1.
532=26, resta 1
132=6, resta 1
32=1, resta 1

262=13, resta 0
62=3, resta 0
12=0, resta 1

Nmero binrio resultante: 110101


Para fraes, o mtodo se modifica um pouco: a frao multiplicada pela nova base; a parte
inteira resultante forma o algarismo mais esquerda da nova frao e a parte fracionria
submetida novamente ao mtodo, at o resultado ser zero (ou at atingir-se o nmero de
dgitos significativos desejado).

1-4

Exemplo:
0,828125 . 2 = 1,65625
0,65625 . 2 = 1,3125
0,3125 . 2 = 0,625
0,625 . 2 = 1,25
0,25 . 2 = 0,5
0,5 . 2 = 1,0

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

Frao = 0,1
Frao = 0,11
Frao = 0,110
Frao = 0,1101
Frao = 0,11010
Frao = 0,110101

1 . 3 . 4 Mtodo da substituio direta


Este o mtodo mais fcil, entretanto funciona somente para bases que so potncias inteiras
entre si, como por exemplo de octal para binrio (e vice-versa) ou de hexadecimal para
binrio (e vice-versa). Seja B1=B2m; para um determinado m inteiro, ento tem-se as
seguintes regras:
para converter de B1 (a maior base) para B2 (a menor base), cada algarismo de B1
substitudo 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 vrgula como referncia, ou seja, formam-se grupos de m algarismos tanto para a
esquerda da vrgula (parte inteira) como para a direita (parte fracionria). Cada grupo
ento transformado no seu algarismo equivalente na nova base:
1110,01101 2 = 001 110 , 011 010 = 1 6 , 3 28
1110,01101 2 = 1110 , 0110 1000 = E , 6 816
Observe-se que este mtodo tambm pode ser utilizado entre duas bases que no seja
diretamente uma potncia da outra, desde que ambas sejam potncias 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 Exerccios propostos
1. Converter para a base decimal os seguintes nmeros:
a) 1010102
b)10103
c) 10214
d) 10256
e) 21658
f) 1FA216
g) E1A16
h) 7078
2. Usando o mtodo das divises, converter os seguintes nmeros decimais para a base
indicada:
a) 96 para a base ternria
b) 96 para a base octal
c) 258 para a base hexadecimal
d) 258 para a base binria
e) 49 para a base quaternria
f) 57 para a base ternria
1-5

g) 56 para a base binria


3. Usando o mtodo das subtraes, converter os seguintes nmeros decimais para a base
indicada:
a) 96 para a base ternria
b) 96 para a base octal
c) 258 para a base hexadecimal
d) 258 para a base binria
e) 49 para a base quaternria
f) 57 para a base ternria
g) 56 para a base binria
4. Usando o mtodo das substituies, converter os seguintes nmeros 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 binria
f) 72418 para a base binria
g) 3AF16 para a base binria
h) 7E4B16 para a base binria

1-6

Captulo
DOIS
Sistemas de numerao em computao

2 . 1 Introduo
Em todas as frmulas usadas a seguir, B representa a base do sistema de numerao, n
representa a quantidade de dgitos disponveis para representar os nmeros, e a, b e c
representam nmeros. A frmula utilizada para representar um nmero inteiro:
n-1

(xi.B i)

a=

i=0
ser representada por a= n-1xiBi, ficando a variao de i desde 0 at o limite (n-1) implcita.
Para uma determinada base B, empregando-se n dgitos, pode-se representar Bn combinaes distintas, ou seja, Bn nmeros distintos. Assim, para base decimal com trs dgitos
pode-se representar 1000 nmeros distintos (com zero includo!). Entretanto, com os
mesmos trs dgitos e base dois, representa-se somente 8 nmeros distintos. Assim,
nmeros binrios vo exigir um grande nmero de dgitos, e normalmente trabalha-se com
grandes cadeias de zeros e uns. Isto pode levar a erros visuais, e por isso empregam-se
comumente as notaes em base 8 e base 16 para representar nmeros binrios.
A tabela abaixo lista os primeiros 16 nmeros em binrio, decimal, octal e hexadecimal.
Binrio
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

Decimal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Octal
00
01
02
03
04
05
06
07
10
11
12
13
14
15
16
17

Hexadecimal
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F

Tabela 2.1 - Nmeros em binrio, decimal, octal e hexadecimal


Em computao trabalha-se normalmente com quatro bases: a decimal, para entrada e sada
dos dados (j que nossa sociedade baseada no sistema decimal); a binria, para os clculos
internos; a hexadecimal, como forma compactada de representao interna; e a octal, tambm
por este motivo. Note-se que a escolha das bases 8 e 16 no ocasional: as transformaes
2-1

entres as bases 2, 8 e 16 pode ser feita facilmente pelo mtodo da substituio direta. Embora
a base hexadecimal seja de representao mais complexa (utiliza letras e dgitos), ela
preferida sobre a base octal por ser mais compacta, ou seja, requerer menos espao para
representar os resultados.
Os nmeros do sistema binrio so formados como qualquer outro nmero do sistema de
numerao arbico (inclusive em octal ou hexadecimal): cada novo nmero obtido por
enumerao, somando-se um ao seu antecessor (e observando-se a regra do vai-um).
Cada dgito do sistema binrio (0 e 1) denominado de bit, a contrao de binary digit. A
determinados conjuntos de bits so empregados nomes especficos. Assim, um quarteto (4
bits) frequentemente denominado de nibble, e um octeto (8 bits) recebe a denominao de
byte (ou o termo aportuguesado baite). Os mltiplos deste conjuntos utilizam os mesmos
denominadores que no sistema decimal (K para kilo, M para Mega, G para giga, T para
3
10
Tera, P para Peta), mas o fator multiplicativo no 1000 (10 ) mas sim 1024 (2 ). Assim,
um kilobit (abreviado 1Kb) so 1024 bits, e um kilobyte (abreviado 1KB) so 1024 bytes.
Um megabyte (1MB) so 1024 KB; um gigabyte (1GB) so 1024 MB, um terabyte (1TB)
so 1024 GB e assim por diante.
2 . 2 Soma de nmeros binrios
A soma de dois nmeros binrios utiliza as mesmas regras da soma no sistema decimal.
Como existem entretanto somente dois smbolos, a tabela de soma extremamente simples:
a
0
0
1
1

c
0
1
0
1

d=a+c
0
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 dgito do resultado zero e
existe a ocorrncia de um vai-um (carry out, em ingls). Considerando-se a possvel
existncia de um vem-um (carry in) e de vai-um (carry out), obtm-se a tabela a seguir.
a
0
0
0
0
1
1
1
1

c
0
0
1
1
0
0
1
1

vem-um
0
1
0
1
0
1
0
1

d=a+c
0
1
1
0
1
0
0
1

vai-um
0
0
0
1
0
1
1
1

Tabela 2.3 - Tabela verdade de um somador completo (full adder)

2 . 3 Representao de nmeros
A representao de nmeros inteiros positivos direta e imediata. Entretanto, necessrio
expandir (ou modificar) esta representao para incluir tambm nmeros negativos. Diversas
representaes foram desenvolvidas com este propsito. Quatro destas representaes, as
mais comuns atualmente, so analisadas a seguir: inteiros positivos, sinal/magnitude,
complemento de B-1 e complemento de B.
2-2

2 . 3 . 1 Nmeros inteiros positivos


Considerando-se somente a representao de nmeros inteiros positivos, com n dgitos
pode-se representar Bn nmeros, dispostos no intervalo fechado entre zero (o menor) e Bn1
(o maior).
Faixa de representao: [ 0 , Bn1 ]
Assim, para 2 dgitos decimais tem-se 100 nmeros, de 0 a 99; para 3 dgitos em base 3 temse 27 nmeros, de 0 (0003) a 26 (222 3); para 4 dgitos binrios tem-se 24=16 nmeros,
desde zero (00002) at 15 (11112); para 8 dgitos binrios tem-se 28=256 nmeros, desde
zero (000000002) at 255 (111111112); No existe previso para nmeros negativos.
Clculo do valor do nmero
O valor de nmero positivo calculado pelo polinmio n-1xiBi, exatamente o mesmo
mtodo utilizado para a converso pelo mtodo polinomial.
Troca de sinal
Como no existe a capacidade de representar nmeros negativos, no existe tal funo.
Soma de dois nmeros
A soma de dois nmeros positivos realizada somando-se os dois polinmios dgito a
dgito, de acordo com as tabelas da soma na base em questo. Para base 2 utiliza-se a Tabela
2.3 da seo 2.2. Naturalmente, nesta soma leva-se em conta os eventuais vai-um e vemum.
2 . 3 . 2 Nmeros com sinal: representao em sinal-magnitude
Para permitir nmeros com sinal, esta representao utiliza um dgito (normalmente o mais
significativo) para representar o sinal. No sistema decimal, o smbolo usado para
indicar nmeros negativos e + (ou simplesmente um espao vazio) para nmeros positivos.
Com isto ganha-se a possibilidade de representar inteiros negativos, mas a faixa de
representao reduzida porque tem-se agora somente (n1) dgitos para representar a
magnitude.
Faixa de representao: [ (Bn-11) , +(Bn-11) ] ou [ (Bn-11) , (Bn-11) ]
Divide-se a gama de representao em dois subconjuntos simtricos, um para nmeros
negativos e outro para positivos. A faixa dos nmeros positivos reduzida de um fator igual
a base B. Por exemplo, para base decimal com dois dgitos, se consideramos somente
nmeros positivos tem-se a faixa de 0 at 99; com a representao em sinal magnitude
obtm-se a faixa de 9 at +9. Alm disto, existem duas representaes para o zero: 0 e +0.
De um modo geral, para uma base qualquer, das Bn combinaes possveis usam-se somente
2.B n-11 (descontando-se o duplo zero). No exemplo acima, das 100 combinaes so
utilizadas somente 19.
Em binrio, entretanto, com B=2, obtm-se 2.2n-11, ou seja, 2n1 (isto , Bn1). Assim,
somente uma representao perdida (a do duplo zero). Obs.: no sistema binrio costuma-se
utilizar 1 no lugar de , e 0 no lugar de +. Assim, para 4 dgitos, 0111 representa 7,
1111 representa 7, 0000 representa zero e 1000 representa 0.

2-3

Clculo do valor do nmero


Um nmero 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-2xiBi. Em binrio, utiliza-se usualmente 0 no lugar de
+ e 1 ao invs de -.
Troca de sinal
Para trocar o sinal de um nmero 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)=+,
ento S(c)=, e se S(a)= ento S(c)=+.
Soma de dois nmeros
A soma de dois nmeros 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)
+

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

M(d)
M(a)+M(c)
M(a)+M(c)
M(a)M(c)
M(c)M(a)
M(a)M(c)
M(c)M(a)

Exemplo
5 + 7 = 12
-5 + -7 = -12
7 + -5 = 2
5 + -7 = -2
-7 + 5 = -2
-5 + 7 = 2

Tabela 2.4 - Soma em sinal / magnitude


Note-se que, para realizar somas de nmeros em sinal/magnitude, deve-se conhecer as
tabelas de soma e de subtrao da base em que se estiver trabalhando. Esta necessidade de
realizar duas operaes distintas (soma e subtrao) torna muito mais complexa a
manipulao de nmeros em sinal/magnitude pelo computador. Assim, apesar de familiar ao
ser humano, esta notao pouco utilizada em computao.
Para resolver o problema de representao de nmeros negativos, optou-se por usar a
notao em complemento da base, como visto a seguir. Duas notaes foram desenvolvidas:
em complemento de (B-1) e em complemento de B Observao: a tabela de subtrao em
binrio ser vista mais adiante (seo 2.5).
2 . 3 . 3 Nmeros com sinal: representao em complemento de (B1)
Para permitir que a operao de soma seja realizada de forma nica, sem preocupao com os
sinais dos operandos, utilizada a representao em complemento. Nmeros positivos so
representados na forma normal, e nmeros negativos so representados em complemento.
Na representao em complemento de (B-1), o complemento de um nmero a obtido
subtraindo-se este nmero da maior quantidade representvel, ou seja, Bn1a. Assim, na
base 10, com 3 dgitos, o complemento de 9 (10-1) de um nmero a obtido pela frmula
999-a. Note-se que isto equivale a subtrair cada um dos dgitos de a de 9, que justamente a
base 10 menos um. Generalizando, para representar nmeros negativos em complemento de
B1, cada algarismo xi complementado individualmente pela frmula B1xi. A tabela a
seguir ilustra o clculo do complemento para diversas bases.

2-4

Algarismo
0
1
2
3
4
5
6
7
8
9

B=2
1
0
-

B=3
2
1
0
-

B=4
3
2
1
0
-

B=8
7
6
5
4
3
2
1
0
-

B=9
8
7
6
5
4
3
2
1
0
-

B=10
9
8
7
6
5
4
3
2
1
0

Tabela 2.5 - Exemplos de clculo de complemento de B-1


A notao em complemento elimina a necessidade de representao explcita do smbolo do
sinal, ou seja, no existe um smbolo especial para o sinal. A faixa de nmeros
representveis dividida em duas. Uma das faixas representa nmeros positivos, e a outra
faixa representa nmeros negativos. Existindo m representaes, as primeiras m/2 so
utilizadas para nmeros positivos (de 0 a m/2), e as m/2 representaes seguintes (de m/2 at
m) so utilizadas para nmeros negativos. A faixa de representao fica:
Faixa de representao, para B par:

[ (Bn/21) , +(B n/21) ]

Faixa de representao, para B mpar:

[ (Bn3)/2 , +(B n1)/2 ]

A tabela a seguir ilustra as faixas para diversas bases. Note-se que a gama de representao
dividida em dois subconjuntos, um para nmeros negativos e outro para positivos. A faixa
dos nmeros positivos reduzida da metade (em relao aos inteiros positivos). Continua
existindo a dupla representao do zero, assim como em sinal magnitude, mas no existe
mais a perda de capacidade de representao devido a existncia do dgito 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 representao em complemento de B-1
Por exemplo, para base decimal com dois dgitos, se consideramos somente nmeros positivos tem-se a faixa de 0 at 99; com a representao em complemento de 9 obtm-se a faixa
de 50 a 99 e 0 a 49. A primeira metade (de 50 a 99) representa nmeros negativos (de 49 a
0); a segunda metade (de 0 a 49) representa nmeros positivos. Note-se que um nmero
iniciando por 9, 8, 7, 6 ou 5 negativo; iniciando por 0, 1, 2, 3 ou 4 positivo. Em binrio,
para 4 dgitos, tem-se a faixa 1000 a 1111 (7 a 0) e 0000 a 0111 (0 a 7). Nmeros
iniciando por 1 so negativos, e iniciando por 0 so positivos.
Para bases mpares, existe um nmero positivo a mais, e para a determinao do sinal no
basta a verificao do dgito mais significativo (veja-se a seguir). Por exemplo, na tabela 2.6,
os nmeros em base 3 iniciando por zero so positivos, e os nmeros iniciando por 2 so
negativos, mas dos nmeros iniciando por 1 metade so positivos (100, 101, 102, 110 e
111) e metade so negativos (112, 120, 121 e 122).

2-5

Clculo do valor do nmero


Um nmero em complemento de (B1) tem o seu valor calculado de acordo com os
seguintes passos:
determinao do sinal: se a representao do nmero, interpretado como inteiro
positivo, estiver na metade superior da faixa, ele negativo. Se estiver na metade
inferior da faixa, positivo. Ou seja, sendo o nmero a= n-1xiBi, se a B n/2, ento
este nmero em complemento de (B1) negativo. Se a<Bn/2, ento, em complemento
de (B1), ele positivo. Obs.: para bases pares, basta analisar o dgito mais
significativo, conforme j explicado.
Assim, por exemplo, para base 3 com trs dgitos, tem-se 33 = 27 representaes. A
metade 13,5, e assim os nmeros de 0 a treze (representados respectivamente por
000 a 111) so positivos, e os de 14 a 26 (representados por 112 a 222) so negativos.
Note-se que existem 14 nmeros positivos, e 13 nmeros negativos.
Em outro exemplo, para base 4 com trs dgitos, tem-se 43 = 64 combinaes. A
metade 32, e ento os nmeros de 0 a 31 (representados por 000 a 133) so
positivos, e os de 32 a 63 (representados por 200 a 333) so negativos. Existem neste
caso 32 nmeros positivos e 32 nmeros negativos.
determinao da magnitude do nmero. Se o nmero a for positivo, ento sua
magnitude dada por M(a)= n-1xiBi. Se o nmero a for negativo, para calcular sua
magnitude (valor absoluto) deve-se calcular o complemento de (B1) de cada
algarismo, ou seja, substitui-se cada dgito pelo seu complemento. Alternativamente,
tambm possvel manipular todo o nmero:
M(a)= n-1(B-1-xi)Bi = n-1(B-1)Bi n-1xiBi = Bn1 n-1xiBi =Bn1a
Assim, por exemplo, para base 3 com trs dgitos, a magnitude de 110 12 (o nmero
positivo). J o nmero 112 negativo, e assim seus dgitos devem ser
complementados, resultando em 110, ou seja, a magnitude tambm 12. Utilizando-se
a frmula acima, tem-se tambm 331(112)3 = 27114=2614=12.
A tabela a seguir fornece diversos exemplos do clculo do valor de um nmero, de acordo
com as regras descritas acima.
Base
2
2
2
2
3
3
3
10
10
10
10
10
10

Num.dig.
4
4
4
4
3
3
3
2
2
3
3
3
3

Nmero
1110
1001
1010
0101
102
111
121
98
99
45
54
76
50

Sinal

+
+
+

Magnitude
1
6
5
5
11
13
10
1
0
45
45
23
49

Num.decim.
1
6
5
+5
+11
+13
10
1
0
+45
45
-23
-49

Tabela 2.7 - Exemplos de clculo do valor de um nmero em complemento de B-1

2-6

Troca de sinal
Para trocar o sinal de um nmero a em complemento de (B1), basta complementar, tambm
em B1, cada um de seus dgitos. Assim, no caso de c=(a), tem-se, pelo raciocnio acima,
c=Bn1a. Note-se que ((a)) = (Bn1a) = Bn1(Bn1a) = a.
No caso de bases mpares, o maior positivo, ao ser trocado de sinal, resulta novamente em si
prprio. Nestes casos, diz-se que houve estouro de representao (veja seo 2.6). Para
bases pares, isto nunca ocorre (para complemento de B-1). A tabela abaixo ilustra diversos
casos de troca de sinal.
Base
2
2
2
2
3
3
3
10
10
10
10
16
16
16

Num.dig.
4
4
4
4
3
3
3
2
2
2
2
2
2
2

Nmero
1110
1001
1010
0101
102
111
121
98
99
45
54
01
FF
98

Nm.negado
0001
0110
0101
1010
120
111 (estouro)
101
01
00
54
45
FE
00
67

Magnitude
1
6
5
5
11
13
10
1
0
45
45
1
0
103

Tabela 2.8 - Exemplos de troca de sinal para nmeros em complemento de B-1

Soma de dois nmeros


Para entender-se o processo de soma de dois nmeros em complemento de (B1), 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 nmeros a e c esto em complemento de (B1), e quer-se obter d
tambm em complemento de (B1). Note-se que um nmero 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 subtrados (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
nmeros inteiros (no se utilizam tabelas especiais para soma ou subtrao em complemento
de (B1)). Note-se que em trs casos, marcados com (*), no se obtm diretamente o
nmero j representado em complemento de (B1); existe um termo excedente de Bn1. Nos
outros trs casos, no marcados, o resultado obtido j est correto.
Para reconhecer facilmente os casos que necessitam de correo, basta observar-se que o
termo Bn corresponde a um dgito na posio (n+1). Como os nmeros representados tem
somente n posies, a posio (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 so os que
necessitam de correo. Para eliminar o termo Bn, basta eliminar-se este vai-um. E para
eliminar o termo (1), adiciona-se um ao resultado.

2-7

S(a)

S(c)

S(d)

M(d)

M(a)+M(c)
M(a)+M(c)

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

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

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

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

Resultado obtido pela


simples soma de a+c
a+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 (*)
M(a) + Bn-1-M(c)
Bn-1 + M(a)-M(c)
Bn-1 + d (*)
M(a) + Bn-1-M(c)
Bn-1 - (M(c)-M(a))
Bn - 1 - M(d)
d
Bn-1 - M(a) + M(c)
Bn-1 - (M(a)-M(c))
Bn-1 - M(d)
d
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 correo: para obter a soma correta em
complemento de (B1), 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 corrigilo. Se no 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
2
2
2
2
2
2
2
2
10
10
10
10
10
10

Num.dig.
4
4
4
4
4
4
4
4
2
2
2
2
2
2

a
1110
1111
1001
0110
0101
0011
1111
0001
98
99
99
45
45
76

c
0001
0001
0111
1111
1000
0011
1111
1110
37
00
01
55
45
45

d=a+c
1111
10000
10000
10101
1101
0110
11110
1111
135
99
100
100
90
121

Tabela 2.10 - Exemplos de soma em complemento de B-1

2-8

d corrigido
1111
0001
0001
0110
1101
0110
1111
1111
36
99
01
01
90
22

2 . 3 . 4 Nmeros com sinal: representao em complemento de B


Para representar nmeros em complemento de B, utiliza-se a frmula Bna. Note-se que, ao
contrrio de complemento de (B1), esta frmula aplicada sobre todo o nmero, e no
sobre os seus algarismos individuais. Desta maneira elimina-se a dupla representao do
zero, e faixa de representao fica:
Faixa de representao, para B par:

[ (Bn/2) , +(B n/21) ]

Faixa de representao, para B mpar:

[ (Bn1)/2 , +(B n1)/2 ]

Note-se que a gama de representao dividida em dois subconjuntos, um para nmeros


negativos e outro para positivos. No existe mais a dupla representao do zero. Observe-se
tambm que as faixas (considerando-se a representao dos nmeros) continuam as mesmas
da representao em complemento de B1. Como estes nmeros so 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 representao em complemento de B
Na Tabela 2.11, por exemplo, para base decimal com dois dgitos, com nmeros positivos
tem-se a faixa de 0 at 99; com a representao em complemento de 9 obtm-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 nmeros negativos; a segunda metade (de 0 a 49)
representa nmeros positivos. Entretanto, agora 99 representa 1 (e no mais zero, como em
complemento de 9) e 50 representa o nmero 50 (que no tem representao positiva
equivalente!). Ou seja, todos os nmeros negativos sofreram um acrscimo de 1. As
demais propriedades se mantm: um nmero iniciando por 9, 8, 7, 6 ou 5 negativo;
iniciando por 0, 1, 2, 3 ou 4 positivo. Em binrio, para 4 dgitos, tem-se a faixa 1000 a
1111 (8 a 1) e 0000 a 0111 (0 a 7). Nmeros iniciando por 1 so negativos, e iniciando
por 0 so positivos.
Note-se tambm que agora as bases mpares tem faixas simtricas, mas que as bases pares
possuem um nmero negativo a mais, que no tem equivalente positivo dentro da faixa.
Clculo do valor do nmero
Um nmero em complemento de B, tem o seu valor calculado de acordo com os seguintes
passos:
determinao do sinal: a regra a mesma de complemento de (B1): se a
representao do nmero, interpretado como inteiro positivo, estiver na metade
superior da faixa, ele negativo. Se estiver na metade inferior da faixa, positivo. Ou
seja, sendo o nmero a= n-1xiBi, se a Bn/2, ento este nmero em complemento de
B negativo. Se a<Bn/2, ento sua interpretao de um nmero positivo. Obs.: para
bases pares, a regra pode ser simplificada: basta analisar o dgito mais significativo,
conforme j foi explicado.

2-9

determinao da magnitude do nmero. Se o nmero a for positivo, ento sua


magnitude dada por M(a)= n-1xiBi. Se o nmero a for negativo, para obter seu valor
deve-se calcular o complemento de B do nmero:
M(a)=Bna = Bn n-1xiBi
Note-se que Bn-1-a a representao em complemento de (B1). Assim, uma maneira rpida
de calcular o complemento de B realizando o complemento de (B1) de cada algarismo e a
seguir somar um no nmero resultante. Ou seja, (Bn1a)+1 = Bna, que o nmero
desejado em complemento de B. A tabela a seguir fornece diversos exemplos.
Base
2
2
2
2
2
2
3
3
3
3
10
10
10
10
10

Num.dig.
4
4
4
4
4
4
3
3
3
3
2
2
3
3
3

Nmero
1110
1001
1010
1000
0101
0111
102
111
112
121
98
99
45
54
50

Sinal

+
+
+
+

Magnitude
2
7
6
8
5
7
11
13
13
11
2
1
45
46
50

Num.decim.
2
7
6
8
+5
+7
+11
+13
13
11
2
1
+45
46
50

Tabela 2.12 - Exemplos de clculo do valor de um nmero em complemento de B

Troca de sinal
Para trocar o sinal de um nmero a em complemento de B, basta calcular Bn-a. Ou, pelo
raciocnio acima, calcula-se o complemento de (B1), 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 nmero negativo (de maior magnitude) provoca
estouro de representao, pois este nmero no tem equivalente positivo. Em bases mpares
isto no ocorre.
Base
2
2
2
2
2
3
3
3
10
10
10
10
10

Num.dig.
4
4
4
4
4
3
3
3
2
2
3
3
3

Nmero
1110
1001
1010
0101
1000
102
111
121
98
99
45
54
50

Nm.negado Magnitude
0010
2
0111
7
0110
6
1011
5
1000 (estouro)
8 (8)
121
11
112
13
102
10
02
2
01
1
55
45
46
46
50 (estouro)
50 (50)

Tabela 2.13 - Exemplos de troca de sinal para nmeros em complemento de B


2-10

Soma de dois nmeros


O raciocnio anlogo ao utilizado em complemento de (B1). Deve-se analisar os mesmos
casos da soma em complemento de (B1) e da soma em sinal magnitude. Na tabela a seguir,
deseja-se calcular d=a+c. Os nmeros a e c esto representados em complemento de B, e
quer-se obter d tambm em complemento de B.
A tabela praticamente uma cpia da usada para complemento de (B1); comparando-se as
duas nota-se que a diferena est na eliminao de todos os termos 1 (que justamente a
diferena entre (B1) 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 preocupao de analisar previamente os operandos.
Em todos os casos, usam-se sempre as mesmas tabelas de soma de nmeros inteiros (no se
utilizam tabelas especiais para complemento de B). Note-se que em trs casos, marcados
com (*), no se obtm diretamente o nmero j representado em complemento de B; existe
um termo excedente de Bn. Nos outros trs casos, no marcados, o resultado obtido j est
correto.
S(a)
+

S(c)
+

S(d)
+

M(d)
M(a)+M(c)
M(a)+M(c)

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

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

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

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

d (Soma de a + c)
a+c
Bn-M(a) + Bn-M(c)
Bn+Bn - (M(a)+M(c))
Bn + Bn - M(d)
Bn + d (*)
M(a) + Bn-M(c)
Bn + M(a)-M(c)
Bn + d (*)
M(a) + Bn-M(c)
Bn - (M(c)-M(a))
Bn - M(d)
d
Bn - M(a) + M(c)
Bn - (M(a)-M(c))
Bn - M(d)
d
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 so identificados da mesma maneira que em complemento de
(B1). Somente os casos que produzirem um vai-um so os que necessitam de correo.
Para eliminar o termo B n, basta eliminar este vai-um; no existe a necessidade de somar
um ao resultado. Para todos os fins prticos, esta eliminao realizada simplesmente
ignorando-se a existncia do vai-um em um primeiro momento (a ocorrncia ou no do
vai-um ainda pode influenciar a anlise do resultado da soma, mas no a soma
propriamente dita).
A tabela a seguir ilustra exemplos de diversas somas, tanto em base 2 como em base 10,
considerando que os nmeros esto representados em complemento de B.

2-11

Base
2
2
2
2
2
2
2
2
10
10
10
10
10
10

Num.dig.
4
4
4
4
4
4
4
4
2
2
2
2
2
2

a
1110
1001
1111
0110
0101
0011
1111
0001
98
99
99
45
45
76

c
0001
0111
0001
1111
1000
0011
1111
1110
37
00
01
55
45
45

d=a+c
1111
10000
10000
10101
1101
0110
11110
1111
135
99
100
100
90
121

d corrigido
1111
0000
0000
0101
1101
0110
1110
1111
35
99
00
00
90
21

Tabela 2.15 - Exemplos de soma em complemento de B

2 . 4 Comparao entre os mtodos


Dos quatro mtodos estudados nas sees anteriores, dois so amplamente utilizados: o de
representao de nmeros positivos e o de representao em complemento de B. Nestas duas
representaes, somas so realizadas atravs das mesmas tabelas; nenhum procedimento
especial necessrio para somar-se dois nmeros em complemento de dois (exceto a
eventual eliminao do vai-um). Os outros dois mtodos, de sinal magnitude e de
complemento de (B1), sofrem da desvantagem de necessitarem de procedimentos mais
complexos para realizao da soma, alm de apresentarem duas representaes para o zero.
Em sistemas atuais, a base binria e utiliza-se para tratamento de nmeros negativos a
representao em complemento de 2.
A ttulo de comparao, a tabela a seguir mostra a interpretao decimal de nmeros binrios
de 4 dgitos nas quatro maneiras analisadas.
Binrio
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

Int.positivo
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

sinal mag.
+0
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7

compl. de 1
0
1
2
3
4
5
6
7
7
6
5
4
3
2
1
0

compl. de 2
0
1
2
3
4
5
6
7
8
7
6
5
4
3
2
1

Tabela 2.16 - Interpretao de nmeros binrios

2-12

2 . 5 Subtrao
A operao de subtrao, seja qual for o mtodo de representao utilizado, pode ser
facilmente realizada transformando-a em uma soma:
d = a c = a + (c)
Assim, para realizar subtraes, pode-se simplesmente trocar o sinal do subtraendo e somlo ao minuendo. A troca de sinal e a soma seriam ento realizadas de acordo com o sistema
de representao utilizado.
A subtrao pode, tambm ser realizada atravs de tabelas prprias. 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
0
0
1
1

c
0
1
0
1

d=a-c
0
1 e pede-um
1
0

Tabela 2.17 - Tabela verdade de um meio-subtrator

a
0
0
0
0
1
1
1
1

c
0
0
1
1
0
0
1
1

emprestou um
0
1
0
1
0
1
0
1

d=ac
0
1
1
0
1
0
0
1

pede um
0
1
1
1
0
0
0
1

Tabela 2.18 - Tabela verdade de um subtrator completo


Apesar destas tabelas serem anlogas s utilizadas para a soma, a grande maioria dos
computadores no as utiliza; subtraes so realizadas internamente usando-se o mtodo do
complemento do subtraendo.
2 . 6 Estouro de representao
Os nmeros representados em um computador so limitados. Quanto maior o nmero de
dgitos disponveis, maior ser a faixa dos nmeros representveis, mas esta faixa sempre
ser finita. Assim, ao realizar-se a soma (ou subtrao) de dois nmeros, o resultado pode
cair fora da faixa representvel. Nestes casos, diz-se que houve estouro ou transbordamento
da representao (overflow). Para representar corretamente o resultado quando ocorreu
estouro necessitaria-se de um dgito a mais para representar o nmero.
Por exemplo, para nmeros binrios de 4 dgitos, tem-se:
1000 + 0001 = 1001
1000 + 1111 = 0111
0111 + 1111 = 0110
0111 + 0011 = 1010

8 + 1 = 7
8 + 1 = 7
7 + 1 = 6
7 + 3 = 6

(correto)
(incorreto; deveria ser 9)
(correto)
(incorreto; deveria ser 10)

Note-se que o estouro no est diretamente relacionado com o vai-um. Os exemplos acima
ilustram isto. No primeiro caso, no ocorreu nem estouro nem vai-um; no segundo caso
2-13

ocorreram tanto estouro como vai-um; no terceiro caso ocorreu vai-um, mas no estouro;
e no quarto caso no ocorreu vai-um, mas ocorreu estouro.
Existe uma regra simples para determinao de estouro em complemento de 2: ocorre estouro
quando o vai-um do dgito mais significativo diferente do vem-um para este mesmo
dgito. Note-se que o dgito mais significativo o utilizado para indicar o sinal do nmero.
Esta a maneira como os computadores internamente calculam se o resultado estourou ou
no.
Uma outra maneira, que no necessita da anlise dos vai-um e vem-um, utiliza somente
os dgitos mais significativos dos dois operandos e do resultado, ou seja, analisam-se os
sinais dos operandos e do resultado. Esta anlise 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
No
Sim
No
Sim
Nunca ocorre
Nunca ocorre

Tabela 2.19 - Anlise dos casos de estouro de representao


Pela tabela, pode-se observar que:
se os dois operandos tiverem sinais diferentes, nunca ocorre estouro (a representao
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 nmeros
positivos obtm-se um resultado negativo, e quando somando-se dois nmeros
negativos obtm-se um nmero positivo. Nestas duas situaes, o sinal do resultado
est obviamente incorreto, e esta uma indicao clara que ocorreu estouro de
representao.
Assim, em uma soma, ocorre estouro quando S(a)=S(c) e S(a)S(d). Analogamente, em
uma subtrao ocorre estouro quando S(a)S(c) e S(a)S(d).
2 . 7 Exerccios propostos
1. Qual o valor decimal de 011011012? Qual a representao binria de 654?
2. Converter para binrio os seguintes nmeros decimais:
(a) 39
(b) 0,4475
(c) 256,75

(d) 129,5625

3. Converter para decimal os seguintes nmeros binrios:


(a) 01101
(b) 0,001101
(c) 0111011,1011

(d) 010110011

4. Quantos nmeros diferentes podem ser representados em uma palavra binria de 6 bits?
5. Quantos nmeros diferentes podem ser representados em um conjunto de 4 chaves, cada
uma com trs posies diferentes?
6. Escrever os 12 primeiros nmeros no sistema de numerao de base 5.

2-14

7. Escrever os 26 primeiros nmeros no sistema de numerao de base 12. Usar a letra A


para o decimal 10 e a letra B para o decimal 11.
8. Representar o nmero 12,1 em binrio de dez bits, com 5 bits de parte inteira e 5 bits de
parte fracionria.
9. Represente o nmero 4710 usando representaes binrias de 8 bits em (a) sinal e
magnitude, (b) complemento de um e (c) complemento de dois.
10. Converter os seguintes nmeros hexadecimais em decimais:
(a) B6C7
(b) D2763
(c) 9,1A
11. Converter os seguintes nmeros octais em binrio:
(a) 56
(b) 32,234
(c) 231,2

(d) 3364

12. Converter os seguintes nmeros hexadecimais em binrios:


(a) AB2
(b) 12,A
(c) 649
(d) 0,D19
13. Converter os seguintes nmeros binrios em hexadecimais:
(a) 010110111
(b) 011110,01011
(c) 01110100010101
14. Considerando um processador que opere com a base quaternria utilizando 5 bits.
14.1 Para nmeros inteiros positivos:
a) Quantos nmeros diferentes podem ser representados? (Frmula de clculo e valor
decimal)
b) Quais so os limites inferior e superior desta faixa? (Valor quaternrio e decimal
correspondente)
c) Como seria representado o nmero 126 neste sistema?
14. 2 Supondo que se queira representar os nmeros inteiros com sinal, usando sinal e
magnitude:
a) Quantos nmeros diferentes podem ser representados? (Frmula de clculo e valor
decimal)
b) Quais so os limites inferior e superior desta faixa? (Valor quaternrio e decimal
correspondente)
c) Como seria representado o nmero 126 neste sistema?
d) Como seria representado o nmero -126 neste sistema?
14.3 Agora supondo que se quer representar estes nmeros usando complemento de B-1:
a) Quantos nmeros diferentes podem ser representados? (Frmula de clculo e valor
decimal)
b) Quais so os limites inferior e superior desta faixa? (Valor quaternrio e decimal
correspondente)
c) Como seria representado o nmero 126 neste sistema?
d) Como seria representado o nmero -126 neste sistema?
14.4 Agora supondo que se quer representar estes nmeros usando complemento de B:
a) Quantos nmeros diferentes podem ser representados? (Frmula de clculo e valor
decimal)
b) Quais so os limites inferior e superior desta faixa? (Valor quaternrio e decimal
correspondente)
c) Como seria representado o nmero 126 neste sistema?
d) Como seria representado o nmero -126 neste sistema?
15. Considere os pares de nmeros binrios de 6 bits indicados abaixo. Efetue a operao de
soma entre eles supondo, independentemente, que:
1) os nmeros esto representados em sinal e magnitude;
2) os nmeros esto representados em complemento de um;
2-15

3) os nmeros esto representados em complemento de dois.


Para cada caso, interprete o resultado, isto , determine qual o seu valor numrico e indique
se este valor o resultado correto da operao para a forma de representao sugerida.
(a) 010101 e 110110
(b) 010101 e 010110
(c) 110101 e 110110
16. Efetuar as seguintes subtraes em um sistema decimal de 4 dgitos, utilizando uma vez
complemento de 9 e outra vez complemento de 10:
(a) 1024913
(b) 249137
(c) 119239
17. Repetir o exerccio 16, agora para um sistema binrio de 12 bits, uma vez utilizando
complemento de um e outra vez com complemento de dois.
18. Efetuar as operaes indicadas abaixo (em decimal) em um sistema binrio de 10 bits,
com notao em complemento de dois. Analise o resultado, indicando a eventual existncia
de estouro de representao:
(a) 475 + 128
(b) - 506 + -6
(c) 436 475
(d) 506 + 6
(e) 128 128
(f) - 475 + 511
19. Converta os nmeros 17 e 15 para binrio usando 6 bits e efetue a operao de soma
entre eles (17+15), usando as seguintes representaes:
a) sinal magnitude;
b) complemento de um;
c) complemento de dois.
Analise os resultados obtidos quanto correo (sem calcular o seu valor correspondente em
decimal).
20. Repita o exerccio 19 para os nmeros 13 e 8.
21. Repita o exerccio 19 para os nmeros -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 exerccio 23, com as parcelas codificadas em complemento de dois, tambm
para 6 bits.
24. Usando a tcnica de subtrair atravs de complemento do subtraendo, mostrar como obter
as seguintes diferenas em binrio, 6 bits, complemento de um:
(a) 8 7
(b) -16 16
(c) 15 24
25. Repetir o exerccio 25 para complemento de dois em 6 bits.
26. Repetir o exerccio 25 para sinal / magnitude.
27. Converta os seguintes nmeros para binrio, usando a representao destinada a inteiros
positivos, usando o nmero necessrio de bits e efetue a subtraes indicadas usando a
tabela de subtrao:
(a) 32 - 15
(b) 31 - 14
(c) 17 - 9
28. Supondo um sistema decimal, com 4 dgitos, que trabalhe com representao de
negativos em complemento de 9, mostre como realizar as operaes:
(a) 0136 + 7654
(b) 9998 + 7777
(c) 0010 0108
29. Repetir o exerccio 28 para representao em complemento de 10.

2-16

Captulo
TRS
Componentes do computador e modelo de von Neumann

3 . 1 Breve histrico
Uma das mais importantes investidas na rea computacional, e que merece registro histrico,
foi a do ingls Charles Babbage. Ele projetou dois computadores: Difference Engine
(denominado a seguir Dispositivo Diferencial), iniciado em 1823, e o Analytical Engine
(Dispositivo Analtico), concebido em 1834, tendo ambos representado grandes avanos
cientficos em sua poca, embora nenhuma deles tenha sido concludo. O objetivo do
Dispositivo Diferencial era o cmputo automtico de tabelas matemticas. Sua nica operao
era a adio, mas a mquina podia resolver grande nmero de funes teis pela tcnica de
diferenas finitas. Esta mquina foi projetada para polinmios de grau 6 e nmeros binrios
de 20 dgitos, mas no foi concluda devido a problemas de inadequao da tecnologia
mecnica disponvel. Outra tentativa de Babbage, foi a construo do Dispositivo Analtico,
que deveria realizar qualquer operao matemtica automaticamente. Esta mquina j tinha
mdulos de armazenamento (memria) e uma unidade operadora (realizando 4 operaes
aritmticas). A entrada e sada de dados era feita atravs de cartes perfurados. Esta mquina
permitia a alterao da seqncia dos comandos executados, dependendo do resultado de
testes realizados. Novamente por problemas tcnicos, a construo desta mquina no
chegou ao final. Na tabela a seguir esto reunidas algumas das principais tentativas de valor
histrico no mbito computacional.
Data
1642

Inventor:mquina
Pascal

1671

Leibnitz

1827

Babbage:
Difference Engine
Babbage:
Analytical Engine
Zuse: Z3

1834
1941
1944

Aiken:
Harward Mark I

Capacidade
adio, subtrao

Inovaes tcnicas
transferncia automtica de vai-um;
representao em complemento
adio, subtrao,
mecanismo para multiplicao
multipl., diviso
e diviso
avaliao polinomial
operao automtica
por diferenas finitas
com diversos passos
computador de
mecanismo automtico de controle
propsitos gerais
de sequncia (programa)
computador de
primeiros computadores de
propsitos gerais
propsitos gerais operacionais
computador de
primeiros computadores de
propsitos gerais
propsitos gerais operacionais

Tabela 3.1 - Principais avanos na computao


Uma das primeiras tentativas para construo de computadores eletrnicos foi feita por volta
de 1930 por John Atanasoff, na Universidade Estadual de Iowa. Era uma mquina
construda com base em vlvulas para resoluo de equaes lineares.
O primeiro computador eletrnico de propsitos gerais foi provavelmente o ENIAC
(Eletronic Numerical Integrator and Calculator), construdo entre 1943 e 1946, na
Universidade da Pensilvnia, sob a coordenao de J. Mauchly e J. P. Eckert. Analogamente
primeira mquina de Babbage, parte da motivao do ENIAC foi a necessidade de construir
tabelas de forma automtica, por interesse do sistema militar americano (tabelas balsticas).
Fisicamente, era uma mquina enorme que pesava 30 toneladas e empregava cerca de 18000
3-1

vlvulas. Para se ter uma idia do tempo de execuo nesta mquina, eram necessrios cerca
de 3 ms para realizao de uma multiplicao de 10 dgitos (decimais), o que se constituiu em
grande avano para a poca. Ele trabalhava preponderantemente com valores decimais e no
binrios. Na Figura 3.1 mostrada a estrutura bsica do ENIAC.
Com o avano da pesquisa e o conseqente desenvolvimento tecnolgico, houve grandes
modificaes nos computadores. Basicamente, ao longo do tempo, a tecnologia e os estilos
usados na construo de computadores apresentam pontos comuns, que nos permitem
classific-los em geraes. Na tabela a seguir, so apresentadas as geraes de computadores
de acordo com sua classificao histrica.
Gerao

Tecnologias

Vlvulas,
1a
memria
de tubos
(1946 catdicos
54)
Transistores, ncleos
2a
de ferrite, discos
(1955 magnticos
64)
a
Circuitos
integrados
3
(SSI
e
MSI)
(1965 74)
4a
(1975 ?)

Caracterstica de
hardware
aritmtica de
ponto fixo
ponto flutuante
registrador ndice
processadores E/S
microprogramao
pipeline
memria cache

Caracterstica de
software
linguagem de
mquina, linguagem
assembler
ling. alto-nvel
bibliot. de subrotinas
monitores batch
multiprogramao
multiprocessamento
sistema operacional
memria virtual

Circuitos LSI
memrias
semicondutoras

Exemplo
IAS,
UNIVAC
IBM7094
CDC1604
IBM
S/360;
DEC
PDP-8
Amdahl
470;
Intel 8748

Tabela 3.2 - Geraes de computadores


Atualmente, esta tabela [HAY78] j poderia ser completada com uma quinta gerao que
incluiria as mquinas maciamente paralelas, os circuitos VLSI, as mquinas data-flow,
etc, dependendo do parmetro escolhido para embasar esta evoluo.
leitora de
cartes

divisor
multiplicador

e raiz
quadrada

impressora e
perf. de cartes

tabelas de
funes

unidade mestre de
programao
Figura 3.1 - Estrutura bsica do ENIAC

3-2

a
c
u
m
u
l.

3 . 2 Princpios bsicos
Cada computador tem um conjunto de operaes e convenes nico para determinar as
posies dos dados com os quais a operao ser realizada. Os vrios computadores diferem
nas operaes especficas que fornecem e nos mtodos que eles usam para referenciar dados
que sero manipulados por uma operao. Em geral, uma operao tem a forma
OPERAO

OPERANDOS

e denominada de instruo. OPERAO especifica a funo que ser desempenhada.


OPERANDOS fornece a maneira de calcular a posio atual dos dados com os quais a
operao ser realizada.
Um programa constitudo de uma seqncia pr-determinada de instrues, que deve ser
seguida para que seja atingido o objetivo computacional. Este programa e os dados
correspondentes esto armazenados na memria da mquina; o conjunto de instrues (ou
programa) deve ser interpretado para realizao do processamento, isto , a informao
codificada correspondente s aes e operandos deve ser entendida e ento processada.
A memria de um sistema de computador tem a funo de armazenar dados e instrues;
organizada em posies, que podem ser visualizadas como elementos em uma matriz. Cada
elemento tem um endereo. Assim, pode-se falar de uma memria que tenha x posies:
cada posio pode ser referenciada diretamente de acordo com a sua colocao na seqncia.
Por exemplo, se uma memria tem 4096 posies, existem posies de memria 0, 1, 2,
3,...., 4094 e 4095. Quando um destes nmeros aparece nos circuitos de controle
conectados memria, o contedo (o valor que est na posio) ser trazido da memria para
os circuitos da unidade de processamento ou a informao na unidade de processamento ser
armazenada na memria, dependendo do trabalho associado com o endereo.
Instrues em um computador so executadas em uma seqncia determinada por suas
posies de memria. Na maioria dos computadores (que formam a classe das chamadas
mquinas de von Neumann, cujo modelo bsico ser visto na seo 3.5), instrues e dados
so distribudos em posies de memria.
O endereo representa uma posio particular na memria e pode ser formado de vrias
maneiras. A representao trivial de um endereo est na parte de uma instruo chamada
campo de endereo. Contudo, h vrias maneiras de se modificar um campo de endereo por
valores em outras partes do processador (aritmtica de endereos). As diversas
possibilidades e vantagens destas tcnicas sero mostradas mais adiante na disciplina.
A unidade lgica e aritmtica realiza aes indicadas nas instrues, executando operaes
numricas (aritmticas) e no numricas (lgicas) alm da preparao de informaes para
desvios do programa. O controle do programa e a unidade lgica e aritmtica formam a
unidade central de processamento (UCP), ou simplesmente processador.
Busca - decodificao - execuo de instrues
Um elemento no processador, denominado de contador de instrues ou apontador de
instrues, contm a posio da prxima instruo a ser executada. Quando uma seqncia
de execuo de instrues tem incio, a instruo cujo endereo est no contador de
instrues trazida da memria para uma rea de armazenamento chamada registrador de
instruo. Este processo consiste na busca de instruo.
A instruo interpretada por circuitos de decodificao que fazem com que sinais
eletrnicos sejam gerados no processador como resultado do valor do campo de operao,
isto , decodificam a informao correspondente operao a ser realizada.
Esses sinais, ou seqncia de sinais, resultam na execuo da instruo. Execuo a
aplicao da funo do operador nos operandos. Quando a execuo de uma instruo
3-3

terminada, o contador de instrues atualizado para o endereo de memria da prxima


instruo. Esta instruo ento trazida da memria para o registrador de instrues e
executada, repetindo-se assim o ciclo de busca-decodificao-execuo.
A seqncia de instrues pode mudar como resultado de uma instruo que direciona um
desvio (tambm chamada transferncia ou salto). Estas instrues contm o endereo da
prxima instruo a ser executada ao invs do endereo de um operando. Elas causam
mudanas no fluxo do programa como resultados das condies nos dados. O desvio
condicional representado por uma estrutura de programao de alto nvel de IF (teste para
uma condio especificada e alterao do fluxo de programa se a condio atendida) traduzse em algum tipo de instruo de desvio.
3 . 3 Elementos funcionais bsicos
Um computador composto por blocos convencionalmente chamados de memria, unidades
operacionais, unidades de controle e dispositivos de entrada e sada (Figura 3.2).
A unidade operacional e a unidade de controle tem funcionalidade especfica, conforme ser
visto na seqncia. Reunidas, entretanto, recebem no seu conjunto a denominao de
unidade central de processamento (UCP) ou processador. Memrias, unidades operacionais,
unidades de controle e dispositivos de entrada e sada so formados por elementos de menor
complexidade, tais como registradores, contadores, multiplexadores, seletores,
decodificadores, somadores e portas lgicas (AND, OR, INVERSOR).
Registradores so elementos digitais com capacidade de armazenar dados. Tm associados a
si sinais de carga, que determinam quando sero armazenados novos contedos 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 lgicas so elementos com capacidade de operar sobre dados, alterando-os ou
fornecendo um novo dado como resultado da operao que realizam. Elementos digitais
necessitam ser ativados ou habilitados para realizar uma determinada operao. Os sinais
responsveis pela ativao ou habilitao de componentes digitais so conhecidos como
sinais de controle.

memria

controle

unidade
operacional

entrada/
sada

Figura 3.2 - Elementos bsicos de um computador


Dados so transferidos, entre os diversos elementos de um computador, por caminhos
fsicos chamados barramentos. Barramentos so caminhos fsicos que permitem o
transporte de dados entre os vrios elementos da parte operacional, memria e sistema de
3-4

entrada e sada. 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, endereo,
controle) que so por ele transportados.
Cada um dos blocos bsicos do computador comentado, em detalhes, a seguir.
3 . 3 . 1 Memria
A memria formada por elementos armazenadores de informao. Uma memria est
dividida em palavras. Cada palavra ocupa uma posio de memria e identificada
univocamente por um endereo. O contedo armazenado nas palavras da memria tanto
pode representar dados como instrues. Um esquema da estrutura convencional para a
memria de um computador mostrado na Figura 3.3.

RDM in

R
E
M

read

memria
write

RDM out

Figura 3.3 - Modelo estrutural da memria


Os registradores mostrados na Figura 3.3 so:
REM :
registrador de endereos da memria - contm o endereo do
dado a ser lido ou escrito na memria.

registrador de dados da memria (entrada) - contm o dado


a ser escrito na memria.

RDM i n :

registrador de dados da memria (sada) - contm o dado


lido da memria.

RDM out :

Os sinais de controle significam:


read:
leitura da memria - o contedo da posio de memria
endereada por REM copiada em RDMout .
write:
escrita na memria - a posio de memria endereada por REM
recebe o contedo de RDMin .
Uma memria caracterizada por vrios parmetros. Os mais importantes so: tamanho,
velocidade e tecnologia. No nvel de arquitetura, interessam: tamanho da palavra em bits e
tamanho da memria em palavras. Estes tamanhos geralmente so indicados sob a forma de
potncias de dois. O tamanho da palavra determina o comprimento em bits do RDM
(registrador de dados) e o tamanho da memria o comprimento em bits do REM (registrador
de endereos).
3-5

3 . 3 . 2 Unidade operacional
A unidade operacional, tambm chamada de bloco operacional, executa as transformaes
sobre dados especificadas pelas instrues de um computador. Compe-se basicamente de
uma unidade lgica e aritmtica, de registradores de uso geral e especfico e dos barramentos
que interligam todos esses elementos.
O nmero, tamanho e uso dos registradores e a quantidade e tipo de operaes que a unidade
lgica e aritmtica realiza so alguns dos fatores que determinam o porte de um processador.
Unidade lgica e aritmtica ( ULA )
A ULA realiza operaes aritmticas e operaes lgicas sobre um ou mais operandos.
Exemplos de operaes realizadas pela ULA: soma de dois operandos; negao de um
operando; inverso de um operando; AND (E lgico) de dois operandos; OR (OU lgico)
de dois operandos; deslocamento de um operando para a esquerda ou direita ; rotao de um
operando para a esquerda ou direita
As operaes da ULA so, geralmente, muito simples. Funes mais complexas, exigidas
pelas instrues da mquina, so realizadas pela ativao seqencial das vrias operaes
bsicas disponveis. Um exemplo a execuo de instrues de multiplicao em alguns
computadores, que compreende a ativao de operaes sucessivas de soma e deslocamento
na ULA.
A ULA fornece o resultado da operao e tambm algumas indicaes sobre a operao
realizada. Tais indicaes so chamadas cdigos de condio. Exemplos de alguns
cdigos de condio comumente gerados na ULA so:
Overflow:

(ou estouro de campo) indica que o resultado de uma operao aritmtica no


pode ser representado no espao (tamanho da palavra) disponvel.

Sinal:

indica se o resultado da operao negativo ou positivo.

Carry:

dependendo da operao realizada (soma ou subtrao) pode representar o bit de


vai-um (carry-out) ou vem-um (borrow-out). Usado muitas vezes tambm
em operaes de deslocamento para guardar ou fornecer o bit deslocado. A
indicao de carry no deve ser confundida com overflow.

Zero:

indica se o resultado da operao realizada nulo.

O modelo estrutural da unidade lgica e aritmtica mostrado na Figura 3.4.


operandos

controle

U L A

cdigos de
condio

resultado
Figura 3.4 - Modelo estrutural da ULA

3-6

Os sinais de controle que devem ser fornecidos para a ULA servem para selecionar a
operao desejada entre as operaes bsicas disponveis. Convm salientar que a ULA no
armazena nem o resultado, nem os operandos, nem os cdigos de condio gerados.
Uma ULA se caracteriza por:
comprimento em bits dos operandos
nmero e tipo de operaes
cdigos de condio gerados
Acumulador
O acumulador um registrador e tem por funo armazenar um operando e/ou um
resultado fornecido pela ULA. Nos computadores mais simples encontrado apenas um
acumulador. Em algumas arquiteturas mais complexas vrios registradores podem
desempenhar as funes de um acumulador.
Como todos os registradores, o acumulador ativado por um sinal de controle de carga. A
cada sinal de carga, o dado na entrada do registrador copiado para o seu interior
(obviamente o antigo contedo do acumulador perdido).
Um acumulador, sendo um registrador, se caracteriza ao nvel de arquitetura apenas pelo seu
comprimento em bits.
3 . 3 . 3 Unidade de controle
Para gerenciar o fluxo interno de dados e o instante preciso em que ocorrem as transferncias
entre uma unidade e outra so necessrios sinais de controle. Esses sinais so fornecidos
por um elemento conhecido por unidade de controle.
Cada sinal de controle comanda uma microoperao. Uma microoperao pode ser
responsvel pela realizao de uma carga em um registrador, uma seleo de um dado para
entrada em um determinado componente, uma ativao da memria, a seleo de uma
operao da ULA ou a habilitao de um circuito lgico, para citar alguns exemplos.
Unidades de controle so mquinas de estado finitas (FSM) realizadas por lgica seqencial.
Lgica seqencial e lgica combinacional so caracterizadas, informalmente, como segue:
Lgica seqencial: os sinais de sada so funo dos sinais de entrada e do estado
anterior do sistema.
Lgica combinacional: os sinais de sada so funo exclusiva dos sinais de
entrada.
Existem vrias formas de implementar lgica seqencial. Tais formas de implementao
caracterizam a organizao da unidade de controle. As duas organizaes usuais so:
Organizao convencional: a unidade de controle composta por componentes
digitais como flip-flops, contadores e decodificadores, que geram, seqencialmente
e nos instantes de tempo adequados, todos os sinais de controle necessrios
ativao da unidade operacional, do sistema de entrada e sada e da memria.
Organizao microprogramada: em uma unidade de controle microprogramada,
os sinais de controle esto armazenados numa memria especial chamada memria
de controle. Vrios sinais de controle so buscados a cada acesso memria de
controle. Esses sinais esto agrupados em longas palavras chamadas
microinstrues. Um conjunto de microinstrues forma um microprograma.
3-7

A unidade de controle, baseada em sinais de entrada obtidos do registrador de estado (RST)


e do registrador de instrues (RI), gera como sada todos os sinais de controle necessrios
para a unidade operacional (Figura 3.5).
O registrador de instrues um elemento do bloco de controle, o registrador de estado um
elemento da interface entre a unidade de controle e a unidade operacional. Em funo de uma
arquitetura especfica, esse ltimo registrador tanto pode aparecer classificado numa unidade
como em outra.

RI
RST

unidade
de
controle

sinais de
controle

Figura 3.5 - Esquema de uma unidade de controle

3 . 3 . 4 Registradores especiais
Existem, no computador, alguns registradores com funes especiais, conforme ser
explicado a seguir. Dependendo da arquitetura e da organizao de cada mquina, alguns
registradores podem estar posicionados na unidade de controle ou na unidade operacional.
Esta localizao, entretanto, no momento no relevante; aqui ser assumida a posio
adotada por cada mquina estudada.
Apontador de instrues
O apontador de instrues um registrador e tem por funo manter atualizado o
endereo de memria da prxima instruo que deve ser executada. Tambm chamado de
contador do programa (ou PC, do ingls Program Counter). O nome contador do
programa se deve ao fato de, no modelo bsico de um computador, instrues consecutivas
de um programa serem armazenadas em palavras da memria que possuem endereos
tambm consecutivos. Assim, para acessar a prxima instruo, basta contar mais um.
Do ponto de vista de arquitetura, um apontador de instrues se caracteriza pelo seu
comprimento em bits. Como o PC contm um endereo de memria, o comprimento do PC
funo do tamanho da memria onde esto armazenados os programas em execuo.
Registrador de instrues ( RI )
O registrador de instrues armazena a instruo que est sendo executada. Em funo
do contedo desse registrador, a unidade de controle determina quais os sinais de controle
devem ser gerados para executar as operaes determinadas pela instruo. Do ponto de vista
de arquitetura, um registrador de instrues se caracteriza pelo seu comprimento em bits. O
comprimento do RI depende do tamanho e codificao das instrues do computador.
Registrador de estado ( RST )
O registrador de estado armazena cdigos de condio gerados pela unidade lgica e
aritmtica (e, eventualmente, por outros elementos, como os sinais de interrupo gerados
por dispositivos de entrada e sada). Em funo do contedo desse registrador, a unidade de
controle toma decises sobre a gerao ou no de certos sinais de controle. Do ponto de vista

3-8

de arquitetura, um registrador de estado se caracteriza pelo seu comprimento em bits, que


uma funo do nmero de cdigos de condio implementados na mquina.
3 . 3 . 5 Conjunto de instrues e modos de endereamento
Uma instruo um conjunto de bits devidamente codificados que indica ao computador que
seqncia de microoperaes ele deve realizar. Instrues so classificadas por semelhana
de propsito e formato. Classificaes comuns incluem, entre outras:
instrues de transferncia de dados
instrues aritmticas e lgicas
instrues de teste e desvio
O conjunto de todas as instrues que um determinado computador reconhece e pode
executar chamado de conjunto de instrues. Qualquer seqncia finita de instrues
de um determinado conjunto de instrues compe um programa.
Muitas da instrues de um computador realizam operaes sobre operandos (p.ex. soma
de dois elementos). Operandos podem estar em qualquer posio da memria ou em
qualquer registrador (inclusive em um registrador pertencente a um dispositivo de entrada e
sada). Para que a unidade de controle saiba onde achar um operando necessrio que o
endereo do operando aparea junto a instruo. Nas instrues de desvio (parecidas
com GOTO e IF-THEN em linguagens de alto nvel) necessrio indicar, ao invs de
endereo de operando, para qual posio ou endereo de programa se quer desviar. As
diversas formas em que o endereo de um operando pode aparecer, somadas s diversas
formas em que um endereo de desvio pode ser encontrado em um computador, caracterizam
os modos de endereamento desse computador.
3 . 3 . 6 Ciclo de busca-decodificao-execuo de instrues
Busca, decodificao e execuo de instrues so as tarefas bsicas realizadas por um
processador. Caracterizam um ciclo, pois as tarefas so executadas repetidamente, sempre e
sempre, at que seja decodificada uma instruo que indique parada ao computador (halt,
stop, wait, etc).
Busca: na fase de busca lida uma instruo da memria. Essa fase envolve:
copiar o apontador de programa (PC ) para o registrador de endereos da
memria (REM),
ler uma instruo da memria,
copiar o registrador de dados da memria (RDM) para o registrador de
instrues (RI),
atualizar o apontador de programa (PC ).
Decodificao: nessa fase determinada qual instruo deve ser executada. A
decodificao geralmente realizada por lgica combinacional.
Execuo: na fase de execuo, para cada tipo de instruo realizado, conforme
necessrio:
clculo do endereo de operandos,
busca de operandos da memria,
seleo de operao da ULA,
carga de registradores,
escrita de operandos na memria,
atualizao do PC para desvios.

3-9

O controle de todas as operaes do ciclo de busca-decodificao-execuo de instrues


de responsabilidade da unidade de controle. O programador, mesmo o de baixo nvel (ou
seja, aquele que conhece a linguagem de mquina de seu computador), no precisa se
preocupar com isso, a no ser para calcular os tempos envolvidos na execuo de seu
programa.
3 . 3 . 7 Programao de um processador
A nica linguagem que um processador entende e tem condies de executar no , ao
contrrio do que muitos pensam, o ingls, mas sim linguagem de mquina. Linguagem
de mquina uma imagem numrica (binria) que representa a codificao do conjunto de
instrues de um computador. Todos os programas objeto de um computador esto
representados e armazenados em linguagem de mquina.
Representaes numricas so de difcil manipulao at mesmo por programadores
experientes. Programas em linguagem de mquina so difceis de elaborar, testar e alterar.
Para facilitar as tarefas de programao e depurao, mnemnicos (em ingls) foram
associados aos cdigos das instrues, nomes aos operandos e rtulos (labels) s
posies ocupadas pelo programa. A partir de ento, no mais necessrio trabalhar com
cdigos numricos, pois toda a programao de baixo nvel feita usando smbolos.
Um programa escrito com auxlio de smbolos, ou seja em linguagem simblica, precisa ser
traduzido em linguagem de mquina para que possa ser executado. Essa traduo recebe o
nome de montagem e, quando automatizada, o programa que a realiza recebe o nome de
montador.
Um montador realiza praticamente apenas uma traduo um para um das instrues da
linguagem simblica para instrues de mquina (ao contrrio de um compilador, que gera
rotinas em linguagem de mquina para cada instruo da linguagem de alto nvel e depois
otimiza cdigo e alocao de variveis). Montadores modernos, para computadores de 16 e
32 bits por exemplo, so bastante poderosos e confortveis, aceitando comandos especficos
(chamados comumente de pseudo-instrues) e tipos de dados no disponveis na
linguagem de mquina.
3 . 4 Um computador de primeira gerao: o EDVAC
No ENIAC, e nas mquinas que o antecederam, os programas e os dados eram armazenados
em memrias separadas. O armazenamento inicial de programas e sua alterao constitua-se
em uma atividade extremamente cansativa. A idia de armazenar programas e dados na
mesma unidade de memria - que corresponde ao conceito de programa armazenado -
atribuda ao matemtico hngaro John von Neumann (1903 1957), que atuou como
consultor no projeto do ENIAC. Sua proposta foi publicada em 1945 para um computador
novo, o EDVAC (Electronic Discrete Variable Computer). Alm de facilitar o processo de
programao, o conceito de programa armazenado torna possvel ao programa modificar
suas prprias instrues.
Alm de ser um computador de programa armazenado, o EDVAC trazia outras inovaes:
memria de capacidade bastante aumentada (principal 1 com 1024 palavras, implementada
atravs de uma linha de atraso em mercrio, e secundria magntica de 20k palavras);
representao interna em binrio; e circuitos aritmticos binrios seriais, devido entrada de
dados serial.
A estrutura bsica de um computador de primeira gerao, que pode ser correspondente a
uma mquina semelhante ao EDVAC, mostrada na Figura 3.6.
1
A memria principal deve ser rpida: armazena pelo menos o programa em execuo e os dados
correspondentes. A memria secundria mais lenta e serve para armazenar grandes volumes de dados e
programas que no esto em execuo.

3-10

unidades de
memria
secundrias

unidade
central de
processamento

memria
principal

unidade
lgicoaritmtica

teletipo

unidade de
controle de
programa

leitora de
cartes
impressora e
perfuradora
de cartes
equipamentos de E/S

Figura 3.6 - Arquitetura de um computador de primeira gerao


Antes da execuo de um programa no EDVAC, todas as instrues e dados eram colocados
na memria principal. Uma instruo aritmtica, por exemplo, tinha o seguinte formato:
A1

A2

A3

A4

OP

que significava o seguinte: realize a operao OP com o contedo das posies de memria
principal, cujos endereos so A1 e A 2 e coloque o resultado na posio A3. O quarto
endereo, A4, especifica a posio da prxima instruo a ser executada.
Uma instruo condicional tinha o seguinte formato:
A1

A2

A3

A4

que significava o seguinte: se o nmero em A1 no menor do que o nmero em A2 ento


execute a instruo constante na posio A3, seno, execute a instruo em A4.
Ainda existia um par de instrues de entrada e sada para a transferncia de informaes
entre as memrias principal e secundria. Nestas instrues, o campo do segundo endereo
era dividido em dois componentes, um modificador de operao m, que indicava a direo da
transferncia de dados, e um nmero n, que representava o endereo do condutor no meio de
armazenamento secundrio a ser usado. O formato da instruo era:
A1

m,n

A3

A4

significando:
1. Se m = 1, transfira para o condutor n a seqncia de palavras armazenadas na memria
principal nas posies A1, A1+1, A 1+2, ....., A 3.
2. Se m = 2, transfira do condutor n a seqncia de palavras para as posies A1, A 1+1,
A1+2, ....., A 3 na memria principal.
Novamente A4 era o endereo da prxima instruo a ser realizada.
Observe na estrutura do EDVAC, mostrada na Figura 3.6, que h dois conjuntos de linhas
originados na unidade central de processamento que conduzem informaes entre esta
unidade e os equipamentos de entrada e sada. O conjunto de linhas que parte do bloco
3-11

denominado, na figura, de unidade de controle de programa conduz informaes de


controle aos elementos de E/S, determinando quais atividades devem ser realizadas nestes
elementos (por exemplo, indicando leitora de cartes que ela deve efetuar a leitura do
prximo carto, ou indicando impressora que ela deve imprimir o caracter que se encontra
disponvel). O outro conjunto de linhas, que est relacionado ao bloco unidade lgicoaritmtica conduz dados que sero ou que foram processados. Assim, este conjunto de
linhas transporta dados provenientes da leitora de cartes, transporta dados para a teletipo e
recebidos da mesma, e assim por diante.
O equipamento de entrada e sada do EDVAC consistia de um dispositivo semelhante a uma
mquina de escrever, que transferia informao diretamente para os condutores magnticos,
e uma impressora, que revertia este processo. O EDVAC tornou-se operacional em 1951.
Principais inconvenientes do EDVAC
O formato de instruo utilizado no EDVAC, bem como a arquitetura e organizao
escolhidas para a sua implementao, resultam em problemas, tais como os explicados a
seguir.
Considere o formato de uma instruo aritmtica, por exemplo, de uma soma: tem-se quatro
operandos mais o cdigo de operao. Todos os operandos correspondem a endereos de
memria; dois so endereos das parcelas, um o endereo para o armazenamento do
resultado final, e outro o endereo da prxima instruo. Isto implica em um grande
nmero de interaes com a memria, que no podem ser feitas paralelamente (considerando
a estrutura proposta). Como o tempo de acesso para leitura e escrita de informaes para a
memria grande, se comparado ao tempo empregado para processamento interno UCP,
este constitui-se em um entrave significativo aos ndices de desempenho do computador.
Este entrave referido como gargalo de von Neumann.
Como formas de resolver ou diminuir o problema, pode-se pensar em solues tais como
diminuir o nmero de operandos, fazendo com que alguns deles sejam implcitos. Por
exemplo:
se o resultado de uma operao de soma for armazenado na posio onde inicialmente
est um dos operandos, no necessrio especificar o endereo do resultado
(obviamente neste caso o valor inicial do operando ser perdido);
se o resultado de uma operao de soma for armazenado em uma posio previamente
convencionada, como no endereo seguinte ao de um dos operandos, para citar um
exemplo, ou em uma posio especial de memria destinada s para este fim, no
necessrio especificar o endereo do resultado;
se o endereo da prxima instruo for previamente convencionado, no h
necessidade de inclu-lo na instruo.
Esta especificao explcita de endereos traz outro inconveniente. No caso do EDVAC, a
memria principal tem 1024 palavras: so necessrios 10 bits para endere-la. Portanto,
uma instruo aritmtica necessitar mais de 40 bits para sua representao (4 x 10 de
endereamento mais x bits para definio da operao a ser executada) exigindo palavras de
memria grandes ou esquemas especiais de organizao de informaes.
Estes problemas comearam a ser resolvidos pelo prprio von Neumann na mquina
seguinte, que ficou conhecida pela sigla IAS.
3 . 5 Modelo de von Neumann: o computador IAS
Em 1946, Von Neumann e sua equipe iniciaram o projeto de um novo computador de
programa armazenado: o computador IAS, elaborado no Instituto de Estudos Avanados de
Princeton (Princeton Institute for Advanced Studies). Esta mquina usava como memria
principal um tubo de raios catdicos de acesso randmico, o que permitia o acesso a uma
3-12

palavra inteira em uma nica operao. Cada instruo continha somente um endereo de
memria e tinha o seguinte formato:
OP

Esta mquina foi largamente divulgada, influenciando sobremaneira o projeto subsequente de


outras mquinas. Os blocos bsicos componentes do IAS so:
uma unidade de processamento central, para execuo de operaes aritmticas e
lgicas;
uma unidade de controle de programa, para determinar o sequenciamento das instrues
a serem executadas e gerar os sinais de controle para as outras unidades. Estes sinais
determinam as aes a serem executadas;
uma unidade de memria principal, com capacidade de 4096 palavras;
uma unidade de entrada e sada.
As ligaes entre estas unidades so mostradas na Figura 3.7.
Unidade Central de Processamento
unidade lgica e aritmtica
AC
MQ
circuitos
lgico-aritmticos

equipamento
de
entrada e
sada

DR
instrues
e dados

IBR

PC

memria
principal

IR

AR

circuitos de
controle

: sinais de
:
controle

endereos

Unidade de controle de programa


Figura 3.7 - Estrutura do IAS
Na unidade central de processamento do IAS existe um novo elemento de armazenamento de
dados, que o acumulador (AC). Este elemento atua como uma memria rpida que guarda
3-13

de forma imediata o resultado das operaes realizadas na unidade lgico-aritmtica. O


acumulador empregado intensamente em instrues que realizam estas operaes.
Suponha-se a realizao de um programa que executa a soma de dois nmeros. Os dois
nmeros a serem somados esto armazenados nas posies 100 e 101 de memria. O
resultado deve ser guardado na posio 102. Na descrio abaixo, a seta () indica a
transferncia de informao; assim, A B significa que A recebe o contedo de B
Instruo
AC M(100)
AC AC + M(101)
M(102) AC

Comentrios
Transfere contedo da memria, end. 100, para acumulador
Soma contedo da posio 101 ao contedo do acumulador e
coloca o resultado no acumulador
Armazena o contedo do acumulador no endereo 102
Figura 3.8 - Exemplo de programa no IAS

Na Figura 3.7 mostrada a estrutura do computador IAS, cuja arquitetura bsica ficou
conhecida como modelo de von Neumann. A terminologia no corresponde exatamente a
utilizada originalmente; os termos esto atualizados para o seu equivalente prximo na
nomenclatura atual.
Organizao da memria
A memria do IAS tinha 212 = 4096 palavras, sendo as palavras compostas por 40 bits.
Estes 40 bits, eram a quantidade de informaes que podiam ser transferidas, em cada
momento, da UCP para a memria (em um passo). Estas palavras armazenadas na memria
podiam corresponder a instrues ou a dados.
Formato dos dados
Os dados eram nmeros binrios representados em ponto fixo e codificados em
complemento de dois. Sendo assim, o bit mais a esquerda do nmero correspondia ao sinal
do mesmo e as operaes de soma e subtrao eram ambas executadas por um somador. O
ponto do nmero estava supostamente entre os bits 0 e 1, permitindo assim a representao
direta apenas de nmeros situados no intervalo entre 0 e 1; os demais nmeros deveriam ser
previamente ajustados antes da realizao de clculos. O formato de um dado representado
a seguir.
0 1

39

Bit de sinal
Figura 3.9 - Formato dos dados do IAS
Formato das instrues: cada instruo podia ser representada com 20 bits; portanto,
uma palavra de memria podia acomodar 2 instrues. Oito bits, os mais da esquerda ou
mais significativos eram usados para o cdigo da operao a ser realizada, e os outros doze
bits eram usados para especificar o endereo de uma posio de memria, conforme
mostrado abaixo.
Instruo posicionada esquerda
0
8
cd.operao

endereo

Instruo posicionada direita


19 20
28
cd.operao

Figura 3.10 - Formato das instrues do IAS


3-14

39
endereo

Comparando-se esta instruo com o formato de instruo anteriormente apresentado para o


EDVAC, na qual eram expressos 4 endereos, pode-se observar que ocorreu uma reduo
substancial no comprimento da palavra de instruo. As alteraes na organizao do IAS,
que tornaram possvel esta reduo so as seguintes:
h registradores pr-definidos na UCP para armazenarem operandos e resultados,
isto , os endereos dos registradores da UCP esto implcitos no cdigo de
operao. Assim, as instrues do IAS utilizam estes registradores automaticamente.
as instrues de um programa esto armazenadas na memria principal de maneira
quase inteiramente seqencial (excetuando os casos de desvio apenas), considerado o
seguimento que deve ser usado na execuo; portanto, o endereo da prxima
instruo o endereo atual mais 1. Isto elimina a necessidade do campo onde
constava o endereo da prxima instruo. As situaes em que devem ocorrer
desvios so resolvidas por instrues especiais.
3 . 5 . 1 Organizao da UCP
A UCP do IAS contm alguns registradores para armazenamento temporrio de instrues,
endereos de memria e dados. O processamento de dados realizado pelos circuitos lgicoaritmticos. Os circuitos de controle decodificam instrues, direcionam a informao atravs
do sistema, e fornecem a temporizao dos sinais para todas as aes. Existe um relgio para
a sincronizao da operao do sistema. Basicamente, existem as seguintes estruturas, cujas
funes so descritas resumidamente:
memria principal M: para o armazenamento de programas e dados;
registrador de dados DR (com 40 bits): recebe dados lidos da posio X da memria
(DR M(X)) ou fornece dados que sero gravados na posio X da memria
(M(X) DR). Tambm pode ser usado para armazenar dados temporariamente,
durante a execuo de uma instruo;
registrador de endereos AR (com 12 bits): armazena o endereo que servir para
apontar posies da memria;
acumulador AC: armazenamento temporrio de operandos;
registrador multiplicador-quociente MQ: armazenamento temporrio de operandos;
registrador IBR: como no IAS so lidas simultaneamente duas instrues da memria,
a que no executada imediatamente armazenada no IBR; a que ser executada em
seguida, o cdigo de operao armazenado no registrador de instrues IR, onde
decodificado. O campo de endereo desta instruo transferido para AR;
contador de programa PC ou registrador de endereo da instruo: armazena o
endereo da prxima instruo a ser executada.
3 . 5 . 2 Conjunto de instrues
As instrues do IAS esto listadas na Tabela 3.3 a seguir. Elas esto divididas em
agrupamentos de acordo com a sua funo: instrues de transferncia, de desvio
condicional e incondicional, aritmticas e de modificao de endereo.
Para a descrio usada uma linguagem de transferncia a nvel de registradores, que
descreve brevemente as instrues e microoperaes que ocorrem a nvel interno no
computador. As posies de armazenamento so descritas por siglas (como, AR, M), a
transferncia de informaes descrita por uma seta, e os elementos de armazenamento
3-15

matriciais, como a memria, so especificados por ndices entre parnteses. Portanto, na


memria de 4096 x 40, como o caso do IAS, M(X,0:19) indica os bits de 0 a 19 da palavra
na posio ou endereo X da memria.
Conjunto de instrues do computador IAS
Tipo instruo Notao
Transferncia de AC MQ
dados
MQ M(X)

AC M(X)

Descrio
Transfere contedo do reg. MQ para o
acumulador AC
Transfere contedo da posio X de
memria para MQ
Transfere contedo de AC para a posio
de memria X
Transfere M(X) para AC

AC M(X)

Transfere M(X) para AC

AC |M(X)|

Transfere valor absoluto de M(X) para AC

M(X) AC

Desvio
incondicional
Desvio
condicional

Aritmtica

AC |M(X)|
go to M(X, 0:19)

Transfere |M(X)| para AC


busque a prxima instruo da metade
esquerda de M(X)
go to M(X, 20:39)
busque a prxima instruo da metade
direita de M(X)
se AC 0 ento desvie se o nmero em AC no for negativo,
para M(X,0:19)
busque a prxima instruo na metade
esquerda de M(X)
se AC 0 ento desvie se o nmero em AC no for negativo,
para M(X,20:39)
busque a prxima instruo na metade
direita de M(X)
Some M(X) a AC; resultado em AC
AC AC + M(X)
Some |M(X)| a AC; resultado em AC
AC AC + |M(X)|
AC AC M(X)
AC AC |M(X)|

Subtraia M(X) de AC; resultado em AC


Subtraia |M(X)| de AC; resultado em AC

Multiplique M(X) por MQ; coloque os bits


mais significativos do resultado em AC e
os menos signif. em MQ
Divida AC por M(X); coloque o quociente
MQ,AC AC M(X)
em MQ e o resto em AC
Multiplique
AC por 2; i.e., desloque em
AC AC x 2
um bit esquerda
Divida AC por 2; i.e., desloque em um bit
AC AC 2
direita
de M(X,8:19) AC(28:39) Substitua campo de endereo esquerda de
M(X) pelos 12 bits mais direita de AC
M(X,28:39) AC(28:39) Substitua campo de endereo direita de
M(X) pelos 12 bits mais direita de AC
AC,MQ MQ * M(X)

Modificao
endereo

Tabela 3.3 - Conjunto de instrues do computador IAS


As instrues de transferncia possibilitam a transferncia entre posies de memria e
registradores da UCP, sem que haja modificao nas informaes (exceto nos casos em que
alterado o sinal). As instrues de desvio fazem com que seja buscado um novo endereo,
para a prxima instruo, na memria (se atendida uma condio, no caso do desvio
condicional). Estas instrues portanto permitem a alterao da seqncia de execuo de um
programa.
3-16

As instrues aritmticas fornecem os comandos bsicos de processamento de informaes


ao computador. As instrues de modificao de endereo permitem o cmputo de endereos
na unidade lgico-aritmtica e sua insero posterior em instrues armazenadas na memria.
Esta propriedade permite que o computador altere suas prprias instrues, o que se constitui
em uma caracterstica importante das mquinas de programa armazenado.
3 . 6 Arquiteturas de 4, 3, 2, 1 e 0 endereos
Enquanto o EDVAC trabalhava basicamente com 4 endereos, o IAS apresentava somente
um endereo. Mesmo assim, ambas arquiteturas possuam as mesmas capacidades. Para
ilustrar como isto possvel, e tambm para analisar como a quantidade de endereos de
memria influencia nas instrues e na prpria arquitetura, so exemplificadas a seguir
mquinas de 4 endereos (como o EDVAC), de 3 endereos, de 2 endereos, de 1 endereo
(como o IAS) e at as mquinas de zero endereos (por endereo entende-se uma referncia
memria). Ao invs de uma anlise detalhada de arquiteturas tpicas de cada caso, ser
apresentada unicamente a programao de uma equao aritmtica:
A = ((B + C)*D + E F) / (G * H)
As letras A at H denotam posies de memria (endereos), e supe-se que a arquitetura
analisada possui as quatro operaes aritmticas (ADD para soma, SUB para subtrao,
MUL para multiplicao e DIV para diviso). O formato exato de cada instruo, assim como
os tamanhos de operandos e instrues so irrelevantes nesta anlise.
3 . 6 . 1 Arquitetura de 4 endereos
Em uma arquitetura tpica de 4 endereos, as instrues apresentam o formato
OP

E1

E2

E3

E4

onde OP representa a operao a ser realizada, E1 e E2 indicam a localizao dos dois


operados fontes desta operao, E3 indica a localizao do operando destino (onde o
resultado deve ser armazenado) e E4 indica o endereo onde est localizada a prxima
instruo a ser executada. Note-se que a ordem destes 4 endereos dentro da instruo pode
variar.
Um programa que execute o clculo da equao acima pode ser visto a seguir. Note-se que
este programa foi otimizado para evitar o uso de outras posies adicionais de memria, e
representa somente uma entre inmeras implementaes possveis.
Endereo
e1
e2
e3
e4
e5
e6
e7

Instruo
ADD B C A e2
MUL A D A e3
ADD A E A e4
SUB A F A e5
DIV A G A e6
DIV A H A e7
HALT

Comentrio
Soma B com C, resultado em A; vai para e2
Multiplica A por D, resultado em A; vai para e3
Soma A com E, resultado em A; vai para e4
Subtrai F de A, resultado em A; vai para e5
Divide A por G, resultado em A; vai para e6
Divide A por H, resultado final em A; vai para e7
Fim do programa

Figura 3.11 - Programa em uma mquina de 4 endereos


Como cada instruo traz implicitamente o endereo da prxima instruo, no existe a
necessidade de instrues explcitas de desvio (como JUMP e BRANCH). Alm disto, uma
arquitetura de 4 endereos permite potencialmente a execuo de uma operao de

3-17

manipulao de dados e uma operao de desvio do fluxo do programa em uma nica


instruo.
Entretanto, a prtica demonstrou que normalmente os programas eram escritos
sequencialmente, isto , uma instruo seguindo a anterior. Com isto modificou-se o
mecanismo de sequenciamento das instrues, o que deu origem s arquiteturas de trs
endereos.
3 . 6 . 2 Arquitetura de 3 endereos
Em uma arquitetura tpica de 3 endereos, as instrues apresentam o formato
OP

E1

E2

E3

onde OP representa a operao a ser realizada, E1 e E2 indicam a localizao dos dois


operados fontes desta operao e E3 indica a localizao do operando destino.
Para localizar a prxima instruo a ser executada, criou-se um registrador especfico,
denominado de PC (do ingls Program Counter, veja-se seo 3.3.3). Implicitamente, o PC
aponta para o endereo seguinte ao da instruo sendo executada. Assim, o programa fica:
Endereo
e1
e1+1
e1+2
e1+3
e1+4
e1+5
e1+6

Instruo
ADD B C A
MUL A D A
ADD A E A
SUB A F A
DIV A G A
DIV A H A
HALT

Comentrio
Soma B com C, resultado em A; incrementa PC
Multiplica A por D, resultado em A; incrementa PC
Soma A com E, resultado em A; incrementa PC
Subtrai F de A, resultado em A; incrementa PC
Divide A por G, resultado em A; incrementa PC
Divide A por H, resultado final em A; incrementa PC
Fim do programa

Figura 3.12 - Programa em uma mquina de 3 endereos


Com a reduo de 4 para 3 endereos, existe uma reduo do tamanho da instruo e uma
consequente reduo do tamanho da memria necessria para armazenar os programas.
Naturalmente, perdeu-se um grau de liberdade: a determinao do endereo da prxima
instruo. Existe agora a necessidade de instrues explcitas de desvio (como JUMP e
BRANCH), e no se pode mais executar simultaneamente uma operao de manipulao de
dados e uma operao de desvio do fluxo do programa em uma nica instruo. A economia
de memria, assim como a obrigatoriedade de desenvolvimento de programas sequenciais
(mais fceis de serem testados, entendidos e corrigidos), entretanto, compensavam este grau
de liberdade perdido.
Instrues de trs endereos, entretanto, ainda consomem muita memria. Alm disto,
observando-se o programa acima, nota-se que na maioria da vezes um dos operandos fonte e
o operando destino indicam o mesmo endereo (como o caso do operando A). Com isto
modificou-se a maneira de indicar os operandos, o que deu origem s arquiteturas de dois
endereos.
3 . 6 . 3 Arquitetura de 2 endereos
Em uma arquitetura tpica de 2 endereos, as instrues apresentam o formato
OP

E1

E2

onde OP representa a operao a ser realizada, E1 e E2 indicam a localizao dos dois


operados fontes desta operao e E1 tambm indica a localizao do operando destino.
Assim, E1 tem dupla funo, e no so mais possveis instrues com trs operandos
3-18

distintos. Isto permite uma maior reduo nos bits necessrios para especificar os endereos
dos operandos, mas introduz uma restrio sria: o resultado da operao ser armazenado
no endereo de um dos dois operandos fonte, ou seja, um destes dois operandos ser
necessariamente alterado. Esta restrio foi contornada com a criao de uma classe extra de
instrues, as instrues de movimentao de dados, que permitem copiar operandos de uma
posio para outra, conforme pode ser visto no programa a seguir:
Endereo
e1
e1+1
e1+2
e1+3
e1+4
e1+5
e1+6
e1+7

Instruo
MOV A B
ADD A C
MUL A D
ADD A E
SUB A F
DIV A G
DIV A H
HALT

Comentrio
Move B para A
Soma A com C, resultado em A
Multiplica A por D, resultado em A
Soma A com E, resultado em A
Subtrai F de A, resultado em A
Divide A por G, resultado em A
Divide A por H, resultado final em A
Fim do programa

Figura 3.13 - Programa em uma mquina de 2 endereos


Comparando-se este programa com o da arquitetura de trs endereos, nota-se que a primeira
instruo (ADD B C A) foi substituda por outras duas, uma de movimentao (MOV A B) e
outra de manipulao de dados (ADD A C). O resultado final o mesmo, mas o programa
possui mais instrues. Entretanto, as instrues so menores, o que em termos lquidos
proporciona uma grande economia de bits.
Com a criao de registradores especiais, pode-se reduzir ainda mais o nmero de endereos,
criando-se ento as arquiteturas de um endereo.
3 . 6 . 4 Arquitetura de um endereo
Em uma arquitetura tpica de um endereo, as instrues apresentam o formato
OP

E1

onde OP representa a operao a ser realizada e E1 indica a localizao de um operando de


memria (normalmente um dos operandos fontes da operao). O outro operando
implicitamente assumido como sendo um registrador especfico, o acumulador (normalmente
abreviado por AC, veja-se seo 7.2). O Acumulador assume os papis de um dos
operandos fonte e do operando destino. Em relao s arquiteturas de dois endereos, agora
as instrues de movimentao de dados devem ser subdivididas de acordo com o sentido da
transferncia: se da memria para o acumulador (LDA, de LoaD Acumulator), ou se do
acumulador para a memria (STA, de STore Acumulator).O programa exemplo deve ser
conveniente modificado para refletir esta situao (observe-se a instruo extra no fim do
programa):
Endereo
e1
e1+1
e1+2
e1+3
e1+4
e1+5
e1+6
e1+7
e1+8

Instruo
LDA B
ADD C
MUL D
ADD E
SUB F
DIV G
DIV H
STA A
HALT

Comentrio
Move B para Acumulador
Soma Acum. com C, resultado no Acumulador
Multiplica Acum. por D, resultado no Acumulador
Soma Acum. com E, resultado no Acumulador
Subtrai F do Acum., resultado no Acumulador
Divide Acum. por G, resultado no Acumulador
Divide Acum. por H, resultado no Acumulador
Armazena Acum. no endereo de A
Fim do programa

Figura 3.14 - Programa em uma mquina de um endereo


3-19

Comparando-se este programa com o da arquitetura de trs endereos, nota-se que existem
duas instrues adicionais de transferncia de dados, uma no incio do programa (LDA B) e
outra no fim (STA A). A grande vantagem deste tipo de arquitetura est na economia dos
acessos memria: praticamente cada operando foi lido ou escrito uma nica vez, o que no
ocorre nas arquiteturas anteriores. Este justamente o papel dos registradores locais (ou
acumuladores): permitir que resultados intermedirios ou dados muito utilizados no
precisem ser lidos ou escritos da memria a cada vez que forem utilizados.
3 . 6 . 5 Arquitetura de zero endereos
Em uma arquitetura tpica de zero endereos, as instrues apresentam o formato
OP
ou seja, no existe nenhuma referncia explcita a endereos de memria onde estejam
localizados os operandos. Uma possvel soluo para determinar a posio dos operandos
coloc-los em uma regio especfica de memria, com determinado mecanismo de acesso.
Uma estrutura muito utilizada para estes fins uma pilha: os operandos so sempre retirados
do topo da pilha, e o resultado da operao sempre colocado no topo da pilha. Para facilitar
a operao desta estrutura de pilha, as equaes so escritas utilizando-se notao polonesa
reversa, onde o smbolo da operao escrito aps os dois operandos. Assim, por exemplo,
A+B seria escrito AB+. Com isto, a equao exemplo fica:
HGFEDCB+*+//
E o programa que a implementa seria:
Endereo
e1
e1+1
e1+2
e1+3
e1+4
e1+5
e1+6
e1+7
e1+8
e1+9
e1+10
e1+11
e1+12
e1+13
e1+14

Instruo
PUSH H
PUSH G
PUSH F
PUSH E
PUSH D
PUSH C
PUSH B
ADD
MUL
ADD
SUB
DIV
DIV
POP A
HALT

Comentrio
Coloca H no topo (atual) da pilha
Coloca G no topo da pilha
Coloca F no topo da pilha
Coloca E no topo da pilha
Coloca D no topo da pilha
Coloca C no topo da pilha
Coloca B no topo da pilha
Topo da pilha recebe B+C
(B e C so retirados da pilha)
Topo recebe (B+C)*D
Topo recebe (B+C)*D + E
Topo recebe (B+C)*D + E - F
Topo recebe ((B+C)*D + E - F)/G
Topo recebe ((B+C)*D + E - F)/G*H
Topo da pilha armazenado em A
Fim do programa

Figura 3.15 - Programa em uma mquina de zero endereos


Note-se que duas instrues (PUSH e POP) na realidade utilizam endereos. Estas so,
entretanto, as duas nicas instrues que necessitam referenciar endereos, e so somente
operaes de transferncia de dados. Uma arquitetura pura de zero endereos no apresenta
vantagens marcantes sobre arquiteturas de um ou dois endereos, e por causa disto no so
muito difundidas. Os computadores atuais, entretanto, possuem estruturas do tipo pilha para
propsitos especficos. Isto ser assunto de outras disciplinas.

3-20

Captulo
QUATRO
Computador hipottico Neander

O computador NEANDER foi criado com intenes didticas1 e extremamente simples.


To simples que voc, sem muito esforo, pode projet-lo. Experimente!
4 . 1 Caractersticas
O computador NEANDER tem as seguintes caractersticas:
Largura de dados e endereos de 8 bits
Dados representados em complemento de dois
1 acumulador de 8 bits (AC)
1 apontador de programa de 8 bits (PC)
1 registrador de estado com 2 cdigos de condio: negativo (N) e zero (Z)
4 . 2 Modos de endereamento
O NEANDER s possui um modo de endereamento: o modo direto (muitas vezes tambm
chamado de absoluto).
No modo de endereamento direto (Figura 4.1), a palavra que segue o cdigo da instruo
contm, nas instrues de manipulao de dados, o endereo de memria do operando.
Nas instrues de desvio, o endereo contido na instruo corresponde posio de
memria onde est uma instruo a ser executada.
memria
endere

operando

Figura 4.1- Modo de endereamento direto

Esta pseudo-mquina foi criada pelos Profs. Raul Weber e Taisy Weber para a antiga disciplina CPD148 Arquitetura de Computadores I. Possui simulador e depurador associados, que podem ser vistos no apndice A.

4-1

4 . 3 Conjunto de instrues
O conjunto de instrues de NEANDER compreende 11 instrues, codificadas atravs dos
quatro bits mais significativos da palavra que contm o cdigo da instruo (Tabela 4.1):
Cdigo
0000
0001
0010
0011
0100
0101
0110
1000
1001
1010
1111

Instruo
NOP
STA
LDA
ADD
OR
AND
NOT
JMP
JN
JZ
HLT

end
end
end
end
end
end
end
end

Comentrio
nenhuma operao
armazena acumulador - (store)
carrega acumulador - (load)
soma
ou lgico
e lgico
inverte (complementa) acumulador
desvio incondicional - (jump)
desvio condicional - (jump on negative)
desvio condicional - (jump on zero)
trmino de execuo - (halt)

Tabela 4.1 - Conjunto de instrues do NEANDER


Na Tabela 4.1, end significa endereo direto. Nas instrues STA, LDA, ADD, OR e AND,
end corresponde ao endereo de operando. Nas instrues JMP , JN e JZ, end corresponde
ao endereo de desvio. As aes efetuadas por cada uma das instrues da Tabela 4.1 podem
ser vistas na Tabela 4.2, a seguir:
Instruo
NOP
STA
LDA
ADD
OR
AND
NOT
JMP
JN
JZ

end
end
end
end
end

Comentrio
nenhuma operao
MEM(end) AC
AC MEM(end)
AC MEM(end) + AC
AC MEM(end) OR AC
AC MEM(end) AND AC

end
end
end

AC NOT AC
PC end
IF N =1 THEN PC end
IF Z =1 THEN PC end

Tabela 4.2 - Aes executadas


Na Tabela 4.2 AC o acumulador, MEM (end) significa contedo da posio end de
memria, N e Z so os cdigos de condio e representa uma atribuio.
4 . 4 Cdigos de condio
A unidade lgica e aritmtica de NEANDER fornece os seguintes cdigos de condio, que
so usados pelas instrues JN e JZ (vide Tabela 4.2):
N - (negativo) :

sinal do resultado
1 - resultado negativo
0 - resultado positivo

Z - (zero) : indica resultado igual a zero


1 - resultado igual a zero
0 - resultado diferente de zero

4-2

As instrues lgicas e aritmticas (ADD, NOT, AND, OR) e a instruo de transferncia LDA
afetam os cdigos de condio N e Z. As demais instrues (STA, JMP, JN, JZ, NOP e HLT)
no alteram os cdigos de condio.
4 . 5 Formato das instrues
As instrues de NEANDER so formadas por um ou dois bytes, ou seja, ocupam uma ou
duas posies na memria (Figura 4.2).

cdigo

don't care

endereo direto

Figura 4.2 - Formato de instruo no NEANDER


Nas instrues de um byte, os 4 bits mais significativos contm o cdigo da instruo. Nas
instrues de dois bytes, o primeiro byte contm o cdigo (tambm nos 4 bits mais
significativos) e o segundo byte contm um endereo. Instrues de dois bytes, no
NEANDER, so aquelas instrues que fazem referncia memria.
4 . 6 Exemplo de programao
Vamos considerar, como exemplo, um programa que realiza a soma de 3 posies
consecutivas da memria e armazena o resultado numa quarta posio. Inicialmente, devem
ser escolhidas a rea de dados e a rea de programa, ou seja, a localizao das instrues e
dados na memria. No existem critrios para essa escolha, mas deve ser observado que a
rea de programa no pode invadir a rea de dados e vice-versa. Seja, para esse programa,
escolhida uma alocao de memria de tal forma que o programa ocupe a metade inferior da
memria e os dados a metade superior, como segue:
rea de programa
incio do programa

posio 0 (0H)

rea de dados
primeira parcela
segunda parcela
terceira parcela
resultado

posio 128
posio 129
posio 130
posio 131

(80H)
(81H)
(82H)
(83H)

O programa seria:
Simblico

Comentrios

LDA 128
ADD 129
ADD 130
STA 31
HLT

% acumulador A recebe contedo da posio 128


% contedo de A somado ao contedo da posio 129
% contedo de A somado ao contedo da posio 130
% contedo de A copiado na posio 131
% processador para

4-3

Esse programa pode ser editado em linguagem de mquina (tanto em hexa como em
decimal), depurado e executado usando o simulador/depurador NEANDER, cujos comandos
foram apresentados no captulo respectivo. A codificao em linguagem de mquina
correspondente a cada uma das instrues mostradas acima seria:
Simblico

Hexa

Decimal

LDA 128
ADD 129
ADD 130
STA 131
HLT

20
30
30
10
F0

32
48
48
16
240

80
81
82
83

128
129
130
131

4 . 7 Concluso
NEANDER um computador muito simples, desenvolvido apenas para fins didticos.
Processadores modernos so muito mais complexos que NEANDER. Entretanto, mesmo
processadores utilizados nas mais sofisticadas estaes de trabalho so baseados nos
conceitos elementares que voc aprendeu com NEANDER.
4 . 8 Exerccios de programao usando o NEANDER
Os exerccios apresentados aqui so apenas uma amostra do que pode ser programado com
NEANDER. Na definio de novos problemas, o nico cuidado que deve ser tomado com
a memria disponvel para programa e dados, que compreende apenas 256 posies. Exceto
onde explicitado, todos os nmeros e endereos so representados na base decimal.
Para todos os programas sugeridos, vale a seguinte conveno:
incio do programa
- posio 0 (0H)
incio da rea de dados - posio 128 (80H)
Essa conveno adotada apenas para facilitar a correo dos programas.
1. Limpar o acumulador: faa 4 programas diferentes que zerem o acumulador.
2. Somar duas variveis de 8 bits: faa um programa para somar duas variveis
representadas em complemento de dois. As variveis e o resultado esto dispostos
segundo o mapa de memria abaixo:
posio 128: primeira varivel
posio 129: segunda varivel
posio 130: resultado
3. Subtrair duas variveis: faa um programa para subtrair duas variveis de 8 bits
representadas em complemento de dois. O resultado deve aparecer na posio de memria
consecutiva s ocupadas pelas variveis.
posio 128: minuendo
posio 129: subtraendo
posio 130: resultado
4. Comparao: determine qual a maior de 3 variveis positivas de 8 bits armazenadas em
posies consecutivas de memria. O resultado (ou seja, a maior varivel), deve aparecer
na primeira posio livre de memria na rea reservada aos dados.
5. Determinao de overflow na soma: faa um programa que determine a ocorrncia de
overflow na soma de duas variveis. As variveis so de 8 bits em complemento de dois e
esto armazenadas em posies consecutivas de memria. O resultado da soma, tambm
4-4

em 8 bits, deve aparecer na primeira posio livre e overflow deve ser indicado da
seguinte forma:
posio 130: contedo = 0H
contedo = FFH

quando no ocorreu overflow


quando ocorreu overflow

6. Limpeza de uma rea de memria: faa um programa para zerar 32 posies consecutivas
na memria.

4-5

Captulo
CINCO
Computador hipottico Ahmes

O computador AHMES1 foi criado com intenes didticas, para possibilitar a


implementao de rotinas aritmticas simples (como adio e subtrao) e a programao de
rotinas relativamente complexas (como multiplicao e diviso). compatvel com o
NEANDER, mas apresenta instrues extras para facilitar a execuo de operaes
aritmticas.
5 . 1 Caractersticas
O computador AHMES tem as seguintes caractersticas:
Largura de dados e endereos de 8 bits.
Dados representados em complemento de dois.
1 acumulador de 8 bits (AC), onde armazenado o resultado das operaes.
1 apontador de programa de 8 bits (PC), que indica qual a prxima instruo a ser
executada.
1 registrador de estado com 5 cdigos de condio: negativo (N), zero (Z), carry
out (vai-um) (C), borrow out (empresta-um) (B) e overflow (estouro) (V).
5 . 2 Modos de endereamento
O AHMES s possui um modo de endereamento: o modo direto. Neste modo, a palavra
que segue o cdigo da instruo contm, nas instrues de manipulao de dados, o
endereo do operando (Figura 5.1). Nas instrues de desvio, o endereo contido na
instruo corresponde ao endereo da prxima instruo.

instruo

memria

endereo

operando

Figura 5.1 - Modo de endereamento direto


1

Este computador simulado foi batizado em homenagem ao escriba Ahmes, do antigo Egito (1650 A.C.),
autor de uma srie de papiros contendo regras que possibilitavem clculos aritmticos complexos, como o
clculo de rea de polgonos e manipulao de fraes.

5-1

5 . 3 Conjunto de instrues
O conjunto de instrues de AHMES compreende 24 instrues, codificadas atravs de um
byte de cdigo (Tabela 5.1). Note-se que, na maioria das vezes, os quatro bits mais
significativos so suficientes para definir completamente a instruo.
Cdigo binrio
(relevante)
0000 xxxx
0001 xxxx
0010 xxxx
0011 xxxx
0100 xxxx
0101 xxxx
0110 xxxx
0111 xxxx
1000 xxxx
1001 00xx
1001 01xx
1001 10xx
1001 11xx
1010 00xx
1010 01xx
1011 00xx
1011 01xx
1011 10xx
1011 11xx
1110 xx00
1110 xx01
1110 xx10
1110 xx11
1111 xxxx

Cdigo binrio
(com zeros)
0000 0000
0001 0000
0010 0000
0011 0000
0100 0000
0101 0000
0110 0000
0111 0000
1000 0000
1001 0000
1001 0100
1001 1000
1001 1100
1010 0000
1010 0100
1011 0000
1011 0100
1011 1000
1011 1100
1110 0000
1110 0001
1110 0010
1110 0011
1111 0000

Cdigo
hexadecimal
00
10
20
30
40
50
60
70
80
90
94
98
9C
A0
A4
B0
B4
B8
BC
E0
E1
E2
E3
F0

Cdigo
decimal
0
16
32
48
64
80
96
112
128
144
148
152
156
160
164
176
180
184
188
224
225
226
227
240

Instruo
(mnemnico)
NOP
STA
LDA
ADD
OR
AND
NOT
SUB
JMP
JN
JP
JV
JNV
JZ
JNZ
JC
JNC
JB
JNB
SHR
SHL
ROR
ROL
HLT

end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end

Tabela 5.1 - Conjunto de instrues do AHMES


A primeira coluna da Tabela 5.1 indica, em binrio, quais so os bits relevantes da
codificao. Somente os bits indicados em zero e em um so relevantes para identificar a
instruo. Os bits marcados com um x so irrelevantes (dont care), ou seja, seu valor no
interfere na decodificao da instruo. Por simplicidade, todos os x sero substitudos por
zeros, como pode ser visto nas demais colunas.
A ltima coluna indica o mnemnico da instruo, ou seja, uma sigla de duas ou trs letras
que visa facilitar a compreenso da instruo por um ser humano. Para o computador estes
mnemnicos so desnecessrios, uma vez que ele sempre trabalha com cdigos binrios.
Note-se inclusive que os prprios cdigos hexadecimal e decimal tambm s so usados para
a convenincia humana.
A Tabela 5.2 mostra a execuo de cada instruo, tal como ela realizada pelo computador.
Nesta tabela, AC representa o acumulador, PC representa o program counter (apontador
de instrues), end indica um endereo de memria, MEM(end) o contedo da posio de
memria endereada por end, e N, V, Z, C e B indicam os cdigos de condio negativo,
overflow, zero, carry e borrow, respectivamente.
As instrues podem ser divididas em diversas classes ou categorias, de acordo com a sua
funo principal. As instrues STA e LDA formam o grupo de movimentao de dados, ou
seja, so responsveis por levar os dados de e para a memria. As instrues ADD e SUB so
as instrues aritmticas, e as instrues OR, AND e NOT formam o grupo das instrues
5-2

lgicas, uma vez que usam operaes da lgebra booleana (mas manipulando oito bits de
cada vez, e no um s bit). As instrues JMP , JN, JP, JV, JNV, JZ, JNZ, JC, JNC, JB e JNB so
as instrues de desvio, e nelas end corresponde ao endereo de desvio, ou seja, qual o
endereo da prxima instruo a ser executada. As instrues SHR , SHL, ROR e ROL so as
instrues de deslocamento.
Instruo Execuo
nenhuma operao
end MEM(end) AC
end AC MEM(end)
end AC AC + MEM(end)
end AC AC or MEM (end)
end AC AC and MEM(end)

NOP
STA
LDA
ADD
OR
AND
NOT
SUB
JMP
JN
JP
JV
JNV
JZ
JNZ
JC
JNC
JB
JNB
SHR
SHL
ROR
ROL
HLT

end
end
end
end
end
end
end
end
end
end
end
end

AC NOT AC
AC AC MEM(end)
PC end
IF N =1 THEN PC end
IF N =0 THEN PC end
IF V =1 THEN PC end
IF V =0 THEN PC end
IF Z =1 THEN PC end
IF Z =0 THEN PC end
IF C =1 THEN PC end
IF C =0 THEN PC end
IF B=1 THEN PC end
IF B=0 THEN PC end
CAC(0); AC(i-1)AC(i); AC(7) 0
CAC(7); AC(i)AC(i-1); AC(0)0
CAC(0); AC(i-1)AC(i); AC(7)C
CAC(7); AC(i)AC(i-1); AC(0)C

Interrompe o processamento

Comentrio
nenhuma operao
armazena acumulador na memria (store)
carrega acumulador da memria (load)
soma
ou lgico
e lgico
inverte (complementa) acumulador
subtrao
desvio incondicional (jump)
desvio condicional (jump if negative)
desvio condicional (jump if positive)
desvio condicional (jump if overflow)
desvio condicional (jump if not overflow)
desvio condicional (jump if zero)
desvio condicional (jump if non-zero)
desvio condicional (jump if carry)
desvio condicional (jump if not carry)
desvio condicional (jump if borrow)
desvio condicional (jump if not borrow)
deslocamento para direita (shift right)
deslocamento para esquerda (shift left)
rotao para direita (rotate right)
rotao para esquerda (rotate left)
trmino de execuo - (halt)

Tabela 5.2 - Aes executadas

5 . 4 Cdigos de condio
A unidade lgica e aritmtica de AHMES fornece os seguintes cdigos de condio, que so
usados pelas instrues de desvio condicional (conforme Tabela 5.2):
N - (negativo) : sinal do resultado, interpretado como complemento de dois
1 - resultado negativo
0 - resultado positivo
Z - (zero) : indica resultado igual a zero, interpretado como complemento de dois
1 - resultado igual a zero
0 - resultado diferente de zero
V - (overflow) :

indica estouro de representao aps uma instruo de soma ou


subtrao, interpretando os operandos e o resultado como complemento
de dois
1 - houve estouro de representao do resultado
0 - no houve estouro (resultado est correto)

C - (carry) :
indica a existncia de um vai-um aps uma operao de soma
1 - ocorreu vai-um
5-3

0 - no ocorreu vai-um
B - (borrow) :
indica a existncia de um empresta-um aps uma operao de subtrao
1 - ocorreu empresta-um
0 - no ocorreu empresta-um
As instrues do AHMES afetam os cdigos de condio conforme indicado na Tabela 5.3.
Note-se que somente as instrues aritmticas, lgicas e de deslocamento (alm da instruo
LDA) afetam os cdigos de condio. As instrues de desvio (e a instruo STA), apesar de
testarem este cdigos, no os alteram.
Instruo
NOP
STA
LDA
ADD
OR
AND
NOT
SUB
JMP
Jxxx
SHR
SHL
ROR
ROL
HLT

end
end
end
end
end
end
end
end

Cdigos alterados
nenhum
nenhum
N, Z
N, Z, V, C
N, Z
N, Z
N, Z
N, Z, V, B
desvio incondicional - nenhum
desvios condicionais - nenhum
N, Z, C
N, Z, C
N, Z, C
N, Z, C
nenhum

Tabela 5.3 - Cdigos de condio ajustados


Observao: como o AHMES um computador com propsitos didticos, os seus cdigos
de condio no correspondem exatamente queles encontrados em um computador real.
Assim, por exemplo, borrow (B) e carry (C) so normalmente reunidos em um nico cdigo
de condio, chamado simplesmente de carry.
5 . 5 Manipulao aritmtica
Nos trechos de programas apresentados a seguir e nos captulos seguintes ser utilizada a
notao simblica, com mnemnicos no lugar de cdigos decimais ou hexadecimais. No
simulador AHMES, entretanto, a codificao dever necessariamente ser realizada em forma
numrica. Esta restrio tambm possui caracter didtico, para que a linguagem de
mquina do computador seja bem exercitada.
5 . 5 . 1 Aritmtica em complemento de dois
AHMES trabalha naturalmente com complemento de dois (os seus componentes de hardware
foram projetados para isto). Assim, somas e subtraes so realizadas diretamente atravs
das instrues de ADD e SUB. Os cinco cdigos de condio (N, Z, V, C e B) tambm
refletem diretamente o resultado destas instrues.
Para inverter o sinal de nmero, existem duas possibilidades. Seja a o nmero a ter seu
sinal trocado. Ento tem-se:
1. Realizar a operao 0 a, atravs da operao SUB. Isto exige carregar zero no
acumulador e depois subtrair o nmero a. O resultado est no acumulador.

5-4

2. Realizar a operao not(a) + 1. Isto utiliza a troca de sinal em complemento de um (que


inverte todos os bits do nmero, e implementado atravs da operao NOT) e a
seguir soma um para obter o complemento de dois:
not(a) = a 1
(em complemento de um)
not(a) + 1 = a 1 + 1 = a
(em complemento de dois)
Sobre os cdigos de condio, algumas observaes importantes devem ser feitas:
1. Carry (C) e overflow (V) no so sinnimos. Conforme foi visto na seo 2.6, em
aritmtica de complemento de dois podem ocorrer as quatro combinaes possveis:
sem carry nem overflow, somente carry, somente overflow e tanto carry como
overflow. Isto pode ser verificado com um programa simples, como ilustrado a seguir.
LDA 128
ADD 129
HLT

% primeiro operando est na posio 128


% segundo operando est na posio 129
% resultado est no acumulador

Experimente agora com diversos pares de operandos nos endereos 128 e 129:
1.1: 7 e 5, 15 e 12, 100 e 26, 110 e 17. Em todos estes casos, a soma no produz nem
carry nem overflow.
1.2: 7 e 251 (-5 em complemento de dois), 15 e 244 (-12 em complemento), 100 e 230
(-26), 110 e 239 (-17). Nestes casos, a soma produz carry (C=1), mas no overflow
(V=0). Isto indica que o resultado est correto. O mesmo ocorre para 249 e 251 (-7 e 5 em complemento de dois), 241 e 244 (-15 e -12 em complemento de dois), 156 e
230 (-100 e -26), 146 e 239 (-110 e -17).
1.3: 127 e 5, 116 e 12, 100 e 28, 110 e 120. Nestes casos, no produzido carry
(C=0), mas ocorre overflow (V=1). Em todos os casos exemplificados, os operandos
so positivos, mas o resultado negativo, o que indica estouro de representao.
1.4: 128 e 251 (-128 e -5 em complemento de dois), 241 e 136 (-15 e -120 em
complemento de dois), 156 e 226 (-100 e -30), 146 e 238 (-110 e -18). Nestes casos,
ocorre tanto carry (C=1) como overflow (V=1). Em todos os casos exemplificados, os
operandos so negativos, mas o resultado positivo, o que indica estouro de
representao.
2. O sinal de carry, em mltiplas somas, cumulativo. Isto significa que, quando se
somam trs ou mais parcelas, o nmero de vai-uns deve ser contado, para determinar
qual a quantidade final (ou seja, se ocorreu um vai-dois, vai-trs, etc)
3. O sinal de overflow, em mltiplas somas, deve ser analisado cuidadosamente. Se o
overflow ocorrer um nmero mpar de vezes, ento garantido que ocorreu overflow
no resultado final. Se entretanto ocorrer overflow um nmero par de vezes, isto no
significa necessariamente que ocorreu estouro da representao do resultado final.
Seja, por exemplo, 127 + 1 + -1. Em complemento de dois, tem-se 01111111 +
00000001 + 11111111. A soma das duas primeiras parcelas resulta em 10000000,
com indicao de overflow. A soma seguinte, 1000000 + 11111111, resulta em
011111111, tambm com indicao de overflow. Neste caso, o resultado final est
correto (127 em decimal), e os dois sinais de overflow anulam-se mutuamente. No
caso de 127 + 127 + 127 + 127, entretanto, tambm ocorre overflow duas vezes, mas
o resultado final (252 em decimal, ou seja, -4) est incorreto, ou seja, realmente
ocorreu overflow.
4. O sinal de borrow o inverso do carry. Isto pode ser verificado comparando-se uma
operao de subtrao com uma adio com o complemento do subtraendo, ou seja, no

5-5

lugar de a b realiza-se a + not (b) + 1. Como pode ser visto na tabela abaixo, o carry
resultante sempre o inverso do borrow:
a+
0
0
1
1

not(b) +
1
0
1
0

1
1
1
1
1

r
0
1
1
0

carry
1
0
1
1

a
0
0
1
1

b
0
1
0
1

r
0
1
1
0

borrow
0
1
0
0

Assim, se o carry for um, significa que o borrow zero, e vice-versa. Isto pode ser
observado comparando-se o borrow (B) da operao 5 7 atravs de uma instruo
de SUB com o carry (C) gerado pela operao 5 + (-7) atravs de uma instruo de
ADD. Note-se que o AHMES gera carry e borrow em instrues distintas - o borrow
o da ltima operao de SUB, e o carry e o da ltima operao de ADD ou de
deslocamento. Assim, no AHMES, os indicadores de carry e borrow (C e B) no
possuem nenhuma relao entre si.
5 . 5 . 2 Aritmtica de inteiros positivos
Apesar de projetado para trabalhar com nmeros em complemento de dois, AHMES (e
tambm todos os processadores que utilizam complemento de dois) tambm pode manipular
nmeros inteiros positivos. As operaes de adio e subtrao (instrues ADD e SUB)
podem ser utilizadas sem restries ou modificaes, mas os cdigos de condio devem ser
analisados de forma diversa, conforme indicado a seguir:
1. O cdigo de sinal (N) no tem mais significado.
2. O cdigo de overflow (V) tambm perde o significado e no deve ser utilizado.
3. Os cdigos de carry (C) e borrow (B) mantm o seu significado original, e passam
adicionalmente a indicar tambm estouro de representao. Isto significa que a
indicao de carry aps uma soma (C=1 aps ADD) e borrow aps uma subtrao
(B=1 aps SUB) so sinnimos de estouro de representao.
4. O cdigo de zero (Z) mantm seu significado.
5 . 5 . 3 Aritmtica em complemento de um
A aritmtica em complemento de um em si bem semelhante de complemento de dois; a
diferena bsica est na representao de nmero negativos, que possuem a quantidade 1 a
mais. Isto permite que um computador projetado com aritmtica em complemento de dois
tambm possa manipular, com relativa facilidade, nmeros em complemento de um.
Conforme visto na seo 2.3.3, a soma de dois nmeros em complemento de um requer uma
eventual correo do resultado, atravs da soma do carry:
0
2
4
6

LDA 128
ADD 129
JNC 8
ADD 130
8HLT

% primeiro operando est na posio 128


% segundo operando est na posio 129
% se no houve carry, resultado est correto
% posio 130 contm a constante 1
% resultado est no acumulador

De maneira anloga, a subtrao de dois nmeros em complemento de um tambm requer


uma eventual correo do resultado, subtraindo-se o borrow se este for um:
0
2

5-6

LDA 128
SUB 129

% primeiro operando est na posio 128


% segundo operando est na posio 129

4
correto
6

JNB 8
SUB 130
8HLT

% se no houve borrow, resultado est


% posio 130 contm a constante 1
% resultado est no acumulador

Os cdigos de condio devem ser interpretados de maneira um pouco diversa:


1. O cdigo de zero (Z) somente detecta o zero positivo (00000000); o zero negativo
(11111111) deve ser testado parte e convertido para o zero positivo.
2. Os cdigos de sinal (N), carry (C), borrow (B) e overflow (V) mantm o seu
significado original, mas devem ser analisados aps a correo do resultado, ou seja,
aps as duas operaes de ADD ou SUB.
5 . 5 . 4 Aritmtica em sinal/magnitude
Um computador projetado para aritmtica em complemento de dois no manipula facilmente
nmeros em sinal/magnitude. As operaes de soma e subtrao necessitam de grandes
ajustes para serem efetuadas; no basta o simples uso das instrues de ADD e SUB. Alm
disto, os cdigos de condio no so de grande ajuda:
1. O cdigo de zero (Z) somente detecta o zero positivo (00000000); o zero negativo
(10000000) deve ser testado a parte.
2. O cdigo de overflow (V) no tem significado e no deve ser utilizado.
3. Os cdigos de carry (C) e borrow (B) tambm perdem seu significado original.
4. O cdigo de sinal (N) mantm seu significado e pode ser utilizado.
Basicamente o bit de sinal e os bits de magnitude devem ser isolados e tratados
separadamente. Para esta separao, podem ser utilizadas mscaras, como indicado na rotina
abaixo:
LDA 128
% operando est na posio 128
AND 131
% posio 131 contem 10000000 (para isolar o sinal)
STA 129
% posio 129 recebe o sinal
LDA 128
% carrega novamente o operando
AND 132
% posio 132 contem 01111111 (para isolar a magnitude)
STA 130
% posio 130 recebe os sete bits da magnitude
Uma vez isolados, sinal e magnitude podem ser manipulados individualmente, conforme a
tabela 2.4 do captulo 2, seo 2.3.2. Um eventual estouro de representao pode ser
detectado atravs do oitavo bit da magnitude (o bit de sinal do AHMES). Se este bit for
ligado aps uma soma, isto indica que a magnitude necessita de oito bits para ser
representada, ou seja, no pode mais ser representada somente com sete bits.
Aps a realizao da operao desejada, os bits de sinal e magnitude devem ser novamente
reunidos. Assumindo-se a mesma ocupao de memria do trecho de programa anterior,
tem-se a seguinte rotina:
LDA 130
% carrega a magnitude (oitavo bit em zero)
OR 129
% inclui o bit de sinal (no oitavo bit; demais esto em zero)
STA 128
% armazena o operando na posio 128

5-7

Captulo
SEIS
Multiplicao e Diviso

6 . 1 Multiplicao binria (nmeros inteiros positivos)


Em qualquer sistema de numerao, a multiplicao uma forma resumida da soma repetitiva
de uma parcela consigo mesma (o multiplicando) um determinado nmero de vezes (dado
pelo multiplicador). Assim, a multiplicao a x b significa a + a + a + ... + a, onde a
parcela a se repete b vezes. A soma repetitiva levaria entretanto muito tempo para ser
realizada, especialmente para nmeros grandes. Assim, desenvolveu-se (para o sistema
decimal) um mtodo que permitisse realizar a multiplicao de forma mais rpida. Cada
dgito do multiplicador multiplica individualmente o multiplicando e depois as parcelas
intermedirias so somadas. Deve-se notar que cada parcela, alm de ser multiplicada pelo
dgito do multiplicador, tambm multiplicada pelo peso deste dgito:
63
123
189
1260
+ 6300
7749

(63 x 3 x 1)
(63 x 2 x 10)
(63 x 1 x 100)

Para simplificar a notao, assume-se o peso do dgito implicitamente, deixando-se de


escrever os respectivos zeros. No lugar disto, simplesmente desloca-se cada parcela uma
casa decimal para esquerda:
63
123
189
(sem deslocamento: x 1)
126
(um deslocamento: x 10)
+ 63
(dois deslocamentos: x 100)
7749
Esta a forma normal de realizao da multiplicao decimal. A multiplicao binria
realizada exatamente da mesma forma. Observe-se que um deslocamento para a esquerda, em
qualquer sistema de numerao, equivale a multiplicar pela base deste sistema. Assim, em
decimal, para multiplicar por dez simplesmente desloca-se todo o nmero uma casa para a
esquerda e acrescenta-se um zero na posio menos significativa. O mesmo vale para o
sistema binrio quando se quiser multiplicar por dois.
Em binrio a tabela de multiplicao extremamente simples. Note-se que, ao multiplicar-se
por zero, o resultado zero, e ao multiplicar-se um nmero qualquer por um, o resultado
este prprio nmero.
Multiplicando
Multiplicador
Resultado
0
0
0
0
1
0
1
0
0
1
1
1

6-1

A multiplicao segue o mtodo da multiplicao decimal: analisa-se cada dgito do


multiplicador, da esquerda para direita; multiplica-se o multiplicando por cada um destes
dgitos; desloca-se o resultado intermedirio de cada multiplicao cada vez uma casa a mais
para a esquerda; e finalmente soma-se todas as parcelas, formando o resultado final. Por
exemplo, sejam dois nmeros de seis bits, em representao inteira positiva:

0
1 1
+ 1 1 0
1 0 1 0

0
0
0
1
1

1
x 1
1
1 1
0 0
0 0
1 1
1 0
1 0

1
1
1
0
0
0
0

0
0
0
1
0
0

1
0
1
1
0

1 0
1 1
1 0
0

0 0 0 1 0

Quando um dgito do multiplicador for zero, o resultado da multiplicao intermediria


tambm ser zero. Esta parcela pode ento ser eliminada da soma final, pois no contribui
para o resultado:
1
x 1
1
1 1
1 1 0 1 1
+ 1 1 0 1 1 0
1 0 1 0 1 1 0

1
1
1
0
0

0
0
0
1

1
0
1
1

1 0
1 1
1 0
0

0 0 0 1 0

Para um computador, somar diversas parcelas bem mais complexo do que somar duas
parcelas. Assim, as parcelas intermedirias so somadas a medida em que so formadas:

+
1
+ 1
1 0

1
0
1
1

1
0
0
0

+
1
0
0
1
1

1
x 1
1
1 1
0 1
1 1
0 0
1 0
1 0

1
1
1
0
0
0
0

0
0
0
1
0

1
0
1
1
0

1
1
1
0
1

0
1
0
0

0 0 1 0

0 0 0 1 0

No exemplo acima, multiplicou-se dois nmeros de seis bits e obteve-se um resultado em 12


bits. De um modo geral, multiplicando-se um nmero de n bits por outro de m bits
obtm-se um resultado de n+m bits. No caso dos computadores, que trabalham com
nmeros de n bits, a multiplicao produz nmeros de 2n bits. Devido a este fato, nunca
ocorre estouro de representao. Para a multiplicao binria tem-se, at agora, o seguinte
mtodo:
1.
2.
3.
4.
5.

6-2

Incio: i 0, resultado 0
Se o bit de ordem i do multiplicador for zero, ir para 4.
Somar o multiplicando ao resultado (resultado resultado + multiplicando)
Deslocar o multiplicando para a esquerda (multiplicando multiplicando x 2)
Incrementar i de uma unidade (i i + 1)
Se i for menor que o nmero de bits do multiplicador, ir para 2.
Seno, terminar.

Devido ao fato de trabalhar com um nmero fixo de bits, no to simples para um


computador somar nmeros de comprimentos diferentes. Assim, o mtodo de multiplicao
ainda precisa ser melhor adaptado. Para tanto, devemos observar que:
o bit menos significativo do resultado s afetado pela primeira parcela da soma;
nenhuma outra parcela pode alterar mais este bit.
generalizando, o i-simo bit menos significativo do resultado s afetado pelas
primeiras i parcelas intermedirias. Por exemplo, o segundo bit do resultado s
afetado pelas duas primeiras parcelas; o terceiro bit s afetado pelas trs primeiras
parcelas, e assim por diante.
se uma das parcelas de uma soma deve ser deslocada para a esquerda, o mesmo
resultado obtido deslocando-se a outra parcela para a direita.
Assim, a cada passo da multiplicao, no lugar de deslocar-se o multiplicando para a
esquerda, desloca-se o resultado para a direita. E os bits menos significativos do resultado,
um de cada vez, so armazenados em um elemento especial, pois no sero mais
modificados. Sejam ento M o multiplicando, em n bits; m o multiplicador, tambm em
n bits; R os n bits mais significativos do resultado; r os n bits menos significativos
do resultado; e c o vai-um da soma (carry). Tem-se ento o seguinte mtodo:
1.
2.
3.
4.

5.

Incio: i 0, R 0, r 0
Se o bit de ordem i de m for zero (mi=0), fazer c 0 e ir para 4.
Somar M a R (R R + M), c vai-um
Deslocar os 2n bits do resultado para direita, usando o vai-um da soma
anterior como novo bit mais significativo do resultado (se no houve soma, usase 0):
( R r ) desl.direita( c R r )
Incrementar i de uma unidade (i i + 1)
Se i for menor que n, ir para 2. Seno, terminar.

Sejam por exemplo n = 6, M = 110110, m = 110011. Ento tem-se:


1. i 0, R 000000, r 000000
2. m(0) = 1, continuar em 3
3. R 000000 + 110110 = 110110, c = 0
4. (R r) desl.direita(0 110110 000000) = (011011 000000)
5. i 1; i < 6; ir para 2
2. m(1) = 1, continuar em 3
3. R 011011 + 110110 = 010001, c = 1
4. (R r) desl.direita(1 010001 000000) = (101000 100000)
5. i 2; i < 6; ir para 2
2. m(2) = 0, c = 0 e ir para 4
4. (R r) desl.direita( 0 101000 100000) = (010100 010000)
5. i 3; i < 6; ir para 2
2. m(3) = 0, c = 0 e ir para 4
4. (R r) desl.direita(0 010100 010000) = (001010 001000)
5. i 4; i < 6; ir para 2
2. m(4) = 1, continuar em 3
3. R 001010 + 110110 = 000000, c= 1
4. (R r) desl.direita(1 000000 001000) = (100000 000100)
5. i 5; i < 6; ir para 2
6-3

2. m(5) = 1, continuar em 3
3. R 100000 + 110110 = 010110, c = 1
4. (R r) desl.direita(1 010110 000100) = (101011 000010)
5. i 6; fim. Resultado = 101011000010
O mtodo pode ser melhorado ainda mais. Basta observar-se os seguintes pontos:
1. A rigor, r no necessita ser inicializado com zeros. (No exemplo anterior, basta
substituir o 000000 inicial de r por xxxxxx)
2. Uma vez analisado, um bit do multiplicador no ser mais utilizado (no influencia
mais no resultado) e pode ser descartado.
3. Considerando-se o item (2), para facilitar a anlise dos bits do multiplicador, este
tambm pode ser deslocado para a direita no passo 4. Assim, a anlise ser sempre no
bit menos significativo do multiplicador.
4. Desta maneira, a varivel i somente tem a funo de controlar que o lao seja
executado n vezes. Assim, ao invs de contar para cima de zero at n, pode-se
tambm contar para baixo de n at zero (Observe-se que um teste de zero bem
simples de ser realizado em um computador).
O algoritmo modificado em funo destas observaes pode ser visto a seguir. Sejam m,
M, R, r, n e c definidos como anteriormente.
1.
2.

3.
4.

5.

Incio: i n, R 0
Deslocar m para a direita, juntamente com o carry. Note-se que o bit menos
significativo de m levado para o carry:
( m c ) desl.direita( m )
Se c = 0, ir para 4.
Somar M a R (R R + M), c vai-um
Deslocar os 2n bits do resultado para direita, usando o vai-um da soma
anterior como novo bit mais significativo do resultado (se no houve soma, usase 0 devido ao passo 2):
( R r ) desl.direita( c R r )
Decrementar i de uma unidade (i i 1)
Se i no for zero, ir para 2. Seno, terminar. Resultado em (R r)

O resultado expresso em 2n bits. Caso seja desejado um resultado em somente n bits,


deve-se truncar os n bits mais significativos. Neste caso, entretanto, deve-se testar por um
possvel estouro de representao:
Se os nmeros forem representados como inteiros positivos, a truncagem realizada
com sucesso (no h estouro) caso os n bits mais significativos sejam todos iguais a
zero.
Se os nmeros forem representados como inteiros em complemento de dois (mas
positivos), a truncagem realizada com sucesso (no h estouro) caso os n+1 bits
mas significativos sejam todos zero. Ou seja, os n bits mais significativos devem ser
zeros para poderem ser desprezados, e o bit de sinal dos n bits restantes deve ser zero
para o resultado ser positivo.
Para se adaptar s instrues de deslocamento para a direita do Ahmes, o algoritmo deve ser
um pouco modificado. No passo 2, deve ser usada a instruo de SHR (bit mais
significativo recebe zero, e o bit menos significativo vai para o carry). No passo 4, o
deslocamento conjunto de c, R e r deve ser desdobrado em duas instrues de ROR (bit mais
significativo recebe o valor atual do carry, e o bit menos significativo vai para o carry). Com
isto, o algoritmo fica:

6-4

1.
2.
3.
4.

5.

Incio: i n, R 0
Deslocar m para direita (o bit menos significativo vai para o carry). Se o carry
for zero (c=0), ir para 4.
Somar M a R (R R + M), c vai-um
Deslocar os 2n bits do resultado para direita, usando o c como novo bit mais
significativo do resultado: ( R m ) desl.direita( c R m )
4.1. Deslocar R para direita (carry recebe o bit menos significativo).
4.2. Deslocar r para direita (carry torna-se o novo bit mais significativo).
Decrementar i de uma unidade (i i 1)
Se i no for zero, ir para 2. Seno, terminar. Resultado em (R m).

Para a implementao do algoritmo acima, assume-se o seguinte mapeamento de memria


para as variveis e constantes:
multiplicando M:
multiplicador m:
resultado R:
resultado r:
contador:
multiplicador deslocado:
Endereo
0
2
4
6
8
10
12
14
15
17
19
21
23
25
27
28
30
32
33
35
37
39
41
43

Instruo
LDA 136
STA 132
LDA 134
STA 130
LDA 129
STA 133
LDA 133
SHR
STA 133
JNC 25
LDA 130
ADD 128
STA 130
LDA 130
ROR
STA 130
LDA 131
ROR
STA 131
LDA 132
SUB 135
STA 132
JNZ 12
HLT

endereo 128
endereo 129
endereo 130
endereo 131
endereo 132
endereo 133

constante 0:
constante 1:
constante 8:

endereo 134
endereo 135
endereo 136

Comentrios
Inicializa contador com n (oito no caso)
Inicializa R com zero
Inicializa multiplicador com m
Incio do lao: Carrega multiplicador em AC
Desloca m; carry recebe o bit menos significativo
Salva o multiplicador
Se no houve carry, vai para o deslocamento
Carrega R em AC
Soma R + M; resultado parcial no acumulador
Salva o resultado parcial
Carrega resultado parcial (bits mais significativos) em AC
Desloca para direita com carry
Salva o resultado deslocado
Carrega resultado parcial (bits menos significativos) em AC
Desloca para direita com carry
Salva o resultado deslocado
Carrega o contador em AC
Decrementa de um
Salva o contador
Se no for zero, executa mais uma vez o lao
Fim; resultado em R e m

Esta implementao pode ser otimizada, se os seguintes itens forem observados:


1. Depois do teste do carry (instruo JNC, no endereo 17), os dois ramos a serem
seguidos (endereos 25 e 19) iniciam com a mesma instruo (LDA 130).
2. Como a instruo LDA no altera o carry, ela pode ser deslocada para antes do teste
do carry. Com isto, em vez de duas instrues de LDA, usa-se apenas uma.
3. Como aps a soma sobre R (endereos 19 a 23) segue-se o deslocamento de R
(endereos 25 a 28), pode-se eliminar tambm a instruo STA 130 do endereo 23.
Assim, a implementao fica (mantendo-se o mesmo mapeamento de variveis e constantes):
6-5

Endereo
0
2
4
6
8
10
12
14
15
17
19
21
23
24
26
28
29
31
33
35
37
39

Instruo
LDA 136
STA 132
LDA 134
STA 130
LDA 129
STA 133
LDA 133
SHR
STA 133
LDA 130
JNC 23
ADD 128
ROR
STA 130
LDA 131
ROR
STA 131
LDA 132
SUB 135
STA 132
JNZ 12
HLT

Comentrios
Inicializa contador com n (oito no caso)
Inicializa R com zero
Inicializa multiplicador com m
Incio do lao: Carrega multiplicador em AC
Desloca m; carry recebe o bit menos significativo
Salva o multiplicador
Carrega resultado parcial (bits mais significativos) em AC
Se no houve carry (no SHR), vai para o deslocamento
Soma R + M; resultado parcial no acumulador
Desloca R para direita com carry
Salva o resultado deslocado
Carrega resultado parcial (bits menos significativos) em AC
Desloca para direita com carry
Salva o resultado deslocado
Carrega o contador em AC
Decrementa de um
Salva o contador
Se no for zero, executa mais uma vez o lao
Fim; resultado em R e r

Uma otimizao em termos de variveis pode ser tentada, observando-se que:


1. Os bits do multiplicador so analisado da direita para esquerda. Isto realizado
trazendo-se os seus bits para os bits menos significativos. Com isto os bits mais
significativos vo sendo liberados, um de cada vez.
2. Os bits menos significativos do resultado parcial vo sendo deslocados para r pela
esquerda, ou seja, os bits so ocupados da esquerda para a direita, um de cada vez.
3. Assim, a medida que os bits menos significativos de m vo sendo analisados, os
bits mais significativos de r vo sendo formados. Assim, pode-se utilizar a mesma
palavra de memria (ou varivel) para r e m.
Com estas observaes, pode-se desenvolver o mtodo final para a multiplicao de dois
nmeros binrios, representados como inteiros positivos (este mtodo vale tambm para
nmeros positivos em complemento de dois). Sejam m, M, R e n definidos como
anteriormente. A varivel i tem a funo de controlar que o lao seja executado n vezes
(de n at zero). A varivel r no mais utilizada; sua funo realizada por m.
O algoritmo deve ser modificado, para se adaptar ao duplo uso de m e r. A varivel m
deslocada no incio do lao, e r deslocada somente no fim. Na implementao abaixo,
optou-se por deslocar m no incio da lao, e somente ajustar o bit mais significativo de r
atravs de uma instruo de OR e uma mscara adequada (constante 128). Com isto, o
algoritmo fica:
1.
2.
3.
4.

6-6

Incio: i n, R 0
Deslocar m para direita (o bit menos significativo vai para o carry). Se o carry
for zero (c=0), ir para 4.
Somar M a R (R R + M), c vai-um
Deslocar os 2n bits do resultado para direita, usando o c como novo bit mais
significativo do resultado: ( R m ) desl.direita( c R m )
4.1. Deslocar R para direita (carry recebe o bit menos significativo).
4.2. Testar o carry (que contem o bit menos significativo de R). Se for zero, no
h nada para fazer (o bit mais significativo de m j zero, devido ao passo 2). Se
for um, ligar o bit mais significativo de m.

5.

Decrementar i de uma unidade (i i 1)


Se i no for zero, ir para 2. Seno, terminar. Resultado em (R m).

Para a implementao do algoritmo acima, assume-se o mesmo mapeamento de memria dos


algoritmos anteriores, mas adaptado para este ltimo algoritmo.
multiplicando M: endereo 128
multiplicador m: endereo 129
resultado R:
endereo 130
resultado r:
endereo 131
contador:
endereo 132
Endereo
0
2
4
6
8
10
12
14
15
17
19
21
23
24
26
28
30
32
34
36
38
40
42

Instruo
LDA 136
STA 132
LDA 134
STA 130
LDA 129
STA 131
LDA 131
SHR
STA 131
LDA 130
JNC 23
ADD 128
ROR
STA 130
JNC 34
LDA 131
OR 137
STA 131
LDA 132
SUB 135
STA 132
JNZ 12
HLT

constante 0:
endereo 134
constante 1:
endereo 135
constante 8:
endereo 136
constante 128: endereo 137

Comentrios
Inicializa contador com n (oito no caso)
Inicializa R com zero
Inicializa multiplicador com m
Incio do lao: Carrega multiplicador em AC
Desloca m; carry recebe o bit menos significativo
Salva o multiplicador
Carrega resultado parcial (bits mais significativos) em AC
Se no houve carry (no SHR), vai para o deslocamento
Soma R + M; resultado parcial no acumulador
Desloca R para direita; carry recebe bit menos significativo
Salva o resultado deslocado
Se carry zero, bits menos significativos (m) esto OK
Carrega resultado parcial (bits menos significativos) em AC
Liga o bit mais significativo do resultado (m)
Salva o resultado deslocado
Carrega o contador em AC
Decrementa de um
Salva o contador
Se no for zero, executa mais uma vez o lao
Fim; resultado em R e m

6 . 2 Multiplicao binria (nmeros em complemento de dois)


A multiplicao de nmeros com sinal, em complemento de dois, usa o mesmo mtodo
bsico, com trs modificaes (duas no mtodo e uma na realizao da truncagem para n
bits):
1. Repete-se n1 vezes o teste de bit, soma condicional e deslocamento. Na ltima
passagem do lao (na n-sima vez), executa-se uma subtrao condicional no lugar de
uma soma. Isto ocorre porque, em complemento de dois, o bit mais significativo
(sinal) tem peso negativo.
2. No deslocamento para a direita, deve-se agora manter (ou corrigir) o sinal do
resultado intermedirio. Para isto, no se desloca mais com o vai-um da soma (ou
zero). Devem ser observadas as regras:
se no houve soma (ou subtrao) condicional anterior, desloca-se para a direita
duplicando-se o bit de sinal, isto , o bit de sinal deslocado para a direita, e o
novo bit de sinal igual ao anterior.
se houve soma (ou subtrao) anterior, mas no ocorreu estouro, desloca-se para
a direita duplicando-se o bit de sinal.
se houve soma (ou subtrao) anterior, e ocorreu estouro, deslocam-se todos os
bits para a direita (inclusive o bit de sinal), e o novo bit de sinal o inverso do
6-7

sinal anterior. Com isto corrige-se o erro na representao do resultado


introduzido pelo estouro.
3. Na truncagem para n bits, deve-se observar que ela agora possvel em dois casos:
Se os n+1 bits mais significativos forem zeros. Neste caso, tem-se um nmero
positivo em 2n bits que pode ser representado em n bits, sem estouro.
Se os n+1 bits mais significativos forem todos uns. Neste caso, tem-se um
nmero negativo em 2n bits que pode ser representado em n bits, sem
estouro.
Nos demais casos, no possvel truncar o resultado para n bits sem que haja
estouro de representao.
A implementao necessita de um teste de overflow aps a soma, o que j est presente no
Ahmes. Dependendo do sinal do resultado parcial e do overflow, tem-se quatro casos a
tratar:
1. Resultado positivo, sem overflow (N=0, V=0). Neste caso, basta deslocar o resultado
atravs de uma instruo de SHR (que automaticamente coloca um zero no bit mais
significativo, mantendo assim o sinal).
2. Resultado positivo, com overflow (N=0, V=1). Neste caso, desloca-se o resultado
atravs de uma instruo de SHR e depois realiza-se um OR com a mscara binria
10000000 (decimal 128), para tornar o resultado negativo.
3. Resultado negativo, sem overflow (N=1, V=0). Este caso o mesmo do item (2)
acima. Deve-se deslocar o resultado com um SHR e depois ligar o bit de sinal com um
OR com a mscara binria 10000000.
4. Resultado negativo, com overflow (N=1, V=1). Neste caso, como no caso (1) acima,
basta deslocar o resultado atravs de uma instruo de SHR (que coloca um zero no
bit mais significativo, tornando assim o resultado positivo).
Estes quatro casos referem-se simplesmente ao deslocamento dos bits mais significativos do
resultado. Considerando-se a necessidade de identificar o caso e trat-lo adequadamente, e
repetir a anlise separadamente para o ltimo passo (que utiliza subtrao condicional em vez
de soma), a programao deste algoritmo em Ahmes seria bem extensa e complexa. Para o
Ahmes, seria mais simples converter os operandos para nmeros positivos, multiplic-los e
depois ajustar o sinal o resultado de acordo com os sinais dos operandos originais.
Um outro mtodo para multiplicao binria para nmeros em complemento de dois foi
desenvolvido por Booth, e mais rpido que os mtodos descritos acima. Este algoritmo
pode ser encontrado no livro Computer Architecture and Organization, de John P. Hayes, na
seo 3.3.2.
6 . 3 Diviso binria (nmeros inteiros positivos)
Em qualquer sistema de numerao, a diviso a operao inversa da multiplicao, ou seja,
seu resultado (quociente) indica quantas vezes podemos subtrair um nmero (divisor) de
outro (dividendo) de forma que ainda reste um nmero positivo ou zero (resto). Na diviso
em decimal, realizam-se exatamente os passos contrrios da multiplicao. Os dgitos do
resultado so calculados da esquerda para direita, e a cada passo determina-se um dgito do
quociente:
7749
63
144
126
189
189
0

6-8

63
123
(7749 6300 = 1449)
(1449 1260 = 189)
(189 189 = 0)

Note-se que, como na multiplicao, o peso de cada casa assumido implicitamente, e os


zeros respectivos no so escritos. Assim, no lugar de 6300 (63 x 1 x 100) anota-se
simplesmente 63 (63 x 1); no lugar de 1260 (63 x 2 x 10) escreve-se 126 (63 x 2). A
diviso apresenta uma dificuldade adicional para sua realizao pelo mtodo esboado acima:
a necessidade de estimar o dgito que deve ser multiplicado pelo divisor para obter a maior
parcela possvel de ser subtrada do dividendo.
Na diviso binria, utiliza-se exatamente o mesmo mtodo, mas o processo de adivinhao
se torna bem mais fcil: s necessrio verificar se o divisor pode ser subtrado dos dgitos
mais significativos do dividendo (bit = 1) ou no (bit = 0).

1 0
1
1

1
1
0
1
0

0
0
0
1
1
1

1
0
0
0
0
0
1
0

1
1
1
0
0
0
1
1
1
0

0
1
1
1
1
1
0
1
1
0
0

0 0 0 1 0
0
1
1
1
0
0
0
0
0

0
0
1
0
0
0
0

0
1
1
1
0
0

1 1 0 0 1 1
1 1 0 1 1 0

1
1
0
0 0

Note-se que, como no sistema decimal, depois de cada subtrao (ou tentativa mal sucedida
de subtrao, se o dgito calculado para o quociente for zero) um novo dgito do dividendo
incorporado anlise, isto , um novo dgito do dividendo baixado para o resultado da
subtrao. E, tambm como no sistema decimal, o nmero de bits do dividendo que
participam da primeira anlise escolhido de tal forma que formem um nmero maior que o
divisor, isto , que a primeira subtrao seja possvel.
Com um dividendo de m bits e um divisor de n bits obtm-se um quociente de mn bits
e um resto de n bits. A diviso em um computador, sendo a operao inversa da
multiplicao, opera com um dividendo de 2n bits, um divisor de n bits e fornece
quociente e resto em n bits. Ao contrrio da multiplicao, entretanto, onde o resultado
sempre representvel sem estouro, na diviso o quociente pode no ser representvel em
n bits. Nestes casos sinaliza-se estouro de representao. Nos casos em que o dividendo
tem somente n bits, ele deve ser inicialmente expandido para 2n bits, incluindo-se n
zeros esquerda do dividendo.
Para diviso de dois nmeros representados como inteiros positivos usa-se o mtodo abaixo,
onde o dividendo D tem 2n bits e o divisor v tem n bits. Note-se que, nesta
representao no existem nmeros negativos. Assim, um teste comparativo deve ser feito
para verificar se a subtrao possvel, ou seja, se o resultado ser um nmero positivo.
Observe-se tambm que sua aplicao restringe-se aos nmeros naturais sem o zero. A
incluso do zero, obrigaria ao teste do valor do divisor, abortando a operao se esta for
uma tentativa de diviso por zero.
1. Incio: formar r com os n+1 bits mais significativos do dividendo D, i n.
2. Se r v, ento subtrair r rv e colocar 1 no bit menos significativo de q
(quociente). Seno, somente colocar 0 no bit menos significativo de q. Obs: neste
passo, usar somente n bits para representar r.
3. Decrementar i (i i1). Se i=0, encerrar. O resto est em r e o quociente em q.
4. Deslocar r para esquerda, mantendo o bit mais significativo (ou seja, representar
r com n+1 bits). Como novo bit menos significativo, utilizar o bit seguinte do
dividendo original (baixar um bit). Deslocar q tambm para a esquerda. Ir para
o passo 2.
Exemplo: sejam D = 101011000010 e v = 110011. Ento tem-se:
6-9

1. r 1010110, i 6
2. r v (1010110 110011). Ento r 1010110 110011 = 100011 e q 1
3. i 5
4. r 1000110, q 1x
2. r v (1000110 110011). Ento r 1000110 110011 = 010011 e q 11
3. i 4
4. r 0100110, q 11x
2. r < v (0100110 < 110011). Ento r 100110 e q 110
3. i 3
4. r 1001100, q 110x
2. r v (1001100 110011). Ento r 1001100 110011 = 011001 e q 1101
3. i 2
4. r 0110011, q 1101x
2. r v (0110011 110011). Ento r 0110011 110011 = 000000 e q 11011
3. i 1
4. r 0000000, q 11011x
2. r < v (0000000 < 110011). Ento r 000000 e q 110110
3. i 0, encerrar. Quociente = 110110 e resto = 0
Para alguns operandos, pode ocorrer que quando for executado o passo 2, na primeira vez, o
resultado da operao r rv seja maior do que v (ou at mesmo igual a v). Nestes
casos, o algoritmo no adequado para realizao da operao (portanto, a diviso no
poder ser realizada por este mtodo: ser necessrio escolher algum outro). Para o uso
adequado deste algoritmo, interessante incluir uma observao no passo 2 de verificao do
resultado da operao r rv. Se aps esta operao obter-se r v, ento deve-se abortar a
operao, pois o quociente exigiria mais de n bits para ser representado.
A situao explicada acima exemplificada com a diviso de 11010100 por 1011. Para este
exemplo, D = 11010100 e v = 1011. Ento tem-se:
1. r 11010, i 4
2. r v (11010 1011). Ento r 11010 1011 = 1111 e q 1
Neste passo, se obtm um valor de r que maior do que o divisor (o que no faz sentido).
O prosseguimento da operao pelo algoritmo faria com que se obtenha uma resposta
incorreta.
Como poderia ser corrigido o algoritmo sem modific-lo demasiadamente? Se, para iniciar a
operao, utilizar-se apenas n bits do dividendo (D), o problema se resolve a nvel do passo
2. Mas agora ser necessria uma interao a mais ( preciso baixar mais um bit de D),
ento i deve ser aumentado em uma unidade. Entretanto esta uma soluo para este caso e
no universal. Experimente mudar o divisor para 0101 e observe o que ocorre. O tipo de
anlise e a viso humana sobre as variveis no so facilmente transportveis para o
computador, o que vai exigir a alterao do algoritmo para implementao na mquina.
Com isto, o algoritmo fica:
1. Incio: Se v for zero, terminar indicando erro de diviso por zero. Seno, calcular D
v. Se carry=1 (borrow=0), ento D v e terminar indicando estouro. Se no,
ento a diviso pode ser realizada.

6-10

i n. Formar r com os n+1 bits mais significativos do dividendo.


2. Se r v, ento subtrair r rv e colocar 1 no bit menos significativo de q
(quociente). Seno, somente colocar 0 no bit menos significativo de q. Obs: neste
passo, usar somente n bits para representar o resultado r.
3. Decrementar i (i i1). Se i=0, encerrar. O resto est em r e o quociente em q.
4. Deslocar r para esquerda, mantendo o bit mais significativo (ou seja, representar
r com n+1 bits). Como novo bit menos significativo, utilizar o bit seguinte do
dividendo original (baixar um bit). Deslocar q tambm para a esquerda. Ir para
o passo 2.
O algoritmo requer que se trabalhe com os n+1 bits mais significativos do dividendo. Isto
pode ser implementado realizando-se um deslocamento para a esquerda do dividendo, de
forma que o carry contenha o bit mais significativo e D contenha os n bits seguintes.
Assim, a comparao entre r (carry e D) e v. Se o carry for um, ento garantidamente
r > v. Se o carry for zero, ento calcula-se Dv. Se o borrow desta operao for zero
(borrow=0), ento rv. Se o borrow for um (borrow=1) ento r<v.
Com estas consideraes, o algoritmo fica:
1. Incio: Se v for zero, terminar indicando erro de diviso por zero. Seno, verificar
se D v. Se sim, ocorrer estouro no quociente. Neste caso, terminar indicando
estouro. Se no, ento a diviso pode ser realizada.
2. Incio: i n, q 0.
3. Deslocar o quociente q para esquerda, preparando-o para receber o novo bit menos
significativo. Deslocar D e d para esquerda (bit mais significativo de D vai para o
carry). Testar D e carry contra v. Se carry =1, ento D > v. Seno, calcular D v.
Se houver borrow, ento D<v. Seno, Dv. No caso de Dv, subtrair D Dv e
colocar 1 no bit menos significativo de q (quociente). Seno, deixar D inalterado e
colocar 0 no bit menos significativo de q (como o deslocamento para esquerda j
inseriu um zero, basta deixar q inalterado).
4. Decrementar i (i i1). Se i=0, encerrar. O resto est em D e o quociente em
q. Seno, ir para o passo 3.
No algoritmo para o AHMES, assume-se que o dividendo esteja nos endereos 128 (D - bits
mais significativos) e 129 (d - bits menos significativos), o divisor v no endereo 130, o
quociente q deve ser colocado em 131 e o resto r em 132. O estado da diviso indicado na
posio 133 (-1 indica estouro na diviso, 0 indica diviso por zero e 1 indica diviso
normal). Para contador ser utilizada a posio 134.
Para as constantes, so utilizadas as seguintes posies: 135 para zero, 136 para um, 137
para menos um (255) e 138 para oito.
Para deixar os valores de D e d inalterados, os seus valores sero copiados para as
posies 139 e 140, respectivamente. Sobre estas posies que sero efetuados os
deslocamentos.
Endereo
0
2
4
6
8
10
12
14
16
18

Instruo
LDA 130
JZ 77
LDA 128
SUB 130
JNB 81
LDA 128
STA 139
LDA 129
STA 140
LDA 138

Comentrios
Carrega o divisor
Se for zero, termina
Carrega D em A
Calcula D v
Se borrow=0, ento D v, e ir ocorrer estouro
Tudo bem. Diviso pode ser realizada
Salva D em endereo temporrio
Carrega d
Salva d em endereo temporrio
Obtm a constante 8
6-11

20
22
24
26
28
29
31
33
34
36
38
39
41
43
45
47
49
51
53
55
57
59
61
63
65
67
69
71
73
75
77
79
81
83
85

STA 134
LDA 135
STA 131
LDA 131
SHL
STA 131
LDA 140
SHL
STA 140
LDA 139
ROL
STA 139
JC 49
LDA 139
SUB 130
JB 61
LDA 139
SUB 130
STA 139
LDA 131
OR 136
STA 131
LDA 134
SUB 136
STA 134
JNZ 26
LDA 139
STA 132
LDA 136
JMP 83
LDA 135
JMP 83
LDA 137
STA 133
HLT

Inicializa contador com n (8 no caso)


Obtm a constante zero
Inicializa q com zero
Carrega q
Desloca q para esquerda
Salva q
Carrega d
Desloca d para esquerda (carry recebe bit mais significativo)
Salva d
Carrega D
Desloca D para esquerda (com carry)
Salva D
Testa o carry (antigo bit mais significativo de D)
Carry de D = 0, carrega D
Testa se D v
Testa o borrow; se 1, ento D < v, nada a fazer
Borrow=0, ento D > v
Atualiza D com Dv
Atualiza D
Carrega q
Coloca bit do quociente em 1
Salva q
Carrega contador
Decrementa contador de lao
Salva contador
Se no for zero, termina
Obtm o D final
Salva como resto
Sinaliza fim normal
Sinaliza diviso por zero
Sinaliza estouro na diviso
Armazena indicador de estado
Fim

O algoritmo acima pode ser otimizado observando-se que:


1. Enquanto os bits de d vo sendo deslocados para a esquerda, os bits de q vo
sendo formados a partir da direita. Assim, de maneira anloga ao caso da
multiplicao, para d e q pode ser utilizada uma s varivel e em consequencia
uma s posio de memria. Assim, os endereos 140 e 131 so reunidos,
eliminado-se o 140.
2. Da varivel D vo sendo realizadas subtraes sucessivas, e no final do algoritmo
o D final o resto. Assim, para D e r pode-se utilizar somente uma varivel.
Assim, dos endereos 139 e 132 elimina-se a necessidade do 139.
Com estas consideraes, o algoritmo fica:
1. Incio: Se v for zero, terminar indicando erro de diviso por zero. Seno, verificar
se D v. Se sim, ocorrer estouro no quociente. Neste caso, terminar indicando
estouro. Se no, ento a diviso pode ser realizada.
2. Incio: i n, q d, r D.
3. Deslocar r e q (ou seja, D e q) para esquerda (bit mais significativo de r vai para o
carry). Testar r e carry contra v. Se carry =1, ento r > v. Seno, calcular r v. Se
houver borrow, ento r<v. Seno, rv. No caso de rv, subtrair r rv e colocar
1 no bit menos significativo de q. Seno, deixar D e q inalterados.
6-12

4. Decrementar i (i i1). Se i=0, encerrar. O resto est em r e o quociente em q.


Seno, ir para o passo 3.
No algoritmo para o AHMES, assume-se que o dividendo esteja nos endereos 128 (D - bits
mais significativos) e 129 (d - bits menos significativos), o divisor v no endereo 130, o
quociente q deve ser colocado em 131 e o resto r em 132. O estado da diviso indicado na
posio 133 (-1 indica estouro na diviso, 0 indica diviso por zero e 1 indica diviso
normal). Para contador ser utilizada a posio 134.
Para as constantes, so utilizadas as seguintes posies: 135 para zero, 136 para um, 137
para menos um (255) e 138 para oito.
Note-se que para D temporrio e r utilizada a mesma posio (132), assim como para
d temporrio e o quociente q utilizada a mesma posio (131). A cpia de D para r
feita no endereo 12 (STA 132), e a cpia de dpara q feita na instruo do endereo 16
(STA 131).
Endereo
0
2
4
6
8
10
12
14
16
18
20
22
24
25
27
29
30
32
34
36
38
40
42
44
46
48
50
52
54
56
58
60
62
64
66
68
70
72

Instruo
LDA 130
JZ 64
LDA 128
SUB 130
JNB 68
LDA 128
STA 132
LDA 129
STA 131
LDA 138
STA 134
LDA 131
SHL
STA 131
LDA 132
ROL
STA 132
JC 40
LDA 132
SUB 130
JB 52
LDA 132
SUB 130
STA 132
LDA 131
OR 136
STA 131
LDA 134
SUB 136
STA 134
JNZ 22
LDA 136
JMP 70
LDA 135
JMP 70
LDA 137
STA 133
HLT

Comentrios
Carrega o divisor
Se for zero, termina
Carrega D em A
Calcula D v
Se borrow=0, ento D v, e ir ocorrer estouro
Tudo bem. Diviso pode ser realizada
Salva D como o resto temporrio (r)
Carrega d
Salva d como quociente temporrio (q)
Obtm a constante 8
Inicializa contador com n (8 no caso)
Carrega d (q)
Desloca para esquerda (carry recebe bit mais significativo)
Salva d (q)
Carrega D (r)
Desloca para esquerda (com carry)
Salva D (r)
Testa o carry (antigo bit mais significativo de D(r))
Carry de r = 0, carrega r
Testa se r v
Testa o borrow; se 1, ento r < v, nada a fazer
Borrow=0, ento r > v
Calcula rv
Atualiza r
Carrega d (q)
Coloca bit do quociente em 1
Salva d (q)
Carrega contador
Decrementa contador de lao
Salva contador
Se no for zero, termina
Sinaliza fim normal
Sinaliza diviso por zero
Sinaliza estouro na diviso
Armazena indicador de estado
Fim

6-13

6 . 4 Diviso binria (nmeros em complemento de dois, positivos)


Na representao em complemento de dois, possvel representar nmeros negativos, e
assim o mtodo discutido acima pode ser modificado. No mais necessrio testar para
verificar se a subtrao possvel. Simplesmente realiza-se a subtrao e, se o resultado for
negativo, restaura-se o nmero original somando-se o divisor. Este o mtodo da diviso
com restaurao.
Sejam D o dividendo (com 2n bits) e v o divisor (em n bits). O quociente q ser
ento representado por q n-1qn-2...q 2q1q0 em n bits. O algorimo calcula um bit qi de cada
vez, da esquerda para a direita (i variando de n-1 at zero). A cada passo i o divisor,
deslocado i bits para a esquerda (representado por 2iv), comparado com o resto parcial ri
(inicialmente, rn-1 formado pelos bits mais significativos do dividendo). Se 2iv for menor
que ri, o bit qi do quociente colocado em 0. Se 2iv for maior (ou igual) que ri, o bit qi do
quociente colocado em 0, e um novo resto parcial calculado pela operao
ri-1 ri qi2iv
Nos mtodos normalmente utilizados, mais conveniente deslocar o resto parcial para
esquerda em relao a um divisor fixo. Assim, o divisor permanece sempre v, e o resto
parcial deslocado para a esquerda representado por 2ri. Neste caso, a equao acima
equivalente a
ri-1 2ri qiv
Quando se realiza uma subtrao tentativa, calcula-se ri-1 2ri v. Esta operao j calcula
o novo resto parcial ri-1 quando 2ri v for positivo, isto , quando qi = 1. Se entretanto 2ri
v for negativo, tem-se q i = 0 e o novo resto parcial ri-1 ser igual ao anterior, ou seja, 2ri.
Este resto ri-1 pode neste caso ser obtido somando-se v de volta ao resultado da subtrao.
Esta a base do mtodo da diviso com restaurao. A cada passagem a operao
ri-1 2ri v
realizada. Quando o resultado negativo, uma adio restauradora necessria:
ri-1 ri-1 + v
ri-1 (2ri v) + v = 2r i
Se a probabilidade de qi = 1 for 1/2, ento este mtodo requer n subtraes e uma mdia de
n/2 somas. Para o algoritmo abaixo, sejam D os n bits mais significativos do dividendo,
d os n bits menos significativos do dividendo, v o divisor (em n bits). Para d e q
utiliza-se a mesma varivel.
1. Incio: Se v for zero, terminar indicando erro de diviso por zero. Seno, deslocar
(D d) para a esquerda: (D d) desl.esquerda(D d 0). Se D for maior ou igual a v,
ocorrer estouro no quociente. Neste caso, terminar indicando estouro. Seno,
fazer r D, i n e q d.
2. Subtrair r rv. Se r resultante for positivo, colocar 1 no bit menos significativo
de q. Seno, colocar zero no bit menos significativo de q e restaurar r atravs da
soma r r+v.
3. Decrementar i (i i1). Se i=0, encerrar. O resto est em r e o quociente em q.
4. Deslocar (r q) para esquerda: (r q) desl.esquerda(r q 0). Ir para o passo 2.
Na adaptao para o Ahmes, assume-se que o dividendo esteja nos endereos 128 (D - bits
mais significativos) e 129 (d - bits menos significativos), o divisor v no endereo 130, o
quociente q deve ser colocado em 131 e o resto r em 132. O estado da diviso indicado na
posio 133 (-1 indica estouro na diviso, 0 indica diviso por zero e 1 indica diviso
6-14

normal). Para contador ser utilizada a posio 134. Para as constantes, so utilizadas as
seguintes posies: 135 para zero, 136 para um, 137 para menos um (255) e 138 para oito.
Note-se que para d e q e para r e D so utilizadas as mesmas palavras de memria (131 e
132, respectivamente), o que pode ser visto nas instrues dos endereos 7 e 12.
Endereo
0
2
4
6
7
9
11
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
42
44
46
47
49
51
52
54
56
58
60
62
64
66
68

Instruo
LDA 130
JZ 60
LDA 129
SHL
STA 131
LDA 128
ROL
STA 132
SUB 130
JP 64
LDA 138
STA 134
LDA 132
SUB 130
JN 36
STA 132
LDA 131
OR 136
STA 131
LDA 134
SUB 136
STA 134
JZ 56
LDA 131
SHL
STA 131
LDA 132
ROL
STA 132
JMP 22
LDA 136
JMP 66
LDA 135
JMP 66
LDA 137
STA 133
HLT

Comentrios
Carrega o divisor
Se for zero, termina
Carrega d em A
Desloca para esquerda, bit mais significativo vai para carry
Salva d como q (quociente temporrio)
Carrega D em A
Desloca para esquerda
Salva D como r (resto temporrio)
Calcula D v
Se D v, ir ocorrer estouro
Tudo bem ( D < v ). Diviso pode ser realizada
Inicializa contador com n (8 no caso)
Incio do lao. Obtm r
Calcula r v
Se negativo, nada a fazer (no salva r)
Se positivo, atualiza r
Carrega q
Coloca bit do quociente em 1
Salva q
Carrega contador
Decrementa contador de lao
Salva contador
Se for zero, termina normalmente
Carrega q
Desloca para esquerda, bit mais significativo vai para carry
Salva q
Carrega r
Desloca para esquerda
Salva r
Volta para incio do lao
Sinaliza fim normal
Sinaliza diviso por zero
Sinaliza estouro na diviso
Armazena indicador de estado
Fim

Note-se que o programa est otimizado no que se refere restaurao do r. A subtrao


realizada (posies 22 e 24) e testada (posio 26). No instante do teste, o resultado rv
est no acumulador, e a varivel r na memria ainda no foi atualizada. Assim, a
restaurao de r realizada simplesmente no salvando o resultado do acumulador, e a
operao r rv realizada salvando-se o acumulador (posio 28).
Uma tcnica um pouco diversa da descrita acima pode ser empregada para eliminar a
necessidade de realizar a soma restauradora. Esta tcnica baseada no fato de uma
restaurao da forma
ri r i + v
seguida no prximo passo por uma subtrao da forma:
ri-1 2ri v

6-15

Reunindo-se as duas equaes tem-se


ri-1 2(ri + v) v = 2r i + 2v v
ou seja,
ri-1 2ri + v
Assim, quando qi = 1, que indica um valor positivo para ri, ri-1 calculado por subtrao do
divisor: ri-1 2ri v. Por outro lado, quando q i = 0, r i-1 calculado por uma simples
soma: ri-1 2ri + v. Assim, o clculo de cada um dos bits do quociente requer uma soma
ou uma subtrao, mas no ambas. Assim, este mtodo, denominado de diviso sem
restaurao, necessita de n somas e subtraes, enquanto que o mtodo da diviso com
restaurao requer uma mdia de 3n/2 somas e subtraes.
Para o algoritmo abaixo, sejam r os n bits mais significativos do dividendo, d os n
bits menos significativos do dividendo, v o divisor (em n bits). Para controlar se a
prxima operao ser uma soma ou subtrao, usa-se um elemento auxiliar aux,
inicializado para comear-se com uma subtrao.
1. Incio: Se v for zero, terminar indicando erro de diviso por zero. Seno, deslocar
(D d) para a esquerda: (D d) desl.esquerda(D d 0). Se D for maior ou igual a v,
ocorrer estouro no quociente. Neste caso, terminar indicando estouro. Seno,
fazer r D, i n e aux 1.
2. Se aux=1, calcular r rv. Seno, calcular r r+v. Se o r resultante for
positivo, ento colocar 1 no bit menos significativo de q e fazer aux 1. Se o r
resultante for negativo, colocar 0 no bit menos significativo de q e fazer aux 0.
3. Decrementar i (i i1). Se i=0, ir para 5.
4. Deslocar (r d) para esquerda: (r d) desl.esquerda(r d 0). Deslocar q para a
esquerda: q desl.esquerda(q 0). Ir para o passo 2.
5. Se r<0, ento r r+v. Encerrar. O resto est em r e o quociente em q
Como pode ser visto no passo 2, se o dividendo aps uma subtrao ficar negativo, ele no
restaurado, mas sim no prximo passo soma-se o divisor (ao invs de subtrair). Isto
controlado pelo flag aux. Assim, sempre que a operao anterior produzir um dividendo
positivo, a prxima operao uma subtrao; seno, se o dividendo for negativo, a prxima
operao uma soma. Este mtodo necessita, entretanto, corrigir o resto, como indicado no
passo 5.
Na adaptao para o Ahmes, assume-se que o dividendo esteja nos endereos 128 (D - bits
mais significativos) e 129 (d - bits menos significativos), o divisor v no endereo 130, o
quociente q deve ser colocado em 131 e o resto r em 132. O estado da diviso indicado na
posio 133 (-1 indica estouro na diviso, 0 indica diviso por zero e 1 indica diviso
normal). Para contador ser utilizada a posio 134. Para as constantes, so utilizadas as
seguintes posies: 135 para zero, 136 para um, 137 para menos um (255) e 138 para oito.
Para a varivel aux usa-se a posio 139.
Endereo
0
2
4
6
7
9
11
12
14
6-16

Instruo
LDA 130
JZ 92
LDA 129
SHL
STA 131
LDA 128
ROL
STA 132
SUB 130

Comentrios
Carrega o divisor
Se for zero, termina
Carrega d em A
Desloca para esquerda, bit mais significativo vai para carry
Salva d como q (quociente temporrio)
Carrega D em A
Desloca para esquerda
Salva D como r (resto temporrio)
Calcula D v

16
18
20
22
24
26
28
30
32
34
36
38
40
42
44
46
48
50
52
54
56
58
60
62
64
66
68
70
71
73
75
76
78
80
82
84
86
88
90
92
94
96
98
100

JP 96
LDA 138
STA 134
LDA 136
STA 139
LDA 139
JZ 38
LDA 132
SUB 130
STA 132
JMP 44
LDA 132
ADD 130
STA 132
JN 56
LDA 131
OR 136
STA 131
LDA 136
JMP 58
LDA 135
STA 139
LDA 134
SUB 136
STA 134
JZ 80
LDA 131
SHL
STA 131
LDA 132
ROL
STA 132
JMP 26
LDA 132
JP 88
ADD 130
STA 132
LDA 136
JMP 98
LDA 135
JMP 98
LDA 137
STA 133
HLT

Se D v, ir ocorrer estouro
Tudo bem ( D < v ). Diviso pode ser realizada
Inicializa contador com n (8 no caso)
Inicializa aux com 1
Incio do lao. Testa aux
Aux = 1
Calcula r v
Atualiza r
Aux = 0
Calcula r + v
Atualiza r
Testa o resultado da operao
Carrega q
Coloca bit do quociente em 1
Salva q
Faz aux=1 (prxima operao uma subtrao)
Faz aux=0 (prxima operao uma soma)
Atualiza varivel aux
Carrega contador
Decrementa contador de lao
Salva contador
Se for zero, termina normalmente
Carrega q
Desloca para esquerda, bit mais significativo vai para carry
Salva q
Carrega r
Desloca para esquerda
Salva r
Volta para incio da lao
Fim do lao. Testa valor do resto
Se for positivo, est correto
Se negativo, soma divisor ao resto
Salva resto corrigido
Sinaliza fim normal
Sinaliza diviso por zero
Sinaliza estouro na diviso
Armazena indicador de estado
Fim

No lugar de corrigir o resto, alguns autores preferem realizar o lao n1 vezes (e no n


vezes, como acima), e na ltima passagem forar o bit menos significativo do quociente para
1. O resultado final sempre ser algebricamente correto, no sentido que quociente vezes
divisor mais resto igual ao dividendo, mas pode produzir anomalias como 21 5 = 5 e
resta 4, ou ento at mesmo 20 5 = 5 e resta 5 (!). Mas 15 5 = 3 e resta zero, assim
como 19 5 = 3 e resta 4. Como o quociente sempre ser impar (devido ao bit menos
significativo ser forado para um), esta anomalia ocorre sempre que o quociente correto seria
um nmero par. A correo, entretanto, fcil: sempre que o resto for negativo, basta
subtrair um do quociente e somar o divisor ao resto.
Exemplo de uso do mtodo: seja a diviso de 000111000111 por 010001, ambos
interpretados como nmeros em complemento de dois (note-se que ambos so positivos):

6-17

1. i 0, aux 1, r 000111, d 000111. Deslocando (r d) para esquerda,


resulta em r 001110, d 001110. Como r<v e v0, a diviso pode prosseguir.
2. r 001110 010001 = 001110+ 101111 = 111101, q 0, aux 0
3. i 1; i < 6; ir para 4
4. r 111010, d 011100, q 0x
2. r 111010 + 010001 = 001011, q 01, aux 1
3. i 2; i < 6; ir para 4
4. r 010110, d 111000, q 01x
2. r 010110 010001= 010110+ 101111 = 000101, q 011, aux 1
3. i 3; i < 6; ir para 4
4. r 001011, d 110000, q 011x
2. r 001011 010001= 001011+ 101111 = 111010, q 0110, aux 0
3. i 4; i < 6; ir para 4
4. r 110101, d 100000
2. r 110101 + 010001= 000110, q 01101, aux 1
3. i 5; i < 6; ir para 4
4. r 001101, d 000000, q 01101x
2. r 001101 010001= 001101+ 101111 = 111100, q 011010, aux 0
3. i 6; i 6; ir para 5
5. r 111100 + 010001 = 001101. Quociente = 011010 e resto = 001101. Ou seja,
dividindo-se 455 por 17 obtm-se 26 e resta 13.
Seja agora a diviso de 001011000010 por 010011, ambos em complemento de dois. Neste
caso, o passo um indica que r > v, ou seja, 010110 > 010011. Neste caso, a diviso no
possvel, pois o dividendo no representvel em seis bits (estouro de representao). Em
decimal, a diviso desejada seria de 706 por 19, o que resultaria em um quociente de 37, que
no representvel em complemento de dois em seis bits.
Na diviso de 001000010010 por 010011, o resultado obtido ser 011011, com resto de
010001. Neste caso, o resto j produzido correto, sem necessidade de correo no
passo 5.
6 . 5 Diviso binria (nmeros em complemento de dois, positivos ou
negativos)
O mtodo da diviso sem restaurao pode ser generalizado para nmeros inteiros positivos e
negativos. Para a diviso ser possvel sem estouro, a comparao inicial requer que o valor
absoluto de r seja menor que o valor absoluto de v. Se o sinais de dividendo e divisor
forem iguais, inicia-se com uma subtrao; seno inicia-se com uma soma. Aps cada
subtrao (ou soma), comparam-se os sinais do divisor e do resultado. Se forem iguais, um
bit 1 colocado no quociente, e a prxima operao uma subtrao. Se forem diferentes,
um bit 0 adicionado ao quociente, e a prxima operao uma soma. O bit final do
quociente forado para 1, independente do valor da anlise dos sinais.
O resultado est algebricamente correto, no sentido do quociente ser igual ao divisor vezes o
quociente mais o resto. Entretanto, pode ocorrer que dividendo e resto tenha sinais
diferentes, assim como que o resto seja igual ao divisor. Para corrigir-se quociente e resto,
de forma que o resto seja sempre menor que o divisor e seu sinal igual ao do dividendo, o
seguinte procedimento necessrio:

6-18

se o resto for zero, o resultado est correto.


se o resto for diferente de zero, comparam-se os sinais do dividendo e do resto. Se
forem diferentes, ento corrige-se o resultado:
se dividendo e divisor tiverem os mesmos sinais, subtrai-se um do quociente o
soma-se o divisor ao resto para obter-se o resto real.
se dividendo e divisor tiverem sinais diferentes, soma-se um ao quociente e
subtrai-se o divisor do resto para a obteno do resto real.
se o resto for diferente de zero, dividendo e resto forem ambos negativos, e o valor
absoluto do resto for igual ao valor absoluto do divisor, ento o resto zero e o
quociente deve ser corrigido. Se o divisor for negativo, soma-se um ao quociente, caso
contrrio subtrai-se um.
6 . 6 Exerccios resolvidos
Ateno: para os exerccios a seguir todos os nmeros sugeridos so inteiros positivos.
1. Multiplicar 1011 por 1101.
Empregando-se o algoritmo explicado na seo 4.1, tem-se o desenvolvimento apresentado a
seguir. As variveis so: M = 1011 e m = 1101.
1. i 0, R 0, r 0, M 1011, m 1101.
2. m 0 = 1, continuar em 3.
3. R 0 + 1011 = 1011; c = 0
4. (Rr) desl.dir(010110000) = (01011000)
5. i 1; i < 4, ir para 2.
2. m 1 = 0, c = 0, continuar em 4.
4. (Rr) desl.dir(0010110000) = (00101100)
5. i 2; i < 4, ir para 2.
2. m 2 = 1, continuar em 3.
3. R 0010 + 1011 = 1101; c = 0
4. (Rr) desl.dir(011011100) = (01101110)
5. i 3; i < 4, ir para 2.
2. m 3 = 1, continuar em 3.
3. R 0110 + 1011 = 0001; c = 1
4. (Rr) desl.dir(100011110) = (10001111)
5. i 4; fim. Resultado = 10001111.
2. Multiplicar 11010 por 1111.
1. i 0, R 0, r 0, M 11010, m 01111.
2. m 0 = 1, continuar em 3.
3. R 0 + 11010 = 11010; c = 0
4. (Rr) desl.dir(01101000000) = (0110100000)
5. i 1; i < 5, ir para 2.
2. m 1 = 1, continuar em 3.
3. R 01101 + 11010 = 00111; c = 1
4. (Rr) desl.dir(10011100000) = (1001110000)
5. i 2; i < 5, ir para 2.
2. m 2 = 1, continuar em 3.
3. R 10011 + 11010 = 01101; c = 1
6-19

4. (Rr) desl.dir(10110110000) = (1011011000)


5. i 3; i < 5, ir para 2.
2. m 3 = 1, continuar em 3.
3. R 10110 + 11010 = 10000; c = 1
4. (Rr) desl.dir(11000011000) = (1100001100)
5. i 4; i < 5, ir para 2.
2. m 4 = 0, c = 0, continuar em 4.
4. (Rr) desl.dir(01100001100) = (0110000110)
5. i 5; fim. Resultado = 110000110.
3. Sugestes de valores para outros exerccios:
a) Multiplicar 11001 por 10111.
b) Multiplicar 1101 por 101.
c) Multiplicar 110000 por 110100.
d) Multiplicar 101 por 1000.
e) Multiplicar 110 por 111.
Respostas:
a) Produto = 1000111111
b) Produto = 1000001
c) Produto = 100111000000
d) Produto = 101000
e) Produto = 101010
4. Dividir 10010100 por 1011:
Tem-se que D = 10010100 e v = 1011. Ento inicia-se a aplicao do algoritmo (seo 4.3):
1. r 10010, i 4
2. r v (10010 1011). Ento r 10010 1011 = 0111 e q 1
3. i 3
4. r 01111, q 1x
2. r v (01111 1011). Ento r 01111 1011 = 0100 e q 11
3. i 2
4. r 01000, q 11x
2. r < v (01000 < 1011). Ento q 110
3. i 1
4. r 10000, q 110x
2. r v (10000 1011). Ento r 10000 1011 = 0101 e q 1101
3. i 0, encerrar. Quociente = 1101 e resto = 0101
5. Dividir 1100101001 por 1111:
Tem-se que D = 1100101001 e v = 11111. Ento:
1. r 110010, i 5
2. r v (110010 11111). Ento r 110010 11111 = 10011 e q 1
3. i 4
4. r 100111, q 1x
2. r v (100111 11111). Ento r 100111 11111 = 1000 e q 11
3. i 3
4. r 010000, q 11x
6-20

2. r < v (010000 < 11111). Ento q 110


3. i 2
4. r 100000, q 110x
2. r v (100000 11111). Ento r 100000 11111 = 00001 e q 1101
3. i 1
4. r 000011, q 1101x
2. r < v (000011 < 11111). Ento q 11010
3. i 0, encerrar. Quociente = 11010 e resto = 11
6. Sugestes de valores para outros exerccios:
a) Dividir 1000111111 por 11001.
b) Dividir 1000101 por 1101.
c) Dividir 100111011000 por 110000.
d) Dividir 101010 por 101.
e) Dividir 101010 por 110.
Respostas:
a) Quociente = 10111 e resto = 0
b) Quociente = 101 e resto = 100
Obs.: Se voc obteve resposta incorreta para este exerccio, verifique quantos dgitos
usou para representar D (D deve ter 2n bits)
c) Quociente = 110100 e resto = 11000
d) A aplicao do algoritmo da seo 6.3 no possvel, uma vez que obtm-se resto
igual ao divisor no passo 2. Usando a diviso convencional obtm-se: quociente =
1000 e resto = 10 (ocorre estouro de representao no quociente).
e) Quociente = 111 e resto = 0

6-21

Captulo
SETE
Nmeros em Ponto Fixo e Ponto Flutuante

7 . 1 Nmeros em ponto fixo


Observao inicial: os termos ponto fixo e ponto flutuante so tradues diretas dos
termos ingleses fixed point e floating point, que se referem ao smbolo utilizado nos
pases de lngua inglesa para representar a vrgula decimal. As tradues corretas seriam,
respectivamente, vrgula fixa e vrgula flutuante. Entretanto, devido ao fato dos termos
ponto fixo e ponto flutuante j serem de uso corrente na literatura especializada nacional,
eles sero empregados aqui tambm .
Todos os nmeros tratados at agora foram nmeros inteiros, onde uma vrgula binria no
apareceu explicitamente. Entretanto, estes nmeros podem ser interpretados como
apresentando uma vrgula direita do dgito menos significativo (a posio das unidades).
Assim, por exemplo, o nmero binrio em complemento de dois
01100111
que corresponde ao nmero decimal 103, pode ser interpretado como apresentando uma
vrgula extrema direita
0 1 1 0 0 1 1 1,
sem que isto altere o valor por ele representado. Tem-se ento uma representao em ponto
fixo, mas sem parte fracionria. Caso deseje-se representar fraes, deve-se reservar um
certo nmero de bits para isto. Naturalmente, a quantidade de bits utilizveis para a parte
inteira diminui correspondentemente. Por exemplo, para a mesma cadeia de bits acima, temse os seguintes nmeros, conforme a posio da vrgula:
0 1 1 0 0 1 1,1

Decimal = 51,5

(1 bit para frao)

0 1 1 0 0 1,1 1

Decimal = 25,75

(2 bits para frao)

0 1 1 0 0,1 1 1

Decimal = 12,875

(3 bits para frao)

0 1 1,0 0 1 1 1

Decimal = 3,21875

(5 bits para frao)

0,1 1 0 0 1 1 1

Decimal = 0,8046875 (7 bits para frao)

,01 1 0 0 1 1 1

Decimal = 0,40234375 (8 bits para frao)

Ao contrrio dos exemplos acima, a vrgula no representada explicitamente. Para uma


determinada notao em ponto fixo, indica-se somente quantos bits so usados para a frao
e quantos bits representam a parte inteira. Todos os nmeros manipulados seguem ento a
mesma notao. Dos n bits utilizados para representar os nmeros, utilizam-se ento t bits
(t0) para a parte inteira e f bits (f0) para a parte fracionria, com a restrio de que
t+f=n. Observe-se ainda que:

7-1

a quantidade total de valores representveis permanece a mesma (2n), independente da


posio da vrgula (isto , independente dos valores de te f).
a faixa de valores representveis depende da posio da vrgula (e da conveno
utilizada, naturalmente). De um modo geral, a faixa dada pelas mesmas frmulas
vistas anteriormente (sinal/magnitude, complemento de dois, etc), mas todos os
nmeros so agora divididos por um fator igual a 2f. Assim, por exemplo, em
complemento de dois, o maior nmero negativo dado por 2n-1/2f (ou seja, 2n-f-1);
o maior nmero positivo calculado por (2n-11)/2f.
os nmeros fracionrios no so contnuos, mas sim esto separados entre si por uma
diferena igual a 2-f.
A tabela a seguir ilustra estas observaes para nmeros de 8 bits, representados em
complemento de dois (a coluna intervalo indica a diferena entre dois nmeros consecutivos):
n
8
8
8
8
8
8
8
8
8

t
8
7
6
5
4
3
2
1
0

f
0
1
2
3
4
5
6
7
8

Quant. num. Menor num. Maior num.


Intervalo
256
-128
127
1
256
-64
63,5
0,5
256
-32
31,75
0,25
256
-16
15,875
0,125
256
-8
7,9375
0,0625
256
-4
3,96875
0,03125
256
-2
1,984375
0,015625
256
-1
0,9921875
0,0078125
256
-0,5
0,49609375 0,00390625

Tabela 7.1 - Nmeros em ponto fixo de 8 bits

7 . 2 Soma e subtrao em ponto fixo


As operaes de soma e subtrao em ponto fixo se realizam exatamente da mesma maneira
que para nmeros inteiros. Naturalmente, somente podem ser somados (ou subtrados)
nmeros que possuam a mesma posio para a vrgula. Ou seja, t e f devem ser iguais
para todos os operandos.
Entretanto, nmeros em ponto fixo com diferentes posies para a vrgula tambm podem
ser operados, desde que um dos nmeros seja convertido para a representao do outro.
Sejam os nmeros m1 e m2, com comprimentos t1 e f1, e t2 e f2, respectivamente.
O resultado deve ter a representao de m1, ou seja, comprimentos t1 e f1 para as partes
inteira e fracionria.
Se t1 > t2 (a parte inteira de m1 utiliza mais bits que a parte inteira de m2), ento valem as
regras:
1. A parte inteira de m2, com t2 bits, deve ser extendida para t1 bits. Os bits devem ser
tais que o sinal e o valor do nmero sejam mantidos. Assim, por exemplo, para
nmeros inteiros positivos, t1 t 2 bits em zero so acrescentados esquerda de m2.
Para nmeros em complemento de dois, o sinal deve ser duplicado para a esquerda por
t1 t2 bits.
2. A parte fracionria de m2 deve ser reduzida para f1 bits. Isto pode ocorrer de duas
maneiras: por truncagem ou por arredondamento. Na truncagem, os f2f1 bits a direita
de m2 so simplesmente eliminados. No arredondamento, primeiro soma-se 2(f1+1)
7-2

m2 e depois realiza-se a truncagem. Note-se que isto equivale a somar um 1 na


posio f2 f 1 do nmero; em termos aritmticos, significa que se a frao a ser
eliminada maior ou igual a 0,5 arredonda-se para cima, seno arredonda-se para
baixo.
A tabela abaixo ilustra alguns exemplos de converso. Considere-se que o nmero final deve
ser representado com 4 bits de parte inteira e 4 bits de parte fracionria. T representa a nova
frao sob truncagem, e A representa a nova frao sob arredondamento.
Num.original Representao Parte inteira Frao (T)
01,101101
Int. positivo
0001
1011
11,101101
Int. positivo
0011
1011
010,00111
Int. positivo
0010
0011
01,101101
Compl.dois
0001
1011
11,101101
Compl.dois
1111
1011
010,00111
Compl.dois
0010
0011

Frao (A)
1011
1011
0100
1011
1011
0100

Tabela 7.2 - Exemplos de reduo de frao


Se t1 < t2 (a parte inteira de m1 utiliza menos bits que a parte inteira de m 2), ento valem
as regras:
1. A parte inteira de m2, com t2 bits, deve ser reduzida para t1 bits. Isto s possvel se
esta parte inteira puder ser representada com somente t1 bits. Se isto no for possvel,
a operao no pode ser realizada, pois ocorre estouro de representao. Para esta
reduo valem as regras analisadas na multiplicao, quando se reduzia um nmero de
2n bits para n bits.
2. A parte fracionria de m2 deve ser ampliada para f1 bits. Para isto, simplesmente
acrescenta-se f1 f2 bits em zero direita da frao de m1.
A tabela a seguir ilustra alguns exemplos de converso. Considere-se que o nmero final
deve ser representado com 4 bits de parte inteira e 4 bits de parte fracionria.
Num.original Representao Parte inteira
01101,101
Int. positivo
1101
111011,01
Int. positivo
Estouro
01000,111
Int. positivo
1000
0110110,1
Compl.dois
Estouro
11101,101
Compl.dois
1101
0001011,1
Compl.dois
Estouro

Frao
1010
0100
1110
1000
1010
1000

Tabela 7.3 - Exemplos de reduo de mantissa


Observe-se que sempre possvel converter um nmero em ponto fixo para uma
representao que tenha menos bits na parte fracionria (ou mais bits na parte inteira),
enquanto que o contrrio nem sempre possvel Assim, quando se deve operar dois
nmeros em ponto fixo com t1 e t2 diferentes, costuma-se normalizar os operandos para
aquela representao com maior parte inteira.
7 . 3 Multiplicao em ponto fixo
A operao de multiplicao em ponto fixo se realiza exatamente da mesma maneira que a
multiplicao de nmeros inteiros (com ou sem sinal). Deve-se somente observar a nova
posio da vrgula: se os dois operandos (de n bits cada) tiverem t bits de parte inteira e
f bits de parte fracionria, o resultado apresentar 2n bits, com 2t bits de parte inteira e
2f bits de parte fracionria.
7-3

De um modo mais geral, se o multiplicando apresentar t1 e f 1 bits para as partes inteira e


fracionria, e se o multiplicador tiver t 2 e f 2 bits, ento o resultado ter t1+t2 bits na parte
inteira e f1+f2 bits na parte fracionria. Como na multiplicao inteira, nunca ocorre estouro
de representao se forem considerados todos os bits do resultado.
Aps a multiplicao, se o resultado deve ser reduzido para n bits (t + f), isto deve ser feito
em duas etapas:
1. A reduo da parte inteira para t bits. Para isto elimina-se os bits mais significativos,
da mesma maneira que o realizado para a multiplicao inteira. Nesta reduo pode
ocorrer estouro.
2. A reduo da parte fracionria para f bits. Para isto eliminam-se os bits menos
significativos, por truncagem ou por arredondamento, tal como foi explicado na soma
de nmeros em ponto fixo.
7 . 4 Diviso em ponto fixo
A operao de diviso em ponto fixo realizada exatamente da mesma maneira que a diviso
de nmeros inteiros, observando-se as posies das vrgulas do dividendo e do divisor. Os
algoritmos de diviso inteira necessitam de 2n bits para o dividendo e n bits para o
divisor. Se o divisor tem t bits inteiros e f bits de frao, ento o dividendo deve
apresentar 2t bits na parte inteira e 2f bits na parte fracionria.
1. Para estender a parte inteira, duplicam-se os bits mais significativos de acordo com a
representao (zeros para nmeros positivos, ou com o bit de sinal para nmeros em
complemento de 2).
2. Para estender a parte fracionria, basta acrescentar zeros direita.
Desta maneira obtm-se, aps a execuo da diviso, um quociente em n bits (t+f) e um
resto, tambm em n bits (mas com 2f bits de parte fracionria!).
7 . 5 Nmeros em ponto flutuante
A faixa de nmeros que podem ser representados em ponto fixo insuficiente para a maioria
das aplicaes cientficas, onde existe a necessidade de representar-se nmeros muito
grandes e/ou nmeros muito pequenos. Para contornar este problema, desenvolveu-se a
notao cientfica, onde um quintilho representado por 1,0 x 1018, em vez de escrev-lo
por extenso (1 000 000 000 000 000 000). A representao de nmeros em ponto flutuante
basicamente a verso binria da notao cientfica.
A cada nmero em ponto flutuante esto associados na realidade trs outros nmeros: a
mantissa m, o expoente e e a base b. No caso dos computadores atuais, a base utilizada
a binria, ou seja, b=2. O nmero em ponto flutuante ento calculado por:
N = m x be
Como a base uma constante para um determinado sistema, o nmero em ponto flutuante
ento representado por um par (m,e), onde m uma frao ou um inteiro, e e o exponte
(sempre um inteiro). Note-se que ambos, mantissa e expoente, podem ser positivos ou
negativos.
A preciso de um nmero em ponto flutuante determinada primariamente pelo nmero de
bits utilizados pela mantissa. A faixa de representao R depende do nmero de bits do
expoente. Apesar dos nmeros em ponto flutuante representarem nmeros reais, a faixa R
no contnua. Somente uma quantidade limitada de nmeros (2n, onde n a quantidade

7-4

total de bits da mantissa e do expoente) pode ser representada. Os nmeros esto ento
dispersos dentro desta faixa.
Os nmeros em ponto flutuante so inerentemente redundantes, no sentido que um mesmo
nmero pode ser representado de mais de uma maneira. Por exemplo, um quintilho pode
ser representado por 1,0.1018, ou 0,1.10 19, ou mesmo 100.1016. Assim, desejvel que
exista uma forma normalizada de representar um nmero. Para tanto, utiliza-se somente
mantissas normalizadas. Uma mantissa est normalizada quando constituda somente de
uma parte fracionria (no existe parte inteira) e quando o primeiro dgito a direita da vrgula
diferente de zero. Assim, a forma normalizada de representar um quintilho dada por
0,1.1019.
Na base binria, a normalizao da mantissa exige que os seus dois bits mais significativos
sejam diferentes. Assim, para nmeros positivos a mantissa inicia sempre por 0,12. Para
nmeros em complemento de dois, isto implica em que o dgito mais significativo da
mantissa e o bit de sinal sejam diferentes - para nmeros positivos a mantissa inicia ento por
0,1 2 e para nmeros negativos a mantissa inicia por 1,02. Assim, a normalizao restringe a
magnitude |M| de uma mantissa ao intervalo
1/2 |M| < 1
Um nmero no normalizado normalizado facilmente, atravs de deslocamentos da
mantissa para a direita ou esquerda e incrementos ou decrementos do expoente,
respectivamente. Note-se que um eventual estouro de representao na mantissa facilmente
resolvido: basta deslocar a mantissa para a direita, corrigir o bit mais significativo, e somar
um ao expoente. Um estouro de representao no expoente, entretanto, indica um estouro na
capacidade de representao dos nmeros em ponto flutuante. Se o expoente ultrapassou o
maior expoente positivo, fala-se em overflow; se o expoente ultrapassou o menor
negativo, fala-se ento em underflow, e o resultado fornecido normalmente zero.
A representao do nmero zero apresenta algumas caractersticas peculiares, que
influenciam fortemente no formato utilizado para representar nmeros em ponto flutuante em
binrio. A mantissa deve ser naturalmente, igual a zero, mas o expoente pode apresentar
qualquer valor, uma vez que 0.be igual a 0 para todos os valores de b e e. Com isto
tem-se:
1. A mantissa do nmero zero deve apresentar todos os seus bits em zero, para facilitar o
teste por zero. Note-se que isto vai contra a definio formal de uma mantissa
normalizada.
2. O nmero zero na realidade a menor quantidade absoluta possvel de representao.
Durante a realizao de diversos clculos, entretanto, arredondamentos e truncagens
podem levar a resultados que sejam nmeros bem pequenos, mas no exatamente
iguais a zero. Para indicar o fato do zero estar bem prximo em magnitude destes
nmeros, o expoente escolhido para o zero deve ser o maior nmero negativo representvel. Assim, por exemplo, se o expoente possuir k bits e for representado em
complemento de dois, o expoente utilizado para o zero dever ser 2k-1.
3. Pelas consideraes anteriores, tem-se que o zero representado por 0.b 2k-1 .
Entretanto, para facilitar o teste de um nmero para verificar se ele igual a zero,
desejvel que o nmero zero seja uma sequncia de bits em zero, sem nenhum bit em
um. Isto est em contradio com a representao acima. Para resolver este problema,
codifica-se o expoente em excesso de 2 k-1, ou seja, um expoente em zero significa
na realidade a maior magnitude negativa representvel. A codificao em excesso
indica que existe uma quantidade a mais somada ao expoente (no caso, 2 k-1); para
obter-se o valor real do expoente deve-se subtrair esta quantidade do valor armazenado
no campo de expoente. Ou seja, e real = e 2 k-1. Para um expoente de 8 bits em
complemento de dois, por exemplo, tem-se ento uma codificao em excesso de
128: o expoente 128 representado por 0; o expoente 0 representado por 128; e o
expoente 127 (o maior possvel) dado por 255.
7-5

7 . 6 Formatos de nmeros em ponto flutuante


Um nmero em ponto flutuante, representado em binrio, deve fornecer as informaes
relativas mantissa (seu sinal e sua magnitude) e ao expoente (tambm seu sinal e sua
magnitude). Diversas representaes podem ser utilizadas para isto (sinal/magnitude,
complemento de dois, etc). Devido a isto, existem diversos formatos adotados para
representar os nmeros em ponto flutuante. Muitos deles so especficos para uma
determinada famlia de computadores ou para um determinado fabricante.
Por exemplo, o formato da srie S/360-370 da IBM segue o formato comentado abaixo:
o nmero utiliza 32 bits: 1 bit para o sinal da mantissa, 7 bits para o expoente e 24 bits
para o valor da mantissa.
a mantissa representada em sinal magnitude; o expoente representado em excessode-64.
o bit mais significativo representa o sinal da mantissa; os sete bits seguintes
representam o expoente; e os 24 bits menos significativos representam o valor da
mantissa.
a base utilizada a base 16 (hexadecimal).
Assim, o nmero 0,125 x 16 5 tem a seguinte representao:
0 1000101 001000000000000000000000
E o nmero 0,125 x 16-5 tem a representao:
1 0111011 001000000000000000000000
Note-se que, como a base 16, a mantissa normalizada para dgitos hexadecimais (e no
para dgitos binrios).
O formato recomendado pela IEEE (Institute of Electrical and Electronics Engineers)
descrito a seguir (existem trs formatos: simples, de 32 bits, duplo, de 64 bits e qudruplo,
de 128 bits):
Simples

Duplo

Qudruplo

Campos:
S = sinal
E = expoente
L = primeiro bit
F = frao

1 bit
8 bits
(no representado)
23 bits

1 bit
11 bits
(no representado)
52 bits

1 bit
15 bits
1 bit
111 bits

Expoente
Excesso-de
Maior valor
Menor valor

127
255
0

1023
2047
0

16383
32767
0

Tabela 7.4 - Formato IEEE


Nesta notao, cinco grupos diferentes de nmeros podem ser representados: nmeros
normalizados, zero, nmeros no-normalizados, infinito e no-nmeros (NaN):
1. Os nmeros normalizados utilizam um expoente que vai de 1 a 254 (ou 1 a 2046, ou 1
a 32766), o primeiro bit da mantissa (L) sempre zero e por isto no representado. O
valor do nmero calculado por
(1)s . 2 E-excesso . (L.F)
onde L.F representa a mantissa propriamente dita; L o primeiro bit e F a frao.
2. O Zero representado por um nmero todo em zero (E=F=L=0); note-se que o zero
neste caso pode ter sinal.

7-6

3. Nmeros no normalizados possuem o expoente em zero (E=0) e uma frao no zero.


Seu uso restrito para representao do nmeros que no podem ser normalizados
sem causar underflow.
4. O Infinito representado pelo maior valor do expoente (E=255 ou 2047 ou 32767) e
por uma frao em zero (F=L=0). Note-se que o infinito pode ter sinal.
5. No-nmeros (Not a Number) so representados pelo maior expoente e por uma frao
diferente de zero. Seu uso previsto inclui a indicao de cdigos de erro, situaes
imprevistas, etc.
O bit de sinal (S) representado no bit mais significativo; os bits seguintes representam o
expoente. Os bits menos significativos so destinados mantissa. Note-se que o bit L no
representado (exceto na notao qudrupla).
7 . 7 Soma e subtrao de nmeros em ponto flutuante
Nmeros em ponto flutuante, para poderem ser somados ou subtrados, devem apresentar o
mesmo expoente. Neste caso, a soma ou subtrao realizada sobre as mantissas. O nmero
resultado formado com a mantissa resultado e o expoente dos operandos.
Como os expoentes devem ser iguais antes de poder-se realizar a operao propriamente dita,
expoentes diferentes devem ser igualados. O menor dos expoentes deve ser tornado igual ao
maior, e a mantissa correspondente a este expoente deve ser convenientemente deslocada
para a direita, de forma que o nmero representado pelo par (mantissa, expoente) no se
altere.
Sejam X e Y dois nmeros em ponto flutuante; sejam Xm e Ym suas mantissas e Xe e Ye os
seus expoentes. As seguintes regras valem ento para a soma (ou subtrao):
1. Se Xe=Ye, ento XY=(X mYm) . 2Xe
2. Se Xe<Ye, ento XY=(X m.2 (Xe-Ye)Ym) . 2Ye
3. Se Xe>Ye, ento XY=(X mYm.2 (Ye-Xe)) . 2Xe
Por exemplo, no caso 2, a mantissa Xm associada ao menor expoente Xe deve ser deslocada
para a direita YeXe vezes, para formar uma nova mantissa X m.2 (Xe-Ye). Esta nova
mantissa, que corresponde agora a um expoente Ye, pode ser operada com Ym. Note-se que,
quando a mantissa Xm deslocada para a direita, existe uma perda de preciso nos seus bits
menos significativos, que so eliminados. E se a diferena Ye-Xe for maior que o nmero de
bits utilizados para representar a mantissa, nem necessrio realizar-se a soma (ou
subtrao): todos os bits significativos de Xm seriam eliminados pelo deslocamento para a
direita (isto equivale a somar dois nmeros, onde um deles muito menor que o outro).
Como os nmeros em ponto flutuante so normalmente armazenados na forma normalizada,
aps a operao a mantissa resultado deve ser normalizada, atravs de deslocamentos para a
esquerda (direita) e decrementos (incrementos) do expoente, tal como explicado na seo 5.
Note-se que um eventual estouro de representao resolvido atravs de um deslocamento
para a direita (exceto no caso em que o expoente j o maior possvel, caso em que
realmente ocorre estouro).
7 . 8 Multiplicao de nmeros em ponto flutuante
Nmeros em ponto flutuante so multiplicados facilmente. Basta multiplicar as mantissas e
somar os expoentes. A multiplicao segue essencialmente as mesmas regras da
multiplicao inteira; inclusive a mantissa resultado tem o dobro de bits de comprimento. Ela
7-7

entretanto facilmente reduzida para o nmero normal de bits, atravs da eliminao dos
seus bits menos significativos (por truncagem ou arredondamento).
X x Y = (Xm x Ym) . 2(Xe+Ye)
Aps a multiplicao o resultado tambm deve ser normalizado; durante este processo pode
ocorrer estouro de representao (se ocorrer estouro na representao do expoente).
7 . 9 Diviso de nmeros em ponto flutuante
Nmeros em ponto flutuante so divididos facilmente. Basta dividir as mantissas e subtrair
os expoentes. A mantissa do dividendo inicialmente expandida para o dobro do seu nmero
de bits (pela incluso de zeros a direita) e depois as duas mantissas so divididas pelo mesmo
algoritmo utilizado para nmeros inteiros. Note-se que agora o resto normalmente
desprezado, e as etapas que na diviso inteira corrigiam quociente e resto podem ser
eliminadas.
X Y = (X m Ym) . 2(XeYe)
Aps a diviso o resultado tambm deve ser normalizado; durante este processo pode ocorrer
estouro de representao (se ocorrer estouro na representao do expoente).

7-8

Captulo
OITO
Codificaes BCD, Numrica e Alfanumrica

8 . 1 Nmeros e Aritmtica BCD


Os computadores digitais atuais trabalham com nmeros binrios, uma vez que isto facilita
enormemente a construo destes computadores. No dia-a-dia, entretanto, o sistema decimal
largamente utilizado (ainda!). Isto obriga a existncia de rotinas de converso de nmeros
decimais para binrio e vice-versa; estas rotinas existem em todos os computadores atuais.
Nos computadores mais antigos, entretanto, procurou-se desenvolver uma aritmtica binria
que operasse com dgitos decimais, de forma a facilitar estas rotinas de converso. Neste
sistema, em desuso nos dias de hoje, um grupo codificado de quatro bits utilizado para
representar cada um dos dez dgitos decimais. Esta a base do sistema BCD (Binary Coded
Decimal Decimal Codificado em Binrio).
Com quatro bits podem ser codificadas 16 combinaes distintas (de 0000 a 1111), mas
existem somente 10 dgitos binrios (de 0 at 9). Com isto tem-se 16!/6! = 2,9x10 10
diferentes possibilidades para implementar-se uma codificao BCD. Algumas das
combinaes mais usuais so ilustradas na tabela apresentada a seguir. A segunda coluna
utiliza o NBCD (Natural BCD), visto que os dgitos so codificados de acordo com sua
representao em binrio (com pesos 8,4, 2 e 1 para cada bit). O cdigo de Aiken usa os
pesos 2, 4, 2 e 1 para cada bit, enquanto que o cdigo de Stibitz (tambm chamado de
excesso de 3) usa os mesmos pesos do NBCD, mas soma trs a cada representao. O
cdigo 7421 usa os pesos 7, 4, 2 e 1, enquanto que o cdigo 642-1 utiliza os pesos 6, 4, 2 e
1.
Dgito decimal Cd. NBCD
(8421)
0
0000
1
0001
2
0010
3
0011
4
0100
5
0101
6
0110
7
0111
8
1000
9
1001

Cd.Aiken
(2421)
0000
0001
0010
0011
0100
1011
1100
1101
1110
1111

Cd.Stibitz
(8421 3)
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100

Cd.7421
(7421)
0000
0001
0010
0011
0100
0101
0110
0111
1001
1010

Cd. 642-1
(642-1)
0000
0011
0010
0101
0100
0111
1000
1011
1010
1101

Tabela 8.1 - Codificaes BCD


Por sua proximidade do sistema binrio, a codificao NBCD a mais utilizada, e
denominada por muitos autores simplesmente por BCD, e a aritmtica com este cdigo
denominada de aritmtica BCD. Nesta aritmtica, os dgitos decimais so operados em
binrio, agrupados de quatro em quatro. Quando se soma dois dgitos BCD em binrio, o
dgito resultado pode estar em um de trs casos:
1. Dgito legal (entre 0 e 9), sem vai-um. Neste caso o resultado est correto, e no
existe vai-um para o dgito seguinte.
8-1

2. Dgito ilegal sem vai-um. Neste caso o resultado est entre 10 e 15 (em binrio); para
obter-se o dgito correto deve-se subtrair 10 do dgito (ou somar seis, o que
equivalente), e gerar-se um vai-um para o dgito decimal seguinte.
3. Dgito legal com vai-um. Este caso ocorre quando o resultado cai entre 16 e 19; da
mesma maneira que o caso 2, para obter-se o dgito correto deve-se subtrair 10 do
dgito (ou somar seis). O vai-um gerado est correto.
Por exemplo, seja A=0832 e B=0983. Ento tem-se:
A=
B=

0000
0000
0001
caso 1

1000
1001
0001
caso 3

0011
1000
1011
caso 2

0010
0011
0101
caso 1

Para corrigir o resultado, deve-se somar seis nos dgitos dos casos 2 e 3. No caso 2, ainda
necessrio propagar um vai-um (isto no necessrio no caso 3, pois o vai-um j foi
gerado).
1
0001
0001
1011
0101
0110
0110
0001
1000
0001
0101
Com isto tem-se 1815, que o resultado correto. Uma desvantagem da correo do resultado
dessa maneira que as correes do tratamento do vai-um no caso 2 podem criar novas
correes, como por exemplo no caso de A=0372 e B=0633:
A=
B=

0000
0000
0001

0011
0110
1001

0000

1
1001

0000

1010
caso 2

0111
0011
1010
caso 2

0010
0011
0101

1010
0110
0000

0101

Com a correo do caso 2, tem-se:

0101

E a nova correo deste novo caso 2 fornece o resultado correto (1005). Para evitar este
tratamento especial, foi criado o algoritmo de Hellerman, que soma 6 em todos os dgitos de
um dos operandos antes da soma das duas parcelas. Assim, s existem dois casos a serem
tratados, distinguidos pelo vai-um:
1. O resultado no deu vai-um e ento caiu entre 6 e 15. Deve-se subtrair 6 para obter o
dgito correto.
2. O resultado produziu um vai-um. Ento este vai-um j foi propagado e o dgito
est correto entre 0 e 9.
Por exemplo, seja A=0372 e B=0633. Ento tem-se:
A=
soma de 6

0000
0110
0110

0011
0110
1001

0111
0110
1101

0010
0110
1000

Se a primeira etapa produzir um vai-um entre dgitos decimais, isto significa que o dgito
original do operando ter sido ilegal; este nmero est mal representado. A segunda etapa
realiza a soma de (A+6) com o segundo operando (B):
8-2

A+6=
B=

1
0110
0000
0111
caso 1

1
1001
0110
0000
caso 2

1101
0011
0000
caso 2

1000
0011
1011
caso 1

Na terceira e ltima etapa, ao invs de subtrair 6 (0110), soma-se 10 (1010) e ignora-se o


vai-um).
0111
0000
0000
1011
1010
1010
0001
0000
0000
0101
O resultado, 1005, j est correto.
Para a subtrao utilizam-se tcnicas semelhantes. Para maiores detalhes sobre aritmtica
BCD pode-se consultar o livro Projeto de Computadores Digitais, de Glen George
Langdon Jr. e Edson Fregni, captulo 2 (Cdigos, nmeros e aritmtica). As operaes de
diviso e multiplicao operam de forma semelhante aos mtodos utilizados na nossa
aritmtica decimal, mas atuando sobre cada dgito BCD individualmente. Estas operaes
no possuem hoje em dia nenhum interesse prtico e, devido s extenses dos seus
algoritmos, no sero abordadas aqui.
8 . 2 Codificao
Os computadores atuais trabalham unicamente com dgitos binrios (bits); nenhum outro
smbolo utilizado. Qualquer informao, seja ela numrica ou alfabtica, deve ser
representada utilizando-se combinaes adequadas destes bits. A este processo genrico de
representao d-se o nome de codificao, ou seja, um mapeamento entre os smbolos
utilizados externamente ao computador e os grupos de bits escolhidos para representar estes
smbolos.
Todas as representaes de nmeros vistas at o momento (inteiros positivos,
sinal/magnitude, complemento de um, complemento de dois, ponto fixo, ponto flutuante,
BCD) so exemplos de codificaes. O objetivo comum a todas estas codificaes era
representar nmeros no sistema de numerao arbico; para cada codificao foram
estudadas a maneira de representar os nmeros no sistema binrio e inclusive a maneira de
operar com estes nmeros codificados.
Diversas outras aplicaes, entretanto, tambm utilizam cdigos. Assim, tem-se cdigos
desenvolvidos para manipular caracteres alfanumricos, smbolos especiais (pontuao,
letras gregas, etc), smbolos matemticos, e toda a gama de informao que deve ser
manipulada ou armazenada em um computador.
De uma forma geral, se uma determinada codificao utiliza n bits, podem ser
representados 2n smbolos distintos, ou seja, tem-se 2n combinaes distintas que podem ser
realizadas com estes n bits. Os cdigos no necessitam utilizar todas as combinaes
possveis (como o caso dos cdigos BCD), nem a informao necessita estar codificada de
forma inequvoca (como o caso do duplo zero em sinal/magnitude ou de nmeros no
normalizados em ponto flutuante). Cada sistema de codificao pode estabelecer suas
prprias regras de formao e manipulao dos grupos de bits.
8 . 3 Cdigos BCD (ou cdigos de 4 bits ponderados)
Conforme j foi visto, nos cdigos BCD um grupo codificado de quatro bits utilizado para
representar cada um dos dez dgitos decimais. Como uma metodologia para realizar
8-3

operaes aritmticas estes cdigos esto em desuso, mas como uma maneira de armazenar
nmeros decimais eles ainda so utilizados.
Como j foi visto, existem 2,9x10 10 diferentes possibilidades para implementar-se uma
codificao BCD. Algumas delas foram analisadas no captulo anterior. Dois dos cdigos
BCD ainda so bastante utilizados hoje em dia: o BCD natural e o cdigo em excesso-de-trs
(Stibitz). Ambos esto reproduzidos abaixo:
Dgito decimal
0
1
2
3
4
5
6
7
8
9

NBCD
(8421)
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001

Excesso-de-3
(8421 3)
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100

Tabela 8.2 - Cdigos BCD de 4 bits


O cdigo BCD natural tem uma correspondncia natural entre os dgitos decimais e a
codificao binria. Os prprios pesos das posies binrias seguem os valores utilizados no
sistema arbico (8, 4, 2 e 1). O cdigo em excesso de trs tambm tem os mesmos pesos,
mas a cada codificao binria soma-se 3.
Para o cdigo NBCD (denominado simplesmente de BCD) foi desenvolvida uma aritmtica
binria, conforme j foi visto anteriormente.
O mesmo ocorre com o cdigo de excesso-de-trs, que possui duas vantagens: nenhum
cdigo utiliza a combinao 0000, e o cdigo auto-complementado para 9, ou seja, para se
obter o complemento de 9 de um cdigo decimal, basta inverter todos os bits.
A aritmtica em excesso de 3 relativamente fcil. Quando dois dgitos em excesso de 3 so
somados, o resultado ser em excesso de 6, e tem-se dois casos a tratar:

A soma dos dois dgitos nove ou menos. Neste caso, a soma em excesso resultar
em um dgito que 15 ou menos, e nenhum carry ser gerado. Nestes casos, basta
subtrair 3 do resultado para obter o dgito corretamente codificado em excesso de 3.

A soma dos dois dgitos 10 ou mais. Neste caso, a representao em excesso ser
16 ou mais. Como X e X+16 tem o mesmo cdigo, a diferena est na gerao de
um vai-um. Para corrigir o resultado, ou seja, representar X em excesso de 3,
basta somar 3.

Assim, a regra para a soma em excesso de trs simples: soma-se os dgitos usando
aritmtica binria; se um vai-um gerado, somar 3 (0011) ao dgito decimal; seno,
subtrair 3 (0011) ao dgito decimal (ou somar 1101 e desprezar o vai-um).
Diversos outros cdigos tambm podem ser desenvolvidos atribuindo-se pesos distintos s
diversas posies; o nome destes cdigos normalmente formado pelos pesos. Abaixo so
exemplificados alguns deles (4221, 2421 (Aiken), 5421, 7421, e 642(-1), com peso
negativo). Note-se que a escolha dos pesos no determina de forma inequvoca a
codificao, mas apenas facilita sua compreenso. Assim, por exemplo, no cdigo 4221 o
dgito decimal 2 pode ser codificado tanto por 0010 (como na tabela) como por 0100; o
dgito 6 poderia ser codificado como 1010 ou por 1100 (esta ltima utilizada na tabela).
8-4

Dgito decimal
0
1
2
3
4
5
6
7
8
9

4221
0000
0001
0010
0011
1000
0111
1100
1101
1110
1111

2421
0000
0001
0010
0011
0100
1011
1100
1101
1110
1111

5421
0000
0001
0010
0011
0100
1000
1001
1010
1011
1100

7421
0000
0001
0010
0011
0100
0101
0110
0111
1001
1010

642(-1)
0000
0011
0010
0101
0100
0111
1000
1011
1010
1101

Tabela 8.3 - Cdigos BCD pouco utilizados


Cada um destes cdigos sempre desenvolvido com algum propsito ou aplicao especfica
em mente. Por exemplo, o cdigo 4221 auto-complementado em 9 (como o so todos os
cdigos cuja soma dos pesos 9). Nenhum dos cdigos da tabela anterior, entretanto,
apropriado para operaes aritmticas.
Outros cdigos possveis seriam 5221, 5321, 6331, 5211, 6321, 7321, 4421, e 6421.
Tambm so possveis cdigos com pesos negativos, como 531(-1), 522(-1), 732(-1), e
621(-1). Apesar de possveis, nenhum destes cdigos j foi utilizado em qualquer aplicao
prtica. Seu estudo foi meramente terico.
8 . 4 Cdigos de cinco bits ponderados
Vrias mquinas (j ultrapassadas) foram desenvolvidas utilizando cinco bits ponderados. O
cdigo 74210, ilustrado na tabela a seguir, um destes cdigos. Ele ainda possui a
vantagem adicional de que todos os dgitos codificados contm dois e somente dois bits em
um, o que facilita a verificao se uma palavra pertence ao cdigo ou no.
Dgito decimal
0
1
2
3
4
5
6
7
8
9

Cd. 74210
11000
00011
00101
00110
01001
01010
01100
10001
10010
10100

Tabela 8.4 - Cdigo BCD de 5 bits


Os dois uns em cada dgito decimal torna possvel a deteco de erros simples (erro em um
nico bit) em cada dgito. Qualquer dgito que no apresentar uns, ou somente um um,
ou mais de dois uns pode ser facilmente identificado como errneo. O valor zero
(codificado como 11000) est contra os pesos utilizados, mas foi assim codificado para
manter a regra dos dois uns.
8 . 5 Cdigos de sete bits ponderados
Um cdigo de sete bits ponderados foi utilizado pela IBM, no modelo IBM 650. Este
cdigo, de sete bits com pesos 5043210, tambm denominado de biquinrio. Ele possui
dois grupos de bits, um com dois e outro com cinco bits. Este cdigo tambm pode ser
considerado como um cdigo m de n (veja-se seo 8.8).
8-5

Dgito decimal
0
1
2
3
4
5
6
7
8
9

50
01
01
01
01
01
10
10
10
10
10

43210
00001
00010
00100
01000
10000
00001
00010
00100
01000
10000

Tabela 8.5 - Cdigo BCD de 7 bits


Nos sete bits de qualquer palavra de cdigo, somente dois bits esto em um, os demais so
zeros. Alm disto, um destes uns est no grupo da esquerda (de dois bits) e o outro um
est no grupo da direita (de cinco bits). Qualquer cdigo com uma quantidade de uns
diferente de dois, ou com mais de um um em cada grupo, indica um dgito invlido ou
ento um erro. O grupo esquerda indica se o dgito menor ou igual a quatro ou ento
maior ou igual a cinco. Operaes aritmticas podem ser realizadas com relativa facilidade, o
que contribuiu para o seu uso. As operaes aritmticas esto baseadas no fato de um dgito
ser incrementado de uma unidade deslocando-se o 1 para a esquerda. Atualmente este
cdigo caiu em desuso, exceto para algumas aplicaes especficas.
Um cdigo semelhante o qui-binrio, com pesos 8, 6, 4, 2, 0 / 1, 0.
8 . 6 Cdigos Gray (ou cdigos cclicos)
Estes cdigos no so utilizados para clculos aritmticos, mas sim para indicar a variao de
grandezas analgicas (temperatura, ngulo, presso, voltagem, etc) em forma digital. Estas
grandezas no alteram seus valores de forma brusca, mas sim variam de um valor para outro
de forma contnua. Assim, os cdigos de Gray foram desenvolvidos de tal forma que, ao se
avanar de um nmero para o seguinte, somente um bit do cdigo varia, ou seja, dois
cdigos adjacentes se diferenciam somente por uma posio binria. Existem diversas
possibilidades para os cdigos cclicos. O cdigo Gray mais comum (denominado
simplesmente de cdigo Gray) mostrado na Tabela 8.6 a seguir.
Dgito decimal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Cd. Gray
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000

Tabela 8.6 - Cdigo Gray de 4 bits

8-6

Note-se que todas as 16 combinaes possveis esto presentes; no existem combinaes


ilegais ou que indiquem erro. Mas de um cdigo para o seguinte sempre existe somente um
bit que varia o seu valor.
Compare-se, por exemplo, a variao de 3 para 4. Em binrio, isto implicaria a variao do
cdigo 0011 para 0100, com a troca de valor de trs dgitos binrios. No cdigo Gray visto
na Tabela 8.6, a variao de 0010 para 0110, com a troca de somente um bit. Note-se
tambm que o cdigo cclico, ou seja, do valor 15 para zero (ou vice-versa) tambm existe
a variao de somente um bit.
Para este cdigo Gray pode-se desenvolver procedimentos de converso para decimal e
binrio. Um nmero decimal pode ser convertido para Gray convertendo-se primeiramente
este nmero para binrio. A seguir, cada bit somado em mdulo dois com o bit esquerda
(a soma em mdulo dois uma soma sem vai-um, ou seja, o resultado somente um
quando os dois operandos forem diferentes).
Por exemplo, o nmero decimal 45 representado por 0101101 em binrio. E a converso
para cdigo Gray produz:
0

0 1 1 0 1

1 1 1 0 1 1

Assim, o cdigo Gray de 45 111011.


Converter do cdigo Gray para decimal realizado primeiro convertendo-se de Gray para
binrio e depois para decimal. A converso para binrio realizada analisando-se os bits da
esquerda para a direita. Os zeros bits de mais alta ordem so mantidos inalterados at o
primeiro 1, inclusive. A partir da, os bits zero so invertidos para um at o prximo 1.
Este 1 tambm invertido para zero, e os zeros seguintes so copiados inalterados at o
prximo 1 (que tambm copiado). Passa-se ento inverso at o prximo 1, a partir
do qual copia-se normalmente at o 1 seguinte, e assim por diante at serem analisados
todos os bits.
Por exemplo, seja o cdigo Gray 001001011. Convertendo-o para binrio tem-se:

001
001110
00111001
001110010

Copia-se todos os zeros at o primeiro 1.


Inverte-se os bits seguintes at o prximo 1.
Copia-se todos os bits at o 1 seguinte.
Inverte-se os bits at o prximo 1.

Ou seja, obtm-se 001110010, que corresponde em decimal a 114. Note-se que a regra geral
alterna entre cpia dos bits e a inverso dos bits; cada bit em 1 indica que deve ser realizada
uma troca (deste 1 inclusive).
Este cdigo Gray em particular um cdigo binrio refletido. Um cdigo dito refletido
quando ele simtrico (com exceo do bit de mais alta ordem) em relao ao ponto mdio
da lista codificada em ordem crescente de valor. Os cdigos Gray que no so refletidos so
complexos de serem codificados.
Existem diversos cdigos Gray com diferentes tamanhos de ciclo (nmeros de cdigos
distintos utilizados). Normalmente eles so referenciados pelo tamanho do seu ciclo e por
uma lista de nmeros. Por exemplo, o cdigo Gray visto acima referenciado como sendo
de ciclo 16 (1,2,1,3,1,2,1,4,1,2,1,3,1,2,1,4). Os nmeros da lista indicam a posio (a
partir da direita) do bit que invertido no cdigo atual para formar o prximo cdigo. A
codificao pode iniciar em qualquer nmero binrio (no caso do exemplo, um nmero de 4
bits). Por exemplo, um cdigo Gray de comprimento 6 (1,2,1,3,2,3) ser diferente se
iniciado em nmeros binrios diferentes, conforme pode ser visto na tabela a seguir.
8-7

Dgito
decimal
0
1
2
3
4
5
6

000
000
001
011
010
110
100
000

001
001
000
010
011
111
101
001

010
010
011
001
000
100
110
010

Codificao inicial em:


011
100
011
100
010
101
000
111
001
110
101
010
111
000
011
100

101
101
100
110
111
011
001
101

110
110
111
101
100
000
010
110

111
111
110
100
101
001
011
111

Tabela 8.7 - Codificao de cdigo Gray


Assim, para caracterizar inequivocamente um cdigo Gray, alm do comprimento e da
seqncia de formao, tambm deve-se indicar a codificao inicial. Uma lista de alguns
cdigos possveis fornecida abaixo:

para dois bits: Comprimento 4 (1,2,1,2)


para trs bits: Comprimento 6 (1,2,1,3,2,3)
Comprimento 6 (1,2,3,1,2,3)
Comprimento 8 (1,2,1,3,1,2,1,3)
para quatro bits: Comprimento 8 (1,2,3,4,1,4,3,2)
Comprimento 10 (1,2,1,3,4,3,1,2,1,4)
Comprimento 10 (1,2,1,3,4,1,2,1,3,4)

Um cdigo Gray de 5 bits de comprimento 10, comumente utilizado em operaes de


contagem, o cdigo caminhante (do ingls walking code ou creeping code):
Dgito
0
1
2
3
4
5
6
7
8
9

Cdigo
00000
00001
00011
00111
01111
11111
11110
11100
11000
10000

Tabela 8.8 - Cdigo Gray de 5 bits


A razo para o uso deste cdigo est na sua facilidade de implementao. Para avanar o
contador de uma unidade, basta mover todos os bits para a esquerda, inverter o bit mais
significativo e coloc-lo na posio mais direita (bit menos significativo).
8 . 7 Cdigos de deteco e correo de erros
Quando informao transferida de uma seo para outra do computador, ou mesmo entre
dois computadores, no incomum a ocorrncia de erros, sejam eles devidos a rudos
eletromagnticos ou ao mau funcionamento de um componente. Se uma codificao binria
de n bits utiliza todas as combinaes possveis (2n), ento erros no podem ser nem
detectados nem corrigidos. Como todas as combinaes so vlidas, no existem
combinaes invlidas. Um erro sempre ir transformar uma codificao vlida em outra
codificao tambm vlida.
Para ser possvel a deteco de erros, e at mesmo sua correo, deve-se introduzir
redundncia na codificao, seja na forma de bits extras ou do uso de combinaes invlidas.
8-8

Trs tcnicas principais sero analisadas nas sees seguintes: cdigos m-de-n, cdigos com
paridade e cdigos de Hamming. Todos estes cdigos utilizam o mesmo comprimento em
bits para sua codificao. Existem cdigos de comprimento varivel, em que os smbolos
mais freqentes utilizam menos bits que os smbolos menos freqentes. Assim, por
exemplo, a codificao da letra e utilizaria muito menos bits que a letra q. Estes cdigos,
como por exemplo cdigo Morse, cdigo de Shannon-Fano, cdigo de Huffman, no sero
analisados aqui.
8 . 8 Cdigos m-de-n
Os cdigos m-de-n so compostos de tal forma que os n bits de uma palavra binria so
formados por m uns e n-m zeros. Com esta limitao, de 2n combinaes binrias
possveis somente (n/m) combinaes, ou seja, n!/m!(n-m)!. Este nmero de combinaes
maximizado quando m=n/2 (ou m=n/2 1/2, se n for mpar).
No cdigo 2-de-5, onde palavras de 5 bits apresentam sempre 2 bits em 1, tem-se ento
exatamente 5!/2!(5-2)! = 5!/2!3! = 5.4/1.2 = 10 combinaes vlidas. Este cdigo j foi
analisado na seo 7.3 (cdigos de cinco bits ponderados, com pesos 74210). Outra
codificao possvel a 2-de-7, o cdigo biquinrio. Este cdigo j foi analisado na seo
8.5 (cdigos de sete bits ponderados, com pesos 5043210).
8 . 9 Cdigos de paridade
Nestes cdigos adicionado um bit palavra codificada, de tal forma que o nmero de uns
seja par (paridade par) ou mpar (paridade mpar). A tabela a seguir ilustra o uso de bits de
paridade par e mpar para um cdigo de trs bits.
Cdigo
000
001
010
011
100
101
110
111

Paridade par
0
1
1
0
1
0
0
1

Soma dos 1
0
2
2
2
2
2
2
4

Paridade mpar Soma dos 1


1
1
0
1
0
1
1
3
0
1
1
3
1
3
0
3

Tabela 8.9 - Cdigos de paridade


Se o cdigo utilizado for de paridade par, todas as palavras com um nmero mpar de uns
podem ser rejeitadas e sinalizadas como errneas. Se o cdigo for de paridade mpar,
qualquer palavra com um nmero par de uns estar errada.
Assim, pode-se detectar qualquer erro simples (inverso de um bit). Mas no existe neste
cdigo a capacidade de detectar dois ou mais erros (como por exemplo um erro que
transforme o cdigo 011001 em 101001 o nmero de uns permanece mpar, mas a palavra
foi alterada). Tambm no existe a capacidade de corrigir o bit errneo.
8 . 1 0 Cdigos de Hamming
Os cdigos de Hamming, desenvolvidos por R.W. Hamming, introduzem vrios bits de
paridade, que possibilitam no s a deteco de erros mas tambm a sua correo. Um
conceito importante para tal a distncia de Hamming, ou seja, o nmero de bits que so
alterados entre dois cdigos adjacentes.

8-9

Por exemplo, se estes dois cdigos so 0001 e 0100, sua distncia de 2; entre os cdigos
0000 e 1111 a distncia de 4. Se a distncia de Hamming for de 1, como por exemplo em
000, 100, 101, 001, 011, 111, 110 e 010, no possvel nem a deteco nem a correo de
erros; cada erro transforma um cdigo vlido em outro tambm vlido. Se a distncia for de
2, como por exemplo em 000, 011, 110 e 101, ento possvel detectar-se um erro, mas que
no pode ser corrigido (por exemplo, 001 poderia ter sido originado tanto de 000 como de
101 ou 011). Se a distncia for de 3, como por exemplo em 011 e 100, ento um erro
simples pode ser detectado e corrigido (por exemplo, 000 s poderia ter sido originado de
100), e um erro duplo pode ser detectado.
O cdigo de Hamming corrige um erro alterando a palavra errada para o cdigo vlido mais
prximo (de menor distncia), desde que esta menor distncia seja inequvoca, isto , no
existam duas ou mais palavras corretas igual distncia da palavra errada.
Para possibilitar a correo de um erro simples, o cdigo de Hamming mostrado na tabela a
seguir utiliza trs bits adicionais de paridade (A, B e C) para os quatro bits de cdigo
(ponderados por 8, 4, 2 e 1).
Posio
Cdigo
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

1
A
0
1
0
1
1
0
1
0
1
0
1
0
0
1
0
1

2
B
0
1
1
0
0
1
1
0
1
0
0
1
1
0
0
1

3
8
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1

4
C
0
1
1
0
1
0
0
1
0
1
1
0
1
0
0
1

5
4
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1

6
2
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1

7
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1

Tabela 8.10 - Cdigo de Hamming


Neste caso, o bit A usado para calcular a paridade par das posies 1, 3, 5 e 7. O bit B
usado para obter-se paridade par nas posies 2, 3, 6 e 7 enquanto que C realiza a
paridade par para as posies 4, 5, 6 e 7.
Existindo um erro, a posio do bit em erro calculada por cba, onde c, b e a sero
zeros se a paridade calculada por C, B e A for par ou uns se a paridade for mpar. Por
exemplo, se o nmero seis (1100110) for recebido erroneamente como 1100010, tem-se:

verificao das posies 4, 5, 6 e 7: paridade mpar: c = 1


verificao das posies 2, 3, 6 e 7: paridade par: b = 0
verificao das posies 1, 3, 5 e 7: paridade mpar: a = 1

Assim, cba = 101, ou seja, a posio 5 est errada e seu bit deve ser invertido para ser
corrigido. Se o nmero tivesse sido recebido correto, a combinao dos bits de paridade
seria zero (000).
Esta codificao pode ser estendida para qualquer nmero n de bits de informao, desde
que k bits de paridade sejam adicionados de acordo com a frmula 2k n + k + 1. A tabela
a seguir ilustra alguns casos.
8-10

Bits de informao
4
5
11
12
26
27
57

Bits de paridade
3
4
4
5
5
6
6

Tabela 8.11 - Bits de paridade no cdigo de Hamming

8 . 1 1 Cdigos alfabticos (ou cdigos alfanumricos)


Os computadores devem manipular no somente informao numrica, mas tambm
informao alfabtica, constituda de caracteres, sinais de pontuao e dgitos numricos. Os
cdigos que permitem este tipo de representao so denominados de cdigos alfanumricos.
Os primeiros cdigos desenvolvidos utilizavam 6 bits, o que possibilitava a representao de
todos as letras maisculas (26), os dgitos decimais (10) e mais uma srie de caracteres
especiais (ponto, vrgula, dois pontos, etc). Um destes cdigos o Hollerith, utilizado pela
IBM em cartes perfurados. Note-se que no havia a previso para letras minsculas.
Rapidamente os cdigos foram estendidos para sete bits (incluso das letras minsculas) e
posteriormente para oito bits. Os dois cdigos mais amplamente utilizados so o ASCII
(American Standard Code for Information Interchange) e o EBCDIC (Extended Binary
Coded Decimal Interchange Code). As letras so codificadas de tal forma a facilitarem a
ordenao alfabtica de informao textual atravs da simples ordenao binria crescente.
O cdigo ASCII de sete bits (com 128 combinaes possveis) mostrado na Tabela 8.12.
Os cdigos de 0 a 31 so reservados para caracteres de controle, como por exemplo
tabulao (ht), retorno de carro (cr), ejeo de pgina (ff), aviso sonoro (bel), retrocesso
(bsp), avano de linha (lf), tabulao vertical (vt), escape (esc) e outros. Os caracteres
visveis vo do cdigo 32 (espao em branco) at o 126 (caracter til). Note-se que dgitos e
letras esto em ordem numrica crescente (mas no contnua entre si), que no existe
codificao de nenhum caracter acentuado, e que letras maisculas e minsculas possuem
uma diferena numrica de 32.
Bits
inferiores
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

000
null
soh
stx
etx
eot
enq
ack
bell
bsp
ht
lf
vt
ff
cr
so
si

001
dle
dc1
dc2
dc3
dc4
nak
syn
etb
can
em
sub
esc
fs
gs
rs
us

Bits superiores (mais significativos)


010
011
100
101
0
@
P
!
1
A
Q
"
2
B
R
#
3
C
S
$
4
D
T
%
5
E
U
&
6
F
V
'
7
G
W
(
8
H
X
)
9
I
Y
*
:
J
Z
+
;
K
[
,
<
L
\

=
M
]
.
>
N
^
/
?
O
_

110
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o

111
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
del

Tabela 8.12 - Cdigo ASCII de 7 bits


8-11

O cdigo ASCII foi posteriormente estendido para oito bits, com a incorporao de mais 128
combinaes tabela acima. Com isto pode-se representar caracteres acentuados (, , , ,
, , , , etc) e diversos smbolos especficos de diversas lnguas. No existe, entretanto,
uma definio nica para esta tabela ASCII de 8 bits; cada fabricante desenvolveu a sua
prpria.
Atualmente oito bits j se tornaram insuficientes para representar todos os smbolos
utilizados. No h espao disponvel, por exemplo, para codificao do alfabeto grego, rabe
ou cirlico (para no mencionar os alfabetos hindus, japoneses e chineses). Para solucionar o
problema, estuda-se atualmente um cdigo de 16 bits, que possibilitaria representar 65536
smbolos distintos (Unicode).

8-12

Captulo
NOVE
Elementos bsicos de organizao

9 . 1 Introduo
Um computador pode ser projetado e/ou descrito em diversos nveis de abstrao. Assim,
pode-se descrever inteiramente um computador atravs de equaes booleanas ou o seu
equivalente em portas lgicas E, OU e NOT. Devido complexidade dos computadores
atuais, entretanto, tal nvel de abstrao no prtico, por envolver milhares de equaes.
Uma das solues empregadas para diminuir o nmero de elementos a serem manipulados
envolve o uso de nveis de abstrao mais elevados, tal como o nvel de transferncia entre
registradores (em ingls Register Transfer, ou RT). Este captulo aborda os principais
elementos utilizados neste nvel.
9 . 2 Portas lgicas e equaes booleanas
A lgebra booleana definida sobre um conjunto de dois elementos, denominados de
verdadeiro e falso, ou 0 e 1. Em sistemas digitais, estes dois valores so dois nveis de
tenso pr-fixados aos quais so associados os nomes 0 e 1.
O complemento de uma varivel booleana definido pela tabela-verdade indicada na Tabela
9.1. Basicamente tem-se uma alternncia entre os dois valores.
Entrada a
0
1

Sada s
1
0

Tabela 9.1 - Tabela-verdade da operao de complemento


Em termos de portas lgicas, esta operao realizada por uma porta NOT (ou NO), com a
representao grfica lustrada na Figura 9.1. Nas equaes a serem utilizadas neste livro ser
usado o smbolo de apstrofe () para indicar a operao de complementao. Assim, a
indica o complemento da varivel a.
a

Figura 9.1 - Porta NOT


Existem duas operaes bsicas na lgebra booleana, que so chamadas de AND (E) e OR
(OU). As tabelas-verdade destas duas operaes podem ser vistas nas Tabelas 9.2 e 9.3,
respectivamente. Nas equaes utiliza-se o smbolo . para a operao AND e o smbolo +
para a operao OR. Assim, a equao (a e b) ou c ser descrita como a.b + c, ou at de
forma mais simples como ab + c (omitindo o . da operao AND e simplesmente
escrevendo-se as duas variveis juntas).

9-1

Entrada a
0
0
1
1

Entrada b
0
1
0
1

Sada s
0
0
0
1

Tabela 9.2 - Tabela verdade da operao AND


Entrada a
Entrada b
Sada s
0
0
0
0
1
1
1
0
1
1
1
1
Tabela 9.3 - Tabela verdade da operao OR
Em termos de portas lgicas, as operaes de AND e OR so representadas pelas portas
mostradas nas Figuras 9.2 e 9.3, respectivamente. As portas lgicas implementam
exatamente a funo booleana correspondente, mas possuem um atributo adicional: elas no
so instantneas, mas necessitam de um certo tempo para operar. Isto faz que uma mudana
em uma das entradas no se reflita instantaneamente na sada, mas somente v ocorrer aps
um determinado tempo, denominado de tempo de propagao. Quanto menor for este tempo,
mais rpido o circuito ir responder s mudanas nas suas entradas, e por conseqncia
maior ser sua freqncia de operao.
Note-se que nas Figuras 9.2 e 9.3 considerou-se somente portas de duas entradas. Na
realidade, o nmero de entradas de uma porta pode ser varivel. O nmero de portas
aumentado simplesmente usando-se a propriedade associativa das operaes AND e OR.
a
s
b
Figura 9.2 - Porta lgica AND de duas entradas
a
s
b
Figura 9.3 - Porta lgica OR de duas entradas
Um determinada expresso lgica pode ser expressa em termos de uma tabela-verdade, de
uma equao booleana ou at mesmo em termos de portas lgicas. A Tabela 9.4 ilustra a
tabela-verdade e as portas lgicas para a equao booleana a + b.c.
a
0
0
0
0
1
1
1
1

b
0
0
1
1
0
0
1
1

c
0
1
0
1
0
1
0
1

s
0
0
1
0
1
1
1
1

Tabela 9.4 - Tabela-verdade da funo a+bc


9-2

b.c

a
Figura 9.4 - Portas lgicas para a funo a+bc

A construo de uma tabela-verdade bem simples. Constri-se inicialmente uma tabela,


considerando-se todas as combinaes possveis das variveis de entrada (a, b e c na Tabela
9.4). A seguir, para cada linha calcula-se o valor booleano da sada (ou sadas, se existirem
mais de uma). Note-se que o nmero de linhas de uma tabela a potncia de dois do nmero
de variveis de entrada. Assim, no caso da Tabela 9.4, tem-se 3 entradas e,
consequentemente, 8 linhas.
A obteno de um diagrama de portas lgicas a partir de uma equao booleana tambm
simples. Para cada operador da equao (e, ou, complemento) existe uma relao direta em
termos de portas lgicas (AND, OR, NOT). Note-se que, quanto mais simples for a equao
booleana, menor o nmero de portas lgicas necessrias. Portanto, muito importante
simplificar uma equao antes de transform-la em portas lgicas. A Tabela 9.5 e a Figura
9.5 ilustram este processo. Para facilitar a compreenso, foram adicionadas colunas tabelaverdade, que representam os valores intermedirios (parciais) da equao.
a
0
0
1
1

b
0
1
0
1

a
b
a+b
b(a+b)
1
1
1
0
1
0
1
1
0
1
1
0
0
0
0
0
Tabela 9.5 - Tabela verdade da funo a+b(a+b)

a
a+b

a+b(a+b)
0
1
1
1

a+b(a+b)

b
b(a+b)
Figura 9.5 - Portas lgicas para a funo a+b(a+b)

Tanto por observao da tabela-verdade da Tabela 9.5 como por simplificao da equao
booleana chega-se na equao a+b, que pode ser implementada atravs de uma nica porta
OR e representa uma grande economia de portas em relao implementao. Existem
inmeras tcnicas de simplificao de equaes booleanas, o que, entretanto, no ser tratado
neste livro. A minimizao de uma equao booleana importante em sistemas digitais por
diversos motivos. Entre os principais destacam-se:

reduo do nmero de portas lgicas necessrias para implementao da funo quanto


menos portas lgicas forem utilizadas, mais econmico ser o circuito.

9-3

reduo do nmero de entradas de uma porta lgica portas com menor nmero de
entradas so mais econmicas; assim, por exemplo, uma porta AND de trs entradas
melhor que uma porta AND de quatro entradas (e uma de duas entradas melhor ainda!).
reduo da potncia consumida pelo circuito.
reduo da rea fsica necessria para o circuito.
diminuio do tempo necessrio para que uma mudana em um ou mais entradas se
manifeste na sada do circuito (tempo de propagao).

Alm das portas tradicionais (AND, OR, NOT), ainda so utilizadas diversas outras. De
especial interesse so as portas NAND (no-e), NOR (no-ou), XOR (ou exclusivo) e
XNOR (no-ou exclusivo). As tabelas-verdade para estas portas esto mostradas nas Tabelas
9.6 a 9.9, respectivamente.
Entrada a
0
0
1
1

Entrada b
0
1
0
1

Sada s
1
1
1
0

Tabela 9.6 - Tabela-verdade da operao NAND


Entrada a
0
0
1
1

Entrada b
0
1
0
1

Sada s
1
0
0
0

Tabela 9.7 - Tabela-verdade da operao NOR


Entrada a
Entrada b
Sada s
0
0
0
0
1
1
1
0
1
1
1
0
Tabela 9.8 - Tabela-verdade da operao XOR
Entrada a
0
0
1
1

Entrada b
0
1
0
1

Sada s
1
0
0
1

Tabela 9.9 - Tabela-verdade da operao XNOR


Em termos de portas lgicas, a porta NAND simplesmente uma porta AND seguida de um
inversor, como ilustrado na Figura 9.6, assim como uma porta NOR uma porta OR
seguida de um inversor, como mostrado na Figura 9.7. Estas duas portas possuem grande
interesse na rea de sistemas digitais porque, dependendo da tecnologia empregada para a
fabricao de circuitos integrados, elas podem ser implementadas de forma mais simples e
econmica que as portas AND e OR.
a
b

s=(a.b)

a
b

a.b

s=(a.b)

Figura 9.6 - Porta lgica NAND de duas entradas e seu equivalente em termos de AND e
NOT
9-4

s=(a+b)

a
b

a+b

s=(a+b)

Figura 9.7 - Porta lgica NOR de duas entradas e seu equivalente em termos de OR e NOT
A operao de ou-exclusivo (Figura 9.8) derivada do ou, mas com sada em zero no caso
das duas entradas terem valor um. Esta pequena diferena torna o ou-exclusivo uma porta
com caractersticas nicas. Sua funo pode ser interpretada como soma em mdulo 2 (onde
o carry-out desprezado), ou como gerado de paridade par, ou simplesmente como o
operador diferena.
a
a
s=(ab)
ab
b
b
Figura 9.8 - Porta lgica XOR de duas entradas e porta lgica XNOR de duas entradas

9 . 3 Equivalncia de portas lgicas


Uma porta lgica pode ser substituda por um conjunto de portas equivalentes, ou seja, um
conjunto de portas que desempenha exatamente a mesma funo booleana. Assim, por
exemplo, uma porta NAND equivalente a uma porta AND seguida de um inversor (porta
NOT). A Tabela 9.10 ilustra algumas destas equivalncias.
Expresso ou porta
a+b
a.b
a xor b
a
a xnor b

Expresso equivalente
(a . b)
a nand b
(a+ b)
a nor b
a.b + a.b
(a.a), a nand a
(a+a), a nor a
a xor 1
a.b + a.b

Tabela 9.10 - Equivalncia de funes booleanas e portas lgicas


Estas equivalncias permitem que uma equao booleana qualquer possa ser descrita somente
com o uso de AND e NOT, por exemplo. Onde fosse necessrio utilizar o operador OR, ele
seria substitudo pelo seu equivalente. Com isto obtm-se os vrios conjuntos mnimos de
funes. Entre eles podem ser citados:
somente portas NAND - a partir do NAND pode-se obter um inversor, e a partir deste
uma porta AND e posteriormente uma porta OR.
somente portas NOR - a partir do NOR obtm-se o inversor, o OR e o AND, pelo
mesmo raciocnio utilizado para as portas NAND acima.
somente portas AND e NOT
somente portas OR e NOT
somente portas AND e XOR
Dependendo de quais portas lgicas so utilizadas, existem vrias formas de representao
de uma mesma equao booleana. Duas formas so particularmente teis, por serem
facilmente minimizveis utilizando-se lgebra booleana, e por produzirem uma estrutura de
portas lgicas bem regular: a soma de produtos e o produto de somas.
9-5

Na soma de produtos, as variveis de entrada so agrupadas inicialmente em termos-produto


(portas AND), e estes termos so posteriormente somados (portas OR) para compor a
equao final. No produto de somas, as variveis de entrada so agrupadas em termos-soma
(portas OR) e depois multiplicadas (portas AND) para formar a equao final. Tanto nos
termos-produto como nos termos-soma, as variveis de entrada podem aparecer ou na forma
normal ou na forma complementada. A forma de soma de produtos, assim como a de
produto de somas, pode ser facilmente derivada de uma tabela verdade, como ilustra o
procedimento abaixo:
1. Construir a tabela-verdade com as entradas e sadas do circuito.
2. Acrescentar uma coluna que contenha, para cada uma das linhas das possveis
combinaes de entrada, um termo-produto formado pelo e lgico de todas as variveis
de entrada. Se o valor da varivel de entrada for igual a zero (naquela linha da tabela), ela
aparece complementada no termo-produto. Se o valor da varivel de entrada for igual a
um, ela aparece na forma normal (sem ser complementada) no termo-produto.
3. Construir uma soma de produtos, na qual aparecem todos os termos-produto
correspondentes a valores de sada iguais a 1.
4. Simplificar a expresso obtida, aplicando as propriedades da lgebra booleana.
O procedimento para a formao de um produto de soma anlogo, conforme pode ser visto
no procedimento abaixo:
1. Construir a tabela-verdade com as entradas e sadas do circuito.
2. Acrescentar uma coluna que contenha, para cada uma das linhas das possveis
combinaes de entrada, um termo-soma formado pelo ou lgico de todas as variveis
de entrada. Se o valor da varivel de entrada for igual a zero (naquela linha da tabela), ela
aparece na forma normal no termo-soma. Se o valor da varivel de entrada for igual a
um, ela aparece complementada no termo-soma.
3. Construir um produto de somas, na qual aparecem todos os termos-soma
correspondentes a valores de sada iguais a 0.
4. Simplificar a expresso obtida, aplicando as propriedades da lgebra booleana.
A Tabela 9.11 apresenta um exemplo ao qual so aplicados os dois procedimentos descritos
acima.
a
0
0
0
0
1
1
1
1

b
0
0
1
1
0
0
1
1

c
0
1
0
1
0
1
0
1

s
1
0
1
0
1
0
1
0

termos-produto
a.b.c
a.b.c
a.b.c
a.b.c
a.b.c
a.b.c
a.b.c
a.b.c

termos-soma
a+b+c
a+b+c
a+b+c
a+b+c
a+b+c
a+b+c
a+b+c
a+b+c

Tabela 9.11 - Exemplo de formao de soma de produtos e produto de somas


Formando-se a soma de produtos, obtm-se:
s = a.b.c + a.b.c + a.b.c+ a.b.c
Para o produto de somas, obtm-se:
s = (a+b+c).(a+b+c).(a+b+c).(a+b+c)
Ambas equaes podem agora ser simplificadas, e em ambos os casos chega-se a mesma
forma mnima:
s = c

9-6

Observe-se que a forma soma de produtos pode ser implementada utilizando-se somente
portas NAND no lugar das portas AND e OR, como pode ser visto na Figura 9.9. Da mesma
forma, o produto de somas pode ser implementado com portas NOR no lugar das portas
AND e OR.
a

b
s

d
Figura 9.9 - Soma de produtos atravs de portas NAND

9 . 4 Circuitos combinacionais
Circuitos combinacionais so aqueles que no possuem memria ou quaisquer outros
elementos de armazenamento. Suas sadas so funo nica e exclusivamente das entradas.
So construdos por portas lgicas sem realimentao, isto , o valor das sadas no
utilizado em qualquer outra parte do circuito.
Dois circuitos combinacionais bem simples, bastante utilizados em sistemas digitais, so os
multiplexadores e os decodificadores. Uma unidade lgica e aritmtica (ULA ou UAL), por
outro lado, bem mais complexa, e ser vista em sees posteriores.
Um multiplexador (ou seletor) um circuito combinacional que possui m entradas e uma
sada. A cada instante de tempo, o valor da sada igual ao valor de uma das entradas,
conforme determinado por um conjunto de linhas de controle (ou linhas de seleo). A
Tabela 9.12 ilustra alguns casos de multiplexadores.
Multiplexador
2-para-1
4-para-1
8-para-1
16-para-1

Nmero de entradas
2
4
8
16

Nmero de linhas de seleo


1
2
3
4

Tabela 9.12 - Multiplexadores tpicos


Um multiplexador pode ser descrito atravs de um comando case:
case seleo of
0: sada := entrada0 ;
1: sada := entrada1 ;
2: sada := entrada2 ;
...
m: sada := entradam;
end;
No caso mais simples de um multiplexador de 2-para-1, a descrio tambm pode ser feita
atravs de um comando if-then-else:
if seleo=0
then sada := entrada0
else sada := entrada1 ;
9-7

Em termos de equao booleana ou portas lgicas, um multiplexador bem simples. A


seguir ilustrado o caso de um multiplexador de 2-para-1; os demais podem ser construdos
utilizando-se exatamente a mesma metodologia.
Sada (s)
Entrada0 (a) Entrada1 (b) Seleo (sel)
0
0
0
0
0
0
1
0
0
1
0
0
0
1
1
1
1
0
0
1
1
0
1
0
1
1
0
1
1
1
1
1
Tabela 9.13 - Tabela-verdade de um multiplexador de 2-para-1
Extraindo-se da Tabela 9.13 a equao booleana atravs de uma soma de produtos, obtmse:
s = a.b.sel + a.b.sel + a.b.sel + a.b.sel
A implementao atravs de portas lgicas iria necessitar de 3 inversores, quatro ANDs de
trs entradas e um OR de quatro entradas. Simplificando-se a equao, entretanto, obtm-se:
s = (a.b + a.b).sel + (a.b + a.b).sel
s = a.sel + b.sel
Esta equao pode ser implementada atravs de 2 postas AND de duas entradas, 1 porta OR
de duas entradas e 1 inversor, conforme mostra a Figura 9.10.
a
sel
s

b
Figura 9.10 - Portas lgicas de um multiplexador de 2-para-1
interessante notar que uma tabela-verdade pode ser simplificada se for utilizado um novo
valor o dont care, ou no interessa, representado por um X. Uma linha da tabela onde
uma varivel apresenta o valor X indica que, para o caso desta linha, o valor da varivel no
interessa para a sada, ou seja, a varivel no influencia o valor da sada neste caso.
A Tabela 9.14 mostra a tabela-verdade de um multiplexador 2-para-1 utilizando-se este novo
valor.
Entrada0 (a) Entrada1 (b) Seleo (sel)
Sada (s)
0
X
0
0
1
X
0
1
X
0
1
0
X
1
1
1
Tabela 9.14 - Tabela-verdade de um multiplexador de 2-para-1
9-8

Variveis com X no participam de um termo-produto quando a soma de produtos extrada


da tabela. Note-se que, no caso ilustrado na Tabela 9.14, a equao booleana derivada da
tabela j diretamente a equao booleana simplificada.
Um multiplexador representado como indicado na Figura 9.11. As duas representaes so
possveis; a literatura especializada usa inclusive outras representaes. Neste livro sero
utilizadas indistintamente qualquer uma destas duas representaes.
a

s
b

sel

sel

Figura 9.11 - Representao simblica de um multiplexador de 2-para-1


Um multiplexador pode ser expandido para trabalhar com entradas de n bits, ao invs de
entrada de 1 bit como foi o caso at agora. Basta utilizar n multiplexadores em paralelo, com
a linha de seleo sendo comum a todos os multiplexadores. O desenho utilizado o mesmo,
mas agora as linhas de entrada e sada representam n bits, ao invs de um s. Para melhor
compreenso, a dimenso de cada linha, em bits, indicada na figura. A Figura 9.12 ilustra
o caso de um multiplexador de 4-para-1 para dados de 8 bits.
a

8 s

sel 2

sel 2

Figura 9.12 - Representao de um multiplexador de 4-para-1, de 8 bits


Outro circuito combinacional de interesse para a organizao de computadores o
decodificador. Na sua forma mais geral, um circuito com n entradas e 2n sadas. Se o valor
codificado nas entradas b, ento todas as sadas esto em nvel zero e somente a sada de
ndice b est em nvel um. Um decodificador aparece mais comumente nas formas de 2-para4, 3-para-8 e 4-para-16. A Tabela 9.15 mostra a tabela-verdade de um decodificador de 2para-4, e a Figura 9.13 mostra uma possvel implementao.
Entrada 0 Entrada 1 Sada 0
Sada 1
Sada 2
Sada 3
0
0
1
0
0
0
0
1
0
1
0
0
1
0
0
0
1
0
1
1
0
0
0
1
Tabela 9.15 - Tabela-verdade de um decodificador de 2-para-4

9-9

sada 0

entrada 1
sada 1

entrada 0
sada 2

sada 3

Figura 9.13 - Implementao de um multiplexador de 2-para-4


Um decodificador comumente empregado para transformar informao codificada em 1, 2,
3 ou 4 bits em 2, 4, 8 ou 16 linhas, respectivamente. O exemplo mais tpico do seu emprego
na decodificao de uma instruo.
9 . 5 Circuitos seqenciais
Circuitos seqenciais so aqueles que possuem memria. Suas sadas so funo tanto das
entradas como dos valores da sada. Dito de outra maneira, nos circuitos seqenciais o novo
valor da sada dependo do estado atual destas sadas.
Dois circuitos seqenciais bastante utilizados so os registradores e os contadores. Ambos
so construdos com flip-flops, ou seja, registradores capazes de armazenar um nico bit.
Dependendo da maneira exata como controlado, um flip-flop recebe vrias denominaes
distintas.
O flip-flop mais simples o tipo RS. Possui duas entradas, R (de reset, ou desligar) e S (de
set, ou ligar). A ativao do sinal S coloca a sada do flip-flop em nvel 1, e a ativao do
sinal R leva a sada ao nvel lgico 0. A Figura 9.14 mostra duas possveis implementaes
de um flip-flop RS, uma com portas NOR e outra com portas NAND. Note-se que para
portas NOR a ativao de R e de S se faz com nvel lgico 1, enquanto que com portas
NAND a ativao de R e de S se faz com nvel lgico 0 (o que indicado pelo uso de R e
S).
R
S
Q
Q

Figura 9.14 - Flip-flop RS com portas NAND e portas NOR


9-10

A Tabela 9.16 mostra a variao dos valores dos sinais de sada (Q e Q) de acordo com os
sinais de entrada (R e S) ao longo de nove intervalos de tempo. A Figura 9.15 reproduz a
mesma informao em um diagrama de tempos.
t
1
2
3
4
5
6
7
8
9

R
0
0
0
1
0
1
0
0
0

S
0
1
0
0
0
0
0
1
0

Q
0
1
1
0
0
0
0
1
1

Q
1
0
0
1
1
1
1
0
0

Tabela 9.16 - Variao de sinais em um flip-flop RS


R
S
Q
Q
t

2
3
4
5
6
7
Figura 9.15 - Diagrama de tempos em um flip-flop RS

Observe-se que, quando as entradas no esto ativas, um flip-flop RS mantm seu estado
anterior, ou seja, memoriza o ltimo valor lgico que foi armazenado nele, seja via um
comando S (set) ou R (reset). Note-se tambm que a ativao de ambas as entradas
simultaneamente leva a resultados imprevisveis. Assim, o funcionamento de um flip-flop
RS pode ser resumido de acordo com a Tabela 9.17, onde Qt indica o estado atual e Qt+1
indica o prximo estado.
R
0
0
1
1

S
0
1
0
1

Qt+1
Qt
1
0
Indeterminado

Resultado
Estado fica inalterado
Estado passa para 1
Estado passa para 0
Condio de erro

Tabela 9.17 - Tabela de um flip-flop RS


Um flip-flop RS pode armazenar um valor, mas o seu controle complicado pelo fato de ser
sempre sensvel a qualquer variao de valor nas entradas R e S. Isto levou criao de um
flip-flop que pudesse ser insensvel s entradas em determinados momentos. Para isto foi
introduzida uma terceira entrada, denominada de controle, clock (relgio) ou carga.
Enquanto a entrada de controle estiver desabilitada (C=0), o estado do flip-flop ficar
indiferente s entradas R e S. A idia deste flip-flop sincronizar a mudana do seu estado,
isto , restringi-la a certos instantes. Uma implementao possvel para este flip-flop pode
ser vista na Figura 9.16.

9-11

S
Q

R
Figura 9.16 - Flip-flop RS com controle

Para eliminar a situao no permitida de R e S ativos simultaneamente, pode-se interlig-los


atravs de um inversor, como mostra a Figura 9.17. Neste caso R e S sempre tero sentidos
opostos. Elimina-se a situao de R e S ativos simultaneamente, mas tambm se elimina a
situao de R e S ambos estarem inativos. O resultado um flip-flop que copia o valor lgico
da entrada D (de Dado) quando o controle estiver ativo.
D
Q

Q
Figura 9.17 - Flip-flop D sensvel ao nvel
Com o flip-flop D tem-se o elemento bsico de armazenamento, que copia o valor da entrada
(D) quando o sinal de controle ou carga (C) ativado. No caso do flip-flop da Figura 9.17,
enquanto o valor da entrada de controle C for igual a 1, o valor da entrada D copiado (ou
armazenado) para o flip-flop. Se a entrada D variar enquanto C=1, o valor armazenado
tambm varia. Quando C=0, o flip-flop mantm seu valor, independente de variaes em D.
Com isto tem-se um flip-flop sensvel ao nvel, ou um latch.
Considerando o instante de ativao do sinal de controle, podem ser definidos quatro tipos
distintos:
Sensvel ao nvel 1 - o sinal de controle ativo enquanto apresentar nvel 1, e por
todo o tempo que permanecer neste nvel.
Sensvel ao nvel 0 - o sinal de controle ativo enquanto apresentar nvel 0, e por
todo o tempo que permanecer neste nvel.
Sensvel borda de subida - o sinal de controle ativo quando realizar uma
transio do nvel 0 para o nvel 1, e somente neste instante de tempo.
Sensvel borda de descida - o sinal de controle ativo quando realizar uma
transio do nvel 1 para o nvel 0, e somente neste instante de tempo.

9-12

Flip-flops sensveis borda so mais complexos que os sensveis ao nvel. A Figura 9.18
ilustra o caso de um flip-flop D sensvel borda de subida.
D

Figura 9.18 - Flip-flop D sensvel borda


Alm do flip-flop tipo D, tambm so bastante utilizados o flip-flop tipo T (toggle), que
muda de estado a cada ativao do sinal de controle, e o flip-flop JK, que possui duas
entradas (J e K). A Tabela 9.18 ilustra o comportamento de cada um destes trs flip-flops.
Note-se que o sinal de controle ativo pode significar qualquer uma das quatro situaes
analisadas acima.
Tipo D
D
X
D

C
inativo
ativo

Tipo T
Qt+1
Qt
D

C
inativo
ativo

Tipo JK
Qt+1
Qt
Qt

J
X
0
0
1
1

K
X
0
1
0
1

C
inativo
ativo
ativo
ativo
ativo

Qt+1
Qt
Qt
1
0
Qt

Tabela 9.18 - Flip-flops D, T e JK


Um conjunto de n flip-flops pode ser interconectado para formar um registrador de n bits, ou
seja, um registrador capaz de armazenar n bits. Um registrador deste tipo obtido usando
entradas D independentes para cada bit e um sinal de controle comum para todos os bits,
como mostra a Figura 9.21. Neste caso denomina-se este registrador de registrador de carga
e sada paralelas.

9-13

Dn-2

Dn-1

Flip-flop
D

Flip-flop
D

D1

.......

Qn-1

.......

Qn-2

D0

Flip-flop
D

.......

Flip-flop
D

Q1

Q0

Figura 9.19 Registrador de n bits de carga e sada paralelas


Um registrador, alm de armazenar um conjunto de bits, tambm pode ser utilizado para
efetuar algumas operaes sobre estes dados. Para isto existem registradores especiais, como
o registrador de deslocamento (shift-register) e o registrador contador (counter). Eles podem
ser facilmente implementados com flip-flops. Para isto basta interligar-se adequadamente as
entradas e sadas dos flip-flops, ou no mximo adicionar-se alguma lgica combinacional na
entrada dos flip-flops.
A Figura 9.20 ilustra um registrador de deslocamento que a cada ativao do sinal de
controle desloca todos os bits de uma posio para a direita. O novo valor do bit mais
significativo fornecido pela entrada E. Este tipo de registrador tambm conhecido como
um registrador de entrada e sada seriais. Um registrador de deslocamento para a esquerda
seria construdo de maneira anloga a da Figura 9.20, basta ligar a sada de cada flip-flop na
entrada do flip-flop imediatamente esquerda.
E
Flip-flop
D

Flip-flop
D

.......

Flip-flop
D

Flip-flop
D

Figura 9.20 - Registrador de n bits de carga e sada seriais


Tambm extremamente fcil fazer um registrador de deslocamento de entrada serial e sada
paralela; basta disponibilizar as sadas de todos os flip-flops internos do registrador. Para um
registrador de deslocamento com entrada paralela, necessrio acrescentar um multiplexador
na entrada de cada flip-flop, que selecionaria entre o dado a ser deslocado e o dado a ser
carregado no registrador.
Um registrador contador, ou simplesmente contador, um registrador que, com a ativao
do sinal de controle, incrementa (ou decrementa) o seu valor de uma unidade. Dependendo
do tipo de contagem desejada (binria, BCD, etc) o contador apresenta uma estrutura interna
particular. Alm disto, o contador pode ser projetado de tal forma que, ao atingir o valor n-1,
ele volta a zero no controle seguinte. Neste caso, diz-se que o contador mdulo n, ou seja,
ele divide por n.

9-14

Para contadores til o uso de flip-flop sensveis borda, para que a contagem se realize em
um instante de tempo bem preciso. A Figura 9.21 ilustra um contador binrio de n bits
utilizando flip-flops tipo T. A contagem binria obtida conectando-se a sada de um bit na
entrada do flip-flop seguinte. Observe-se que, para facilitar o desenho, o bit menos
significativo est a esquerda e o mais significativo a direita.

Flip-flop
T

Flip-flop
T

Q0

.......

Q1

Flip-flop
T

.......

Flip-flop
T

Qn-2

Qn-1

Figura 9.21 - Contador binrio de n bits


Se os flip-flops do contador da Figura 9.21 fossem sensveis borda de subida, teramos um
contador decrescente. Sendo eles sensveis borda de descida, tem-se um contador
crescente. Assim como os registradores de deslocamento, os contadores tambm podem
apresentar entrada de dados paralela. Neste caso tambm necessrio adicionar-se na entrada
de cada flip-flop um multiplexador para selecionar entre a carga de dados e a contagem.
Observe-se que, para contadores complexos, os flip-flops tipo JK so os mais utilizados,
por apresentarem controle mais complexo e assim possibilitarem contagens mais complexas.
9 . 6 Unidade Aritmtica e Lgica
Uma das partes essenciais de um computador a Unidade Aritmtica e Lgica, abreviada
comumente para UAL ou ULA. Esta unidade responsvel pela execuo de somas,
subtraes, funes booleanas, comparaes, etc. Sua complexidade diretamente
proporcional complexidade do conjunto de instrues do computador. Computadores
simples possuem ULAs simples, com cerca de 4 funes distintas. Computadores
complexos possuem ULAs complexas, com 8 a 16 funes distintas.
Operaes booleanas podem ser implementadas com portas lgicas simples, do tipo AND,
OR e NOT. Alm disto, elas no apresentam nenhuma interdependncia entre os bits
vizinhos, o que permite que uma operao lgica sobre n bits seja implementada por n
operadores independentes.
Operaes aritmticas, por outro lado, requerem uma implementao mais complexa. Um
somador binrio simples (meio-somador), de um bit, soma dois operandos de um bit (A e B)
e produz um bit de resultado (S) e um bit de carry-out (C). O meio-somador possui a tabelaverdade mostrada na Tabela 9.19, e pode ser implementado atravs de um ou-exclusivo (para
a soma) e uma porta AND (para o carry-out), como mostrado na Figura 9.22.
A
0
0
1
1

B
0
1
0
1

S
0
1
1
0

C
0
0
0
1

Tabela 9.19 - Tabela-verdade de um meio-somador

9-15

A
S = ab

A
Meio
Somador

C = a.b

Figura 9.22 - Meio-somador


O somador completo possui uma terceira entrada (carry-in), que corresponde ao carry out do
bit menos significativo. Sua tabela-verdade pode ser vista na Tabela 9.20. A Figura 9.23
mostra a implementao em termos de portas lgicas, e uma implementao atravs de meiosomadores pode ser vista na Figura 9.24.
A
B
Ci
S
Co
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 9.20 - Tabela-verdade de um somador completo
A

S = ABCi

Ci
Co = AB+Ci(AB)

Figura 9.23 - Somador completo implementado com portas lgicas


C

A
B
Ci

Meio
Somador

Co
S

C
Meio
Somador

Figura 9.24 - Somador completo implementado com meio-somadores


9-16

Um somador completo realiza a soma de um bit. Para somar n bits, necessrio agrupar n
somadores completos, onde o carry-out de cada um transportado para o carry-in do
somador imediatamente esquerda, conforme pode ser visto na Figura 9.25.
An-1

Bn-1

An-2

Bn-2

.......

A1

B1

A0

B0
Ci=0

Somador
completo

Somador
completo

Sn-1

Sn-2

.......

Somador
completo

Somador
completo

S1

S0

.......

Figura 9.25- Somador binrio de n bits


O somador de n bits da Figura 9.25 relativamente simples, mas apresenta um grande
problema: o grande atraso provocado pela propagao do carry entre os vrios somadores. O
somador de ndice j deve esperar que todos os j somadores anteriores (j= 0,1,... i-1)
terminem de calcular os bits de soma de carry-out, antes de que possa considerar o sinal de
carry-in como vlido. Com n somadores, o tempo de propagao n vezes maior do que o
tempo de um somador de um bit. Esta interconexo entre somadores recebe o nome de ripple
carry. Somadores mais complexos diminuem este atraso usando tcnicas de carry lookahead.
A operao de subtrao pode ser efetuada implementando-se o circuito de um subtrator
completo, ou ento utilizando-se a tcnica de complemento do subtraendo (a-b = a + not(b) +
1).
B
A

Somador

Ci=0
not(A)

A+B

A and B

A or B

Sel

S
Figura 9.26 - ULA com 4 operaes
9-17

Se uma ULA realiza diversas funes, uma forma simples de realizar sua implementao
projetar individualmente cada uma destas funes, e depois simplesmente reuni-las atravs
de um multiplexador, que seleciona qual o valor a ser apresentado na sada. Por exemplo,
suponha-se que uma ULA deva realizar as operaes de ADD, AND, OR e NOT. A
implementao desta ULA com um multiplexador de 4-para-1 pode ser vista na Figura 9.26.
Todas as linhas, com exceo de Ci e Sel, so de n bits.
Assim como qualquer outro circuito, tambm para a ULA vale o compromisso entre
desempenho e custo. Embora a ULA da Figura 9.26 tenha baixo custo, pois s utiliza
elementos padres, no tem alto desempenho, pois no foi otimizada para isto.
9 . 7 Memria
Assim como um registrador de n bits pode ser visto como um array de n flip-flops, uma
memria de m posies pode ser vista como um array de m registradores. Logicamente, o
funcionamento de uma memria pode ser visto na figura 1.27. Observe-se, entretanto, que
este um modelo lgico, e no um modelo da estrutura fsica da memria. Na operao de
escrita as linhas de endereo selecionam, atravs de um circuito decodificador, em qual
registrador o dado deve ser escrito. A sada de decodificador, juntamente com o sinal de
Write, formam o sinal de carga nos registradores. Na operao de leitura as mesmas linhas
de endereo selecionam, atravs de um multiplexador, qual o registrador que ter o seu
contedo levado at a sada. A habilitao do dado na sada realizada pelo sinal Read.
A implementao dos circuitos de memria atuais diferente do modelo apresentado na
Figura 9.27. Este modelo muito simplificado, e visa somente explicar o funcionamento
geral da memria. Observe-se inclusive que os tempos necessrios para a realizao de uma
operao de escrita ou leitura no esto modelados na figura.
Endereo

Write

Dado de Entrada
8
carga

Leitura

Posio 0
8

8
carga

Posio 1

Dado de
Sada

2
8
carga

8
Posio 2
8

8
carga

Posio 3
8

Figura 9.27 - Estrutura lgica de uma memria de 4 posies


9-18

Captulo
DEZ
Organizao do Neander

1 0 . 1 Elementos necessrios
Para definir uma organizao para o computador NEANDER, necessrio inicialmente
definir quais os elementos necessrios. Estes dados podem ser retirados das prprias
caractersticas do NEANDER:
Largura de dados e endereos de 8 bits
Dados representados em complemento de dois
1 acumulador de 8 bits (AC)
1 apontador de programa de 8 bits (PC)
1 registrador de estado com 2 cdigos de condio: negativo (N) e zero (Z)
Assim, os seguintes elementos so necessrios:
Um registrador de 8 bits para o acumulador
Um registrador de 8 bits para o PC (e possivelmente um registrador contador)
Dois flip-flops: um para o cdigo de condio N e outro para Z
Uma memria de 256 posies de 8 bits cada
1 0 . 2 Fluxo de dados
O conjunto de instrues do NEANDER fornece mais detalhes sobre o uso e as
interconexes necessrias entre estes elementos:
Cdigo
0000
0001
0010
0011
0100
0101
0110
1000
1001
1010
1111

Instruo
NOP
STA end
LDA end
ADD end
OR
end
AND end
NOT
JMP end
JN
end
JZ
end
HLT

Execuo
nenhuma operao
MEM(end) AC
AC MEM(end)
AC MEM(end) + AC
AC MEM(end) OR AC
AC MEM(end) AND AC
AC NOT AC
PC end
IF N=1 THEN PC end
IF Z=1 THEN PC end
trmino de execuo - (halt)

Tabela 10.1 - Conjunto de instrues do NEANDER


A fase de busca de cada instruo no est mostrada na Tabela 10.1, mas igual para todas
as instrues:
RI MEM(PC)
PC PC + 1
Com isto introduz-se um novo elemento, o Registrador de Instrues (RI), que deve
apresentar tamanho suficiente para armazenar uma instruo completa.

10-1

A seguir esto descritas as transferncias entre os diversos elementos de armazenamento que


formam a organizao do NEANDER. Note-se que estas transferncias j indicam quais os
caminhos de dados necessrios (qual sada de um registrador deve ser levada at qual entrada
de outro registrador), mas no indicam qual o caminho fsico exato utilizado para a
transferncia.
Instruo NOP
Busca:
Execuo:
Instruo STA
Busca:
Execuo:

Instruo LDA
Busca:
Execuo:

Instruo ADD
Busca:
Execuo:

RI MEM(PC)
PC PC +1
Nenhuma operao necessria
RI MEM(PC)
PC PC +1
end MEM(PC)
PC PC +1
MEM(end) AC
RI MEM(PC)
PC PC +1
end MEM(PC)
PC PC +1
AC MEM(end); atualiza N e Z
RI MEM(PC)
PC PC +1
end MEM(PC)
PC PC +1
AC AC + MEM(end); atualiza N e Z

Instruo OR
Busca:
Execuo:

Instruo AND
Busca:
Execuo:

Instruo NOT
Busca:
Execuo:
Instruo JMP
Busca:
Execuo:

10-2

RI MEM(PC)
PC PC +1
end MEM(PC)
PC PC +1
AC AC or MEM(end); atualiza N e Z
RI MEM(PC)
PC PC +1
end MEM(PC)
PC PC +1
AC AC and MEM(end); atualiza N e Z
RI MEM(PC)
PC PC +1
AC NOT(AC); atualiza N e Z
RI MEM(PC)
PC PC +1
end MEM(PC)
PC end

Instruo JN, caso em que N=1


Busca:
RI MEM(PC)
PC PC +1
Execuo:
end MEM(PC)
PC end
Instruo JN, caso em que N=0
Busca:
RI MEM(PC)
PC PC +1
Execuo:
end MEM(PC)
PC PC + 1

(esta transferncia a rigor desnecessria)

Instruo JZ, caso em que Z=1


Busca:
RI MEM(PC)
PC PC +1
Execuo:
end MEM(PC)
PC end
Instruo JZ, caso em que Z=0
Busca:
RI MEM(PC)
PC PC +1
Execuo:
end MEM(PC)
PC PC + 1
Instruo HLT
Busca:
Execuo:

(esta transferncia a rigor desnecessria)

RI MEM(PC)
PC PC +1
Parar o processamento

Uma transferncia do tipo x MEM(y) descreve uma leitura de memria. Esta operao
pode ser decomposta em trs fases:
1. REM y Transferncia do endereo y para o Reg. de Endereos da Memria
2. Read
Ativao de uma operao de Leitura da Memria
3. x RDM
Transferncia do Reg. de Dados da Memria para x
Por outro lado, uma transferncia do tipo MEM(y) x descreve uma escrita de memria.
Esta operao tambm pode ser decomposta em trs fases:
1. REM y Transferncia do endereo y para o Reg. de Endereos da Memria
2. RDM x
Transferncia do dado x para o Reg. de Dados da Memria
3. Write
Ativao da operao de Escrita na Memria
Alm disto, as seguintes observaes podem ser feitas:
1. Aps uma leitura de memria na posio do PC, o contedo deste registrador deve
ser incrementado, para apontar para a posio seguinte. Esta operao pode ser feita
a qualquer instante de tempo aps a transferncia do PC para o REM. E o
incremento pode ser feito em paralelo com outras operaes. Nas seqncias
descritas a seguir, este incremento feito sempre ao mesmo tempo que a operao
na memria (Read ou Write).
2. Um desvio condicional que no se realize no necessita ler o valor do endereo de
desvio. Assim, basta incrementar mais uma vez o valor do PC, para que este pule
sobre a posio de memria que contm este endereo e passe a apontar para a
instruo seguinte.
Com isto, obtm-se as seguintes seqncias:
Instruo NOP:
Busca:

REM PC
Read; PC PC + 1
RI RDM
10-3

Execuo:
Instruo STA
Busca:
Execuo:

Instruo LDA
Busca:
Execuo:

Instruo ADD
Busca:
Execuo:

Nenhuma operao
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read; PC PC +1
REM RDM
RDM AC
Write
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read; PC PC +1
REM RDM
Read
AC RDM; Atualiza N e Z
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read; PC PC +1
REM RDM
Read
AC AC + RDM; Atualiza N e Z

Instruo OR
Busca:
Execuo:

Instruo AND
Busca:
Execuo:

Instruo NOT
Busca:
Execuo:

10-4

REM PC
Read; PC PC + 1
RI RDM
REM PC
Read; PC PC +1
REM RDM
Read
AC AC or RDM; Atualiza N e Z
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read; PC PC +1
REM RDM
Read
AC AC and RDM; Atualiza N e Z
REM PC
Read; PC PC + 1
RI RDM
AC not(AC); Atualiza N e Z

Instruo JMP
Busca:
Execuo:

Instruo JN quando N=1


Busca:
Execuo:

Instruo JN quando N=0


Busca:
Execuo:
Instruo JZ quando Z=1
Busca:
Execuo:

Instruo JZ quando Z=0


Busca:
Execuo:
Instruo HLT
Busca:
Execuo:

REM PC
Read; PC PC + 1
RI RDM
REM PC
Read
PC RDM
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read
PC RDM
REM PC
Read; PC PC + 1
RI RDM
PC PC + 1
REM PC
Read; PC PC + 1
RI RDM
REM PC
Read
PC RDM
REM PC
Read; PC PC + 1
RI RDM
PC PC + 1
REM PC
Read; PC PC + 1
RI RDM
Parar o processamento

A Figura 10.1 ilustra uma possvel interconexo entre os elementos de armazenamento e os


elementos combinacionais necessrios para implementar a arquitetura do NEANDER. Ela
derivada quase que diretamente do fluxo de dados mostrado acima.
Para a organizao do NEANDER mostrada na Figura 10.1 as seguintes consideraes
podem ser feitas:
1. O incremento do PC poderia ser feito de vrias maneiras. Entre elas, podem ser
citadas a soma feita atravs da UAL, a soma feita atravs de um somador prprio e
o uso de um registrador contador. Para a organizao optou-se por esta ltima.
2. Para cada registrador necessrio um sinal de carga correspondente, que indica
quando o valor da sua entrada deve ser armazenado.

10-5

X+Y
X and Y
X or Y
not X
Y

Operaes da UAL

carga RDM

RDM

write

MEM

read

AC

carga AC

seleo UAL

UAL

carga NZ

N Z

Sinais de Controle para a UCP

DECOD.

Cd. Op.

P
C

Unidade de Controle

don't care

M
P
X

RI

carga RI

R
E
M

carga REM
s1
carga PC

Incrementa PC

Figura 10.1 - Organizao para o NEANDER


3. Para atualizar os cdigos de N e Z durante a operao de LDA, acrescentou-se uma
operao de transferncia atravs da UAL. Com isto, a UAL realiza cinco operaes
possveis.
4. As entradas X e Y da UAL, assim como as operaes de NOT(X) e Y, foram
escolhidas de forma a simplificar as transferncias. Com isto, a entrada X est
permanentemente ligada sada da UAL, e a entrada Y da UAL est ligada ao
RDM.
10-6

5. O nico registrador que recebe dados de duas fontes possveis o REM. Para
solucionar este conflito utiliza-se um multiplexador que seleciona entre o PC (sel=0)
e o RDM (sel=1).
1 0 . 3 Sinais de controle
Todos os sinais de controle da Figura 10.1 so gerados nos instantes de tempo adequados
pela Unidade de Controle. A Tabela 10.2 mostra a equivalncia entre as transferncias
realizadas e os sinais de controle a serem ativados.
Transferncia
REM PC
PC PC + 1
RI RDM
REM RDM
RDM AC
AC RDM; Atualiza N e Z
AC AC + RDM; Atualiza N e Z
AC AC or RDM; Atualiza N e Z
AC AC and RDM; Atualiza N e Z
AC not(AC); Atualiza N e Z
PC RDM

Sinais de controle
sel=0, carga REM
incrementa PC
carga RI
sel =1, carga REM
carga RDM
UAL(Y), carga AC, carga NZ
UAL(ADD), carga AC, carga NZ
UAL(OR), carga AC, carga NZ
UAL(AND), carga AC, carga NZ
UAL(NOT), carga AC, carga NZ
carga PC

Tabela 10.2 - Sinais de controle para as transferncias do NEANDER


Com isto, as seqncias de transferncias entre registradores analisadas anteriormente para
cada instruo podem ser transformadas em seqncias de sinais de controle. A Tabela 10.3
mostra estas seqncias para as instrues STA, LDA, ADD, OR, AND e NOT. A Tabela
10.4 mostra as seqncias para as instrues NOP, JMP, JN, JZ e HLT
tempo STA
t0
sel=0,
carga REM
t1
Read,
incrementa
PC
t2
carga RI
t3
sel=0,
carga REM

LDA
sel=0,
carga REM
Read,
incrementa
PC
carga RI
sel=0,
carga REM

ADD
sel=0,
carga REM
Read,
incrementa
PC
carga RI
sel=0,
carga REM

OR
sel=0,
carga REM
Read,
incrementa
PC
carga RI
sel=0,
carga REM

AND
sel=0,
carga REM
Read,
incrementa
PC
carga RI
sel=0,
carga REM

t4

Read,
incrementa
PC
sel=1,
carga REM
Read
UAL(Y),
carga AC,
carga NZ,
goto t0

Read,
incrementa
PC
sel=1,
carga REM
Read
UAL(ADD),
carga AC,
carga NZ,
goto t0

Read,
incrementa
PC
sel=1,
carga REM
Read
UAL(OR),
carga AC,
carga NZ,
goto t0

Read,
incrementa
PC
sel=1,
carga REM
Read
UAL(AND,
carga AC,
carga NZ,
goto t0

t5
t6
t7

Read,
incrementa
PC
sel=1,
carga REM
carga RDM
Write,
goto t0

NOT
sel=0,
carga REM
Read,
incrementa
PC
carga RI
UAL(NOT),
carga AC,
carga NZ,
goto t0

Tabela 10.3- Sinais de controle para STA, LDA, ADD, OR, AND e NOT

10-7

tempo JMP
t0
sel=0,
carga REM
t1
Read,
incrementa
PC
t2
carga RI
t3
sel=0,
carga REM

JN, N=1
sel=0,
carga REM
Read,
incrementa
PC
carga RI
sel=0,
carga REM

JN, N=0
sel=0,
carga REM
Read,
incrementa
PC
carga RI
incrementa
PC,
goto t0

JZ, Z=1
sel=0,
carga REM
Read,
incrementa
PC
carga RI
sel=0,
carga REM

t4

Read

Read

Read

t5

carga PC,
goto t0

carga PC,
goto t0

carga PC,
goto t0

JZ, Z=0
sel=0,
carga REM
Read,
incrementa
PC
carga RI
incrementa
PC,
goto t0

NOP
sel=0,
carga REM
Read,
incrementa
PC
carga RI
goto t0

HLT
sel=0,
carga REM
Read,
incrementa
PC
carga RI
Halt

t6
t7
Tabela 10.4- Sinais de controle para JMP, JN, JZ, NOP e HLT
Para o sequenciamento de todas as instrues so necessrios 8 tempos distintos, numerados
de t0 a t7. Os trs primeiros, t0, t1 e t2, servem para a fase de busca das instrues. Os
demais (t3 a t7) so necessrios para a fase de execuo. Observe-se que, quando termina a
execuo de uma instruo, existe um sinal de controle explcito para voltar ao tempo t0
(goto t0). Das Tabelas 10.3 e 10.4 podem ser derivadas as equaes booleanas para cada um
dos sinais de controle. Estas equaes so indicadas a seguir, em forma no necessariamente
otimizada:
carga REM = t0 + t3.(STA+LDA+ADD+OR+AND+JMP+JN.N+JZ.Z +
t5.(STA+LDA+ADD+OR+AND)
incrementa PC = t1 + t4.(STA+LDA+ADD+OR+AND) + t3.(JN.N + JZ.Z)
carga RI = t2
sel = t5.(STA+LDA+ADD+OR+AND)
carga RDM = t6.STA
Read = t1 + t4.(STA+LDA+ADD+OR+AND+JMP+JN.N+JZ.Z) +
t6.(LDA+ADD+OR+AND)
Write = t7.STA
UAL(Y) = t7.LDA
UAL(ADD) = t7.ADD
UAL(OR) = t7.OR
UAL(AND) = t7.AND
UAL(NOT) = t3.NOT
carga AC = t7.(LDA+ADD+OR+AND) + t3.NOT
carga NZ = t7.(LDA+ADD+OR+AND) + t3.NOT = carga AC
carga PC = t5.(JMP+JN.N+JZ.Z)
goto t0 = t7.(STA+LDA+ADD+OR+AND) + t3.(NOP+NOT+JN.N+JZ.Z) +
t5.(JMP+JN.N+JZ.Z)

10-8

Captulo
ONZE
Noes de Entrada e Sada

1 1 . 1 Introduo
Englobam-se sob a denominao de Entrada e Sada (E/S) todas as atividades de troca de
informaes do computador com o meio externo. Basicamente, o computador pode utilizar
atividades de entrada/sada com as seguintes finalidades:
troca de informaes com os usurios humanos do sistema, utilizando-se, para a
entrada de informaes ou para a exibio, dos chamados dispositivos perifricos.
Estes dispositivos podem ser teclados, vdeos, mouses, impressoras, leitoras de
cartes, etc.
permitir ao computador acessar dispositivos de armazenamento para grandes conjuntos
de dados, e que normalmente no podem ser mantidos todo o tempo em memria
primria. Estes dispositivos so englobados sob a denominao de memria
secundria e incluem, em geral discos e disquetes magnticos, CD-Rom, discos
magneto-ticos e fitas magnticas.
permitir ao computador comunicar-se com outros equipamentos, tais como outros
computadores e outros equipamentos cientficos e industriais, atravs de linhas
telefnicas e equipamentos especficos requeridos por este tipo de comunicao
(modens).
A arquitetura de E/S os elementos que um programa utiliza para transportar dados entre o
processador e os diversos dispositivos de E/S. Ela precisa especificar:
um mtodo para identificao do dispositivo a ser utilizado em uma operao de E/S;
o endereo do dado, ou seja, a fonte do dado a ser transportado para uma operao de
sada ou o destino do dado em uma operao de entrada;
a quantidade de dados a serem transportados;
os mtodos para determinar quando as operaes de E/S tiverem terminado ou
encontrarem dificuldades que impeam o seu trmino.
Estes parmetros no precisam ser necessariamente especificados a cada transferncia; alguns
deles podem ser convencionados de tal forma que estaro implcitos quando ocorrer o incio
da operao.
Uma caracterstica importante e fundamental da maioria dos dispositivos de E/S, sejam eles
orientados ao intercmbio de informaes diretamente com o usurio ou atuando no
armazenamento intermedirio de informaes, que eles operam em velocidades
consideravelmente mais lentas do que em processadores ou memrias (do tipo primrias).
Assim, referncias a dados ou interaes com seres humanos consomem enormes
quantidades de tempo em comparao a funes computacionais dentro de um par
processador-memria. Por esta razo, o projeto de E/S crucial para minimizar atrasos e o
projeto de funes de E/S normalmente sentido diretamente na arquitetura.

11-1

1 1 . 2 Dispositivos perifricos
A classe de dispositivos que so utilizados atualmente para realizao de operaes de
entrada e sada (isto , que atuam na troca de informaes tendo de um lado um computador
e do outro usurios humanos do sistema) bastante ampla e diversa, apresentando um leque
bastante variado de caractersticas e operao. Entre elas esto:
impressoras: para criar cpia em papel ou similar, de textos e figuras. As impressoras
variam em atributos, tendo com forma mais primitiva dispositivos que se
assemelham a mquinas de escrever. Atualmente, as mais modernas utilizam como
tecnologia a impresso a laser e podem imprimir at milhares de linha por minuto;
monitores (ou telas): que mostram textos e figuras, ambos podendo ser formatados de
diversas maneiras e utilizar vrias cores. O tipo mais comum, utiliza um tubo no
muito diferente de um tubo de televiso (tubo de raios catdicos). Atualmente,
utiliza-se tambm visores de cristal lquido, que consomem menor quantidade de
energia;
dispositivos grficos (ou plotters): que criam cpias impressas de grficos e curvas de
papel. Com o avano tecnolgico, as impressoras atualmente tem capacidade de
produzir material grfico de tima qualidade, tendo sua maior limitao no campo
(tamanho) de impresso. Os traadores, dependendo das suas caractersticas podem
produzir desenhos com mais de um metro de largura e comprimento limitado pela
bobina de papel;
dispositivos de explorao tica: que podem ler diretamente documentos. Dentre os
mais primitivos, pode-se citar as leitoras ticas de cartes ou folhas de marcas
(como as usadas no vestibular para registro das respostas). Atualmente, existem
dispositivos bem mais complexos como os scanners, que podem transferir para o
computador imagens obtidas em figuras, textos e fotografias;
dispositivos de apontamento: que podem indicar informaes ao computador atravs do
posicionamento de um cursor sobre a tela, como o caso do mouse e da caneta
luminosa (ou lightpen).
O mbito de dispositivos utilizados por computadores para comunicar-se com os usurios
encontra-se em expanso e melhorando em qualidade de interao. De forma a complementar
os dispositivos recm-mencionados, h grandes avanos no campo do reconhecimento de
voz e sada de voz. J h alguma disponibilidade nesta ltima opo.
1 1 . 3 Memria secundria
O grande volume de dados armazenados no computador inviabiliza a manuteno permanente
destas informaes integralmente na memria principal. Isto faz com que grande parte das
informaes, utilizadas menos freqentemente, seja guardada em dispositivos de uma classe
diferente dos empregados para a construo da memria principal (antes, memrias de
ncleos magnticos, atualmente circuitos semicondutores). Os dispositivos mais usados
anteriormente eram discos, tambores rotativos e fitas, todos magnticos; atualmente so os
discos e disquetes magnticos, fitas magnticas e os CD's.
Estes dispositivos so endereados utilizando-se conceitos de arquitetura e organizao de
E/S, embora no se enquadrem na primeira classe apresentada de dispositivos de E/S que
pressupem interao entre o computador e o usurio ou ser humano. Eles podem ser
considerados como arquivos eletrnicos que esto aptos a responder a uma solicitao de
dados.
1 1 . 4 Comunicao com outras mquinas
A troca de informaes com outras mquinas tambm consiste em uma atividade de entrada e
sada. Inicialmente, eram utilizadas para troca de informaes entre computadores ou entre
computador e algum perifrico especial localizados dentro de um prdio, em salas prximas.
11-2

Atualmente so usadas para comunicao entre mquinas situadas geograficamente distantes,


empregando linhas telefnicas e outros meios convencionais. Para isto, os sinais
empregados devem seguir normas especiais, afim de no perturbar os servios normais
oferecidos pela rede telefnica. Estes servios so utilizados em larga escala como, por
exemplo: por bancos, para transferir informaes referentes s transaes, saldos, extratos,
etc; por universidades e centros de pesquisa, para difuso de conhecimento e troca de
informaes; por empresas, para difuso de informaes entre filiais e setores agregados ou
junto a clientes, etc.
As caractersticas bsicas desta atividade diferem das demais, principalmente devido
distncia onde os elementos envolvidos esto colocados. Portanto, neste tipo de operao de
E/S:
existem equipamentos que operam eletricamente os dados para controlar nvel de
sinal, forma de transmisso, etc, que so os chamados modens (moduladoresdemoduladores);
a informao est mais sujeita a ser modificada, com a introduo de erros, por efeito
de rudo eltrico. Assim, em geral h necessidade de utilizar formas especiais de
codificao;
para evitar que haja muita perda de tempo no estabelecimento da comunicao,
incluindo o envio de informaes de controle, convm trabalhar com a transmisso de
blocos de informao grandes. Isto faz com que, em cada bloco de informao
transmitida, haja um percentual pequeno de caracteres ou palavras destinadas ao
controle e exigidas pelo protocolo de comunicao.
1 1 . 5 Sistemas de E/S
Como visto nas unidades anteriores, as atividades principais dos computadores envolvem
dois componentes: a unidade central de processamento (UCP) e a memria principal. A
unidade central de processamento busca instrues e dados na memria principal, processaos e armazena os resultados na memria principal. Os demais componentes podem ser
genericamente denominados de sistema de entrada e sada, uma vez que destinam-se a
transferir informaes entre a memria ou a CPU e o ambiente externo a estes. O sistema de
E/S inclui os dispositivos de E/S (perifricos ou demais elementos), unidades de controle
para estes dispositivos e o software especialmente projetado para operaes de E/S. Na
seqncia, sero referidos apenas perifricos, j que as demais operaes de entrada e sada
podem ser tratadas de forma anloga.
Existem vrias maneiras de se executar as operaes de E/S: a possibilidade de se empregar
estas formas depende dos recursos de software e hardware disponveis. A opo por uma
delas depende basicamente do desempenho desejado, dos dispositivos envolvidos, e do
volume dos dados.
1 1 . 5 . 1 Entrada e sada programada
Quando as operaes de E/S so controladas inteiramente pela UCP, isto , a UCP executa
programas que iniciam, dirigem e terminam as operaes de E/S, diz-se que o computador
emprega E/S programada. Este sistema existe em quase todos os computadores: emprega
pouco hardware especial, mas pode ocupar tempo demasiado da UCP no controle de
operaes relativamente simples de E/S. Uma destas funes o teste do estado dos
dispositivos de E/S para determinar se eles esto ou no requisitando servios da CPU.
Neste contexto, a transferncia realizada, em geral, entre um registrador da UCP (por
exemplo, o acumulador) e um registrador ligado ao dispositivo de E/S. A transferncia de
um dado do dispositivo de E/S para a memria principal necessita da execuo de duas
instrues pela UCP:

11-3

uma instruo (INPUT) para transferir uma palavra de um dispositivo de E/S para a
UCP;
uma instruo (STORE) para transferir uma palavra da UCP para a memria principal.
Endereamento
Em sistemas com E/S programada, os dispositivos de E/S, a memria principal e a UCP se
comunicam atravs de um barramento de uso comum, partilhado entre eles. As linhas de
endereamento deste barramento, usadas para para selecionar posies de memria, tambm
podem ser utilizadas para selecionar dispositivos de E/S. Cada ligao entre o barramento
principal e o dispositivo de E/S chamada de porta de E/S, sendo atribuda a ela um
endereo exclusivo. A porta de E/S pode incluir um registrador de dados.
Em algumas mquinas, parte do espao de endereamento da memria principal usado para
portas de E/S (E/S mapeada em memria). Neste caso, no h necessidade de dispor-se de
instrues especiais de entrada e sada, mas estes aspectos sero tratados mais tarde, em
outras disciplinas.
Instrues de E/S
O esquema de E/S programada pode ser implementado com poucas instrues. O
microprocessador Intel 8080, por exemplo, que usa o sistema de endereamento explicado
no pargrafo anterior, emprega apenas duas instrues de E/S:
IN x, que transfere uma palavra da porta de E/S x para o acumulador do 8080;
OUT x, que transfere uma palavra do acumulador do 8080 para a porta de E/S x.
A UCP no atribui qualquer interpretao s palavras transferidas: o programador deve fazlo. Algumas palavras podem indicar o estado do dispositivo de E/S e outras podem ser
instrues especiais para este dispositivo.
O simples envio de dados, sem que o dispositivo esteja pronto para receb-los, pode resultar
na perda de informaes. Por outro lado, a espera de informaes sem que haja tempos prdeterminados, pode resultar em tempos de execuo excessivamente longos. Assim, o ideal
que se tenha possibilidade de testar as condies de recebimento / envio de informaes pelo
dispositivo de E/S, ou seja, avaliar o estado do dispositivo. Normalmente este estado pode
ser especificado por um bit de informao que o dispositivo mantm disponvel de forma
contnua (independente das linhas de dados). Assim, sero necessrios os seguintes passos:
Passo 1: l a informao de estado;
Passo 2: testa o estado para determinar se o dispositivo est pronto para iniciar a
transferncia de dados;
Passo 3: se no est pronto, retorna ao passo 1; se est pronto, efetua a transferncia
do dado.
A seguir, tem-se como exemplo um programa escrito para o INTEL 8080, que executa a
transferncia de uma palavra de dados de um dispositivo de E/S para o acumulador na UCP.
Por hiptese, o dispositivo est ligado s portas 1 e 2. O estado do dispositivo est
disponvel continuamente na porta 1, enquanto que os dados solicitados esto disponveis na
porta 2 quando a palavra de estado tem o valor READY.
Instruo
Comentrio
WAIT:
IN 1
L estado do dispositivo de E/s para o acumulador
CMP READY Compara a palavra READY (de forma imediata, com o
acumulador; de for igual, liga Z=1, seno, Z=0
JNZ WAIT
Se Z1 (disp. de E/S no est pronto), volta para WAIT
IN 2
L palavra de dados para o acumulador
Figura 11.1 - Trecho de programa de E/S

11-4

1 1 . 5 . 2 Acesso direto memria


Com pequeno aumento na complexidade do hardware, o dispositivo de entrada e sada pode
ser munido da capacidade de transferir um bloco de informao da memria principal, ou
para esta, sem a interveno da CPU. Isto requer que o dispositivo de E/S seja capaz de
gerar endereos e transferir dados atravs do barramento da memria principal. Tambm
deve existir um sinal de solicitao de acesso ao barramento e um mecanismo de seleo prdefinido (por exemplo, por prioridades).
A UCP responsvel pela inicializao de cada transferncia de cada bloco. A partir da, o
dispositivo de E/S pode realizar a transferncia sem a necessidade de execuo de programa
pela UCP, ou seja, sem que a UCP se envolva diretamente na operao, exceto no seu final.
Quando isto ocorre, UCP e o dispositivo de E/S interagem e a UCP retoma o controle do
barramento atravs do qual foi feita a transferncia. Este tipo de capacidade de entrada e sada
denominada de acesso direto memria.
1 1 . 5 . 3 Interrupo
O dispositivo de E/S tambm pode conter circuitos que o habilitam a requisitar servios da
UCP, isto , provocam na UCP a execuo de um programa de atendimento ao dispositivo
perifrico. Este tipo de solicitao chamada de interrupo. A disponibilidade de servios
de interrupo livra a UCP de estar periodicamente testando o estado do dispositivo de E/S
(afim de verificar se ele tem dados para transferir ou no). Diferentemente do acesso direto
memria, uma interrupo faz com que a UCP pre temporariamente a execuo do
programa em curso, salvando o estado correspondente, e transfira o controle de execuo
para um programa de tratamento de interrupo. Assim, quando termina o atendimento da
interrupo, a UCP pode reassumir a execuo do programa antes interrompido.
1 1 . 5 . 4 Informaes complementares
Uma outra opo para execuo das atividades de entrada e sada a existncia de
processadores especiais, denominados de processadores de E/S ou canais de E/S, que
assumem o controle total deste tipo de operaes. Com isto, eles aliviam consideravelmente a
atividade da UCP, liberando-a para outro tipo de processamento. Estes processadores podem
acessar diretamente memria, podem interromper a UCP, ou executar programas, com
conjuntos especiais de instrues, orientadas a operaes de E/S. Eles tambm podem estar
ligados UCP por um barramento especial, chamado de barramento de E/S ou interface de
E/S.

11-5

Captulo
DOZE
Software Bsico

1 2 . 1 Introduo
Emprega-se comumente a palavra software para designar o conjunto de programas que so
utilizados com um sistema de hardware para facilitar seu uso por programadores e
operadores do sistema. Entretanto, esta utilizao do termo exclui programas de aplicaes,
incluindo apenas programas que fornecem funes gerais independentes dos detalhes de uma
aplicao (software do sistema ou software bsico). Na prtica, o que o usurio enxerga
facilmente deste grupo (embora ele seja mais extenso) so as linguagens que ele encontra
disponveis para programao, como Basic, Fortran, Cobol, Pascal, Logo, C, Delphi,
Visual C, C++, Java, etc, e programas escritos para resolver problemas especficos ou que
realizam funes especiais como planilhas de clculo, editores de texto, jogos eletrnicos,
entre outros, que fazem parte do software de aplicao.
Os programas que so escritos em linguagens de programao de alto nvel (emprega-se esta
denominao como distino a linguagens mais prximas da mquina) precisam ser
convertidos em programas de mquina. O processo desta converso executado por um
elemento de software denominado de processador de linguagem. Os programas escritos
em alto nvel tendem a ser independentes da estrutura da mquina na qual sero executados,
mas os programas de baixo nvel no. Por isso, esta converso dependente da mquina
sobre a qual vai ser executado o programa.
Os processadores de linguagem so programas longos, que ocupam espao significativo na
memria do computador. Por isso, freqentemente ficam armazenados (residem) em um
dispositivo de entrada/sada, como um disco, por exemplo. Este programa ser chamado e
copiado para a memria quando o programador quiser fazer uso dele. O uso de um
processador de linguagem significa que o programador vai execut-lo, tendo como entrada
de dados o programa escrito em linguagem de alto nvel. Como sada, ser obtida uma
representao do programa em forma diretamente executvel pela mquina ou uma forma
mais prxima desta do que a representao anterior (em alto nvel).
A escrita de um programa consiste na especificao, direta ou indireta, de uma seqncia de
instrues de mquina para o computador. As instrues de mquina formam um padro
binrio com o qual difcil de trabalhar do ponto de vista humano e complexo para entender.
mais fcil de escrever programas empregando smbolos mais familiares, orientados ao
usurio, tais como os caracteres alfa-numricos e suas combinaes. Como conseqncia
desta facilidade, torna-se necessrio traduzir esta representao simblica de programas em
elementos binrios que possam ser reconhecidos pelo hardware.
1 2 . 2 Linguagens de programao
Um programa uma lista de instrues ou comandos que determina ao computador a
execuo de uma tarefa de processamento de dados. H diversas linguagens de
programao, atravs das quais pode-se escrever programas para o computador; mas o
computador s pode execut-los quando eles esto representados internamente na forma
binria, organizado e codificado de forma a resultar na gerao de sinais de controle da UCP.
12-1

Portanto, os programas que no esto escritos na forma binria necessitam ser traduzidos
antes da sua execuo. Os programas podem se incluir em uma das seguintes categorias:
cdigo binrio: sequncia de instrues e operandos em binrio; lista a
representao exata das instrues como elas aparecem na memria;
cdigo octal ou hexadecimal: representao, equivalente ao cdigo binrio, em
representao octal ou hexadecimal;
cdigo simblico: o usurio emprega smbolos tais como letras, nmeros e
caracteres especiais, para representar o cdigo das instrues, composto por parte de
operao, endereo e outras. Cada instruo simblica pode ser traduzida em uma
instruo binria equivalente, o que feito por um programa montador (assembler).
Por esta razo, este programa simblico referido como programa em linguagem
de montagem ou assembler.
linguagens de programao em alto nvel: so linguagens especiais
desenvolvidas para facilitar a especificao de procedimentos usados na soluo de
problemas, no havendo preocupao com o comportamento do hardware que suporta
estas operaes. Portanto, elas empregam smbolos e formatos orientados a
problemas, de acordo com o raciocnio comumente empregado na soluo destes.
Assim, cada comando precisa ser traduzido em uma seqncia de instrues binrias,
antes que o programa possa ser executado em um computador. O programa que traduz
um programa escrito em linguagem de alto-nvel para binrio chamado de
compilador.
O termo linguagens de programao refere-se em geral ao estudo da estrutura das diversas
linguagens de programao de alto nvel, sendo realizado de forma independente dos
dispositivos computacionais de do seu hardware. Este no o enfoque para o pessoal de
arquitetura, que o utiliza com outra conotao incluindo linguagens a nvel de mquina.
A seguir ser exemplificada esta relao existente entre as diversas linguagens de
programao. Esta relao no estabelecida diretamente a nvel de comandos, mas tenta
deixar claro o nvel crescente de dificuldades de programao e depurao de cdigo,
medida que de vai do alto para o baixo nvel de programao.
1 2 . 3 Exemplo com NEANDER
Problema: Realizar a multiplicao de dois nmeros inteiros positivos, a e b (a0, b0),
utilizando o mtodo das somas sucessivas, ou seja, somar a consigo mesmo b vezes.
Descrio em portugus estruturado:
Sejam a,b,r trs nmeros inteiros positivos.
Ento fazer:
1. Zerar r
2. Enquanto b for maior que zero, somar a em r e decrementar b de uma unidade
3. Fim. O resultado est em r
Descrio em pseudo-linguagem de alto nvel
Begin Program
Variable a,b,r: type positive-integer
r:=0
while b>0
do r:=r+a
b:=b-1
12-2

end while
End Program
Descrio em pseudo-linguagem, sem uso de while
Begin Program
Variable a,b,r: type positive-integer
Label lao
r:=0
lao:
if b>0
then r:=r+a
b:=b-1
goto lao
end if
End Program
Descrio em pseudo-linguagem, somente com uso de if-goto
Begin Program
Variable a,b,r: type positive-integer
Label lao, fim
r:=0
lao:
if b=0 goto fim
r:=r+a
b:=b-1
goto lao
fim:
End Program
Descrio em pseudo-assembler

fim:

ORG 0
LDA Zero
STA r
LDA b
JZ fim
LDA r
ADD a
STA r
LDA b
ADD m1
STA b
JMP lao
HLT

a
b
r
zero
m1

DEF BYTE
DEF BYTE
DEF BYTE
DEF BYTE=0
DEF BYTE=-1

lao:

% define endereo de incio do programa


% r:=0
% if b=0 goto fim
% r:=r+a
% b:=b-1
% goto lao (poderia ser JMP lao+1: otimizao !)
% define varivel a
% define varivel b
% define varivel r
% define varivel zero e inicializa com 0
% define varivel m1 e inicializa com menos um

Descrio na linguagem do NEANDER (sem labels)


Endereo
0
2
4

Instruo
LDA 26
STA 25
LDA 24

% r:=0
% if b=0 goto fim
12-3

6
8
10
12
14
16
18
20
22
23
24
25
26
27

JN 22
LDA 25
ADD 23
STA 25
LDA 24
ADD 27
STA 24
JMP 4
HLT
0
0
0
0
255

% r:=r+a
% b:=b-1
% goto lao
% define varivel a
% define varivel b
% define varivel r
% define varivel zero e inicializa com 0
% define varivel m1 e inicializa com menos um

Descrio na linguagem do NEANDER (em decimal)


Endereo
0
2
4
6
8
10
12
14
16
18
20
22
23
24
25
26
27

Instruo
32 26
16 25
32 24
160 22
32 25
48 23
16 25
32 24
48 27
16 24
128 4
240
0
0
0
0
255

% r:=0
% if b=0 goto fim
% r:=r+a
% b:=b-1
% goto lao
% define varivel a
% define varivel b
% define varivel r
% define varivel zero e inicializa com 0
% define varivel m1 e inicializa com menos um

1 2 . 4 Programas a nvel de sistema


A produo de programas do sistema complexa, e requer extenso conhecimento e prtica
em computao. A existncia destes programas representa vantagens e convenincia aos
programadores de aplicaes e aos usurios de computadores em geral. O software do
sistema pode ser dividido em vrias categorias (algumas citadas anteriormente):
processadores de linguagens, que convertem programas para a linguagem de mquina
a partir de linguagens orientadas a usurios ou a aplicaes;
biblioteca de programas, que fornecem rotinas padro para o programador de
aplicaes;
programas carregadores (ou loaders), para facilitar a carga dos diversos programas
na memria do computador;
programas utilitrios, para facilitar a comunicao entre os componentes do
computador e entre o computador e o usurio;
programas de diagnstico, que facilitam a manuteno do computador;
um sistema operacional, que supervisiona os demais programas e controla sua
execuo.

12-4

Assemblers
Nos primrdios da computao, o programador de computadores tinha a sua disposio uma
mquina que, atravs do hardware, executava certas funes bsicas. A programao do
computador consistia em escrever uma srie de uns e zeros (linguagem de mquina),
colocar esta srie na memria, pressionar um boto. Com isto o computador iniciava a
execuo destas instrues.
extremamente difcil, entretanto, escrever e ler programas em linguagem de mquina. Na
procura por um mtodo mais conveniente, desenvolveram-se os processadores de
linguagem, ou seja, programas que traduzem um programa fonte escrito pelo usurio
em um programa objeto que pode ser entendido pelo computador. Um montador ou
assembler um programa do sistema que traduz um programa escrito em linguagem
assembler para um programa equivalente descrito em linguagem binria (da mquina).
Tipicamente, em uma linguagem assembler utilizam-se mnemnicos (smbolos) para cada
instruo de mquina, e a principal funo do montador traduzir cada um destes smbolos
no cdigo binrio equivalente.
Compiladores
Com o aumento da complexidade dos programas, mesmo o uso de linguagem assembler no
fornece o grau de abstrao necessrio para uma boa compreenso do programa. Assim,
desenvolveram-se as linguagens de alto nvel, onde um nico comando substitui dezenas de
instrues assembler. Um compilador um programa do sistema que traduz um programa
em linguagem de alto-nvel para a linguagem de mquina. Uma linguagem de alto nvel
suficientemente abstrata para ser independente do hardware (ou quase independente diversas caractersticas da arquitetura, como por exemplo a representao dos nmeros, so
refletidos nas linguagens). Para poder utilizar uma linguagem de alto nvel, o programador
deve conhecer sua sintaxe (forma) e sua semntica (significado).
As linguagens de alto nvel esto em constante evoluo, refletindo as mudanas que
ocorrem nas metodologias de programao. Dentre as primeiras linguagens destacam-se
FORTRAN, COBOL, ALGOL e PL/I. Entre as linguagens mais utilizadas atualmente podem
ser citadas C e PASCAL. Dois outros processadores de linguagens largamente usados so os
montadores de macros (ou macro-assemblers) e os interpretadores.
Macros
Uma macro uma pseudo-instruo que define um grupo de instrues de mquina. Uma
pseudo-instruo uma instruo que existe para definir condies especiais para o
montador; no resulta em cdigo propriamente dito, mas provoca transformaes no cdigo
original. Um montador de macros traduz programas escritos em linguagem assembler
com facilidades de macros, o que significa usar nomes simblicos para representar
seqncias de instrues. Cada vez que o programa encontra esta macro, substitui-a pela
seqncias de instrues.
Assim, por exemplo, poderia ser definida uma macro para o NEANDER que realizasse
subtraes. Tal macro (convenientemente denominada SUB), conteria as instrues
necessrias para realizar uma subtrao (inverso do subtraendo, soma de uma unidade e
soma com o minuendo), como ilustrado na definio da macro a seguir:
MACRO SUB end
STA aux
LDA end
NOT
ADD um
ADD aux
END MACRO

% realiza AC < AC MEM(end)


% salva Acumulador em MEM(aux)
% note-se que end um parmetro da macro
% MEM(um) contm a constante UM

12-5

Todas as ocorrncias posteriores do smbolo SUB seriam substitudas pela sequncia acima,
uma vez para cada smbolo. As macros no devem ser confundidas com as subrotinas.
Subrotinas so conjuntos de instrues que podem ser utilizadas diversas vezes por um
programa; assim, aes repetitivas no precisam ser escritas repetidamente e nem geram
trechos repetidos de cdigo em um programa. Cada vez que uma rotina utilizada,
executado um desvio do programa principal ( o que chama a subrotina) para o endereo
inicial onde ela se encontra carregada; aps sua execuo, executado um novo desvio que
causa o retorno para o programa principal. Uma subrotina para subtrao seria por exemplo
o seguinte trecho de programa, armazenado a partir do endereo xx :
xx

STA aux
LDA end
NOT
ADD um
ADD aux
RET

% salva Acumulador em MEM(aux)


% note-se que end um parmetro da subrotina
% MEM(um) contm a constante UM

A chamada desta funo seria feita atravs de uma instruo de chamada para subrotina
(CALL xx) ou de desvio para subrotina (JSR xx). Note-se que na chamada deve ser
fornecido o endereo de memria onde a subrotina foi armazenada. Tanto a instruo de
chamada (CALL ou JSR) como a instruo de retorno (RET) devem existir na arquitetura do
computador. O NEANDER, por exemplo, no possui estas facilidades.
Interpretadores
Um interpretador tambm um processador de linguagem que traduz cada comando de
um programa escrito em linguagem de alto nvel, executando-o imediatamente. Assim, o
interpretador trabalha alternando aes de traduo e execuo. O compilador atua
exclusivamente na traduo do programa fonte e no na execuo, o que os diferencia.
Assim o interpretador responde mais rapidamente a modificaes no programa fonte, o que
bastante til em um ambiente de desenvolvimento. Na execuo rotineira de programas ele se
torna mais lento, uma vez que refaz a traduo de cada comando a cada nova execuo. O
exemplo mais conhecido de interpretador o utilizado na linguagem BASIC.
Bibliotecas
Bibliotecas de programas existem para simplificar tarefas repetitivas de programao.
Assim, rotinas muito utilizadas so padronizadas, catalogadas e tornadas acessveis aos
usurios. Isto implica no estabelecimento de convenes. Nas aplicaes cientficas,
encontra-se neste campo a programao de funes matemticas tais como raiz quadrada,
funes exponenciais, inverso de matrizes, etc Para processamento de dados comercial,
encontram-se funes de organizao de arquivos como ordenao e busca ou procura.
Muitas outras esto disponveis ou podem ser programadas de acordo com o interesse dos
usurios.
Carregadores
Carregadores so programas do sistema que inserem ou posicionam outros programas na
memria e preparam-nos para a execuo. Podem ser do tipo absoluto, que carregam o
programa a partir de um endereo especificado pelo usurio, ou do tipo relocvel, que no
permitem a interveno do usurio, posicionando o programa de forma eficiente, de acordo
com as disponibilidades de espao na memria.
Em um esquema simples, o montador assembler armazena sua sada em uma memria
secundria (disco, por exemplo). A funo do carregador seria simplesmente transferir o
cdigo desta memria secundria para a memria principal e transferir o controle para ele
(colocar no PC para o endereo da primeira instruo do programa).

12-6

O uso de generalizado de bibliotecas, subrotinas e macros, entretanto, faz com que um


carregador tenha mais tarefas a realizar. Basicamente, um carregador desempenha quatro
tarefas:

Obter e reservar espao de memria para o programa e suas subrotinas (Alocao).

Resolver os endereos simblicos (labels) entre o programa e as bibliotecas utilizadas


(Ligao ou linking ).

Ajustar todas as referncias a endereos, de forma que elas correspondam aos


endereos fisicamente utilizados, ou seja, aos endereos da poro da memria onde
o programa foi carregado (Relocao).

Colocar fisicamente as instrues e os dados na memria (Carga).

O perodo de execuo de um programa denominado de tempo de execuo. O perodo


de traduo de uma programa fonte denominado de tempo de compilao ou tempo de
montagem. O tempo que se refere ao perodo de carga e preparao de um programa para
execuo chamado de tempo de carga.
Um programa carregador especial o bootstrap loader, cuja funo inicializar as
atividades no computador, quando ele ligado. O incio da operao do computador no
ocorre apenas com a ligao da energia, mas com a execuo de um programa de
inicializao. Este programa pode existir residente na memria ou pode ser carregado a cada
incio de operao.
Utilitrios
Programas utilitrios correspondem a uma coleo de rotinas freqentemente
empregadas que o programador pode usar para facilitar o seu trabalho de desenvolver tarefas
especficas e consequentemente seu trabalho de programao. Assim como no grupo
anterior, esto catalogados e disponveis aos usurios do sistema. Como exemplos, pode-se
citar: editores de texto, ferramentas de depurao de programas (memory dump, trace,
debuggers, etc), rotinas de entrada e sada.
Programas de diagnstico tm por objetivo exercitar certas partes do hardware do
sistema a fim de verificar situaes de mau-funcionamento ou para testar a funcionalidade
destas unidades. Assim, ele fornece sinais ao hardware e coleta as respostas
correspondentes, comparando-as com as informaes esperadas (resultados corretos obtidos
a partir da especificao da mquina, por exemplo). Estes programas auxiliam o pessoal que
trabalha em manuteno. Tambm podem ser rodados preventivamente para antecipar a
ocorrncia de problemas.
Sistema Operacional
Um sistema operacional uma coleo de programas que controlam a operao do
computador com o propsito de obter um desempenho eficiente. Consiste basicamente em
programas de controle permanentemente residentes na memria, que supervisionam todos
demais programas executados no computador. Em geral, sua eficincia dependente dos
recursos de hardware existentes para suport-lo, uma vez que ele faz uso intensivo destes
recursos. Sistemas operacionais rudimentares, instalados em geral em mquinas pequenas,
so referidos pelos termos: programa monitor, supervisor ou executivo. Os sistemas
operacionais sero estudados com maiores detalhes na prxima unidade.
1 2 . 5 Interface entre hardware e software
Uma questo essencial a nvel da arquitetura e organizao de computadores o
estabelecimento da interface entre o hardware e o software. possvel conhecer-se vrios
12-7

aspectos de software, sem que se tenha familiaridade com o detalhamento do hardware


associado; da mesma forma, possvel projetar-se partes de hardware sem conhecer suas
capacidades a nvel do software. Entretanto, os projetistas da arquitetura de computadores
precisam conhecer hardware e software, pois estas reas influenciam-se mutuamente.
Uma das definies estabelecidas a nvel desta interface a escolha das funes que sero
implementadas no hardware e quais utilizaro o software. Reflexos destas definies sero
sentidas na maior ou menor facilidade de programao e na velocidade de execuo (de
obteno de respostas) destas funes. Adicionalmente, podem existir estruturas de
arquitetura para apoiar funes do sistema operacional ou mecanismos que auxiliem na
deteco de erros de programao.
Existem trs nveis bsicos de implementao de funes de mquina no computador:
por hardware, fixas pelo projeto lgico dos circuitos;
por microcdigo, que consiste em um nvel intermedirio entre o hardware e o
software, e que pode conceitualmente ser enxergado como um conjunto de programas
escritos em baixssimo nvel (especificao direta de sinais de controle) que executam
diretamente sobre o hardware;
por software, especificadas em uma linguagem de baixo nvel.
Funes complexas podem ser obtidas a partir da composio de outras dos nveis
inferiores.
O nvel de problemas quando da definio da interface varia bastante em complexidade.
Assim como necessrio definir detalhes de implementao de instrues, tambm
necessrio determinar a arquitetura global da mquina. H, por exemplo, arquiteturas
dirigidas a determinadas linguagens, que utilizam combinaes implementadas em hardware
e firmware para estender a arquitetura de uma mquina na direo das formas utilizadas pelas
linguagens de programao.
Assim, grande parte das arquiteturas atuais so influenciadas por conceitos de estruturas de
programao encontradas em linguagens de programao de alto nvel e por funes comuns
aos sistemas operacionais. Entretanto, existem divergncias sobre quanto deve pesar esta
influncia e se ela deve ser mais motivada pelas caractersticas convenientes s linguagens ou
aos sistemas operacionais. Esta uma questo que resta a resolver.
1 2 . 6 Sistemas operacionais
Na primeira gerao de computadores, quando a programao era feita quase que
exclusivamente que atravs de chaves e lmpadas, os sistemas operacionais eram
praticamente inexistentes. A complexidade de tal programao, entretanto, motivou o
desenvolvimento de uma grande srie de programas, analisados na seo anterior. Um
quadro tpico da dcada de 60, quando o sistema de entrada e sada era baseado em cartes
perfurados, descrito a seguir:
o programador perfurava o seu programa fonte (por exemplo, na linguagem
FORTRAN) em um conjunto de cartes.
o programador pegava os cartes do compilador FORTRAN, marcados de verde para
serem visualmente distinguidos dos demais, os colocava na leitora de cartes e
carregava o compilador para a memria.
a seguir, com o compilador na memria, o programador colocava o programa fonte
(em cartes incolores) na leitora. O compilador lia estes cartes e, caso no existissem
erros, perfurava uma srie de cartes (vermelhos) com o cdigo objeto gerado.

12-8

terminada a tarefa do compilador, o programador colocava o carregador (em cartes


rosa) na leitora e carregava-o para a memria.
com o carregador na memria, o programador colocava agora seu programa objeto na
leitora, seguido dos cartes correspondentes s bibliotecas utilizadas (em diversas
cores especficas)
o carregador lia todos estes cartes, preparava o programa na memria e transferia o
controle do computador para este programa.
o programador colocava na leitora os cartes contendo os dados a serem manipulados
pelo programa, que lia estes cartes e gerava relatrios em uma impressora.
existindo erros na programao, todo o processo tinha que se refeito (e um dos
pesadelos da poca era a queda dos cartes no cho, embaralhando-os).
Este sistema de cartes multicoloridos, embora facilitasse em muito o uso do computador,
ainda era muito insatisfatrio. O programador tinha que comandar manualmente todo o
processo, e grande parte do tempo do computador era desperdiado lendo e perfurando
cartes. Conforme a demanda por tempo de processamento, memria, dispositivos de
entrada e sada e quantidade de dados aumentava, a gerncia eficiente destes recursos tornouse crtica. Todos os recursos de computao eram na poca muito caros e valiosos, e tinham
de ser eficientemente aproveitados para no gerar desperdcios.
Foi nesta poca que os sistemas operacionais foram desenvolvidos e refinados, sendo os
precursores dos sistemas utilizados hoje em dia. Um dos mais utilizados na poca era o
sistema operacional baseado em lotes (batch operating system ), que permitia que um certo
nmero de tarefas (jobs ) fossem colocadas juntas na leitora de cartes. Assim, por exemplo,
o exemplo descrito acima poderia ser realizado pelo seguinte conjunto de cartes:
//EXAMPLE
//STEP1 EXEC

100
9100
/*
//STEP2
/*
//STEP3
/*

JOB
DONOVAN,
FORTRAN, NOPUNCH
READ 9100,N
DO 100 I = 1,N
I2 = I * I
I3 = I * I * I
PRINT 9100, I, I2, I3
FORMAT (3I10)
END

T168,1,100,0

EXEC LOAD
EXEC OBJECT
10

O primeiro carto define um processo que o usurio de nome Donovan deseja realizar; o
segundo carto indica que os cartes seguintes devem ser processados pelo compilador
FORTRAN (at o carto de fim de arquivo, marcado com /*). O passo seguinte a chamada
do carregador, sem nenhum outro carto especial. O ltimo passo comanda a execuo do
programa objeto recm gerado, e fornece os dados a serem lidos (no caso o nmero 10).
Todos os cartes so interpretados pelo sistema operacional, que inclui todos os programas
do sistema mencionados anteriormente, alm de outros que supervisionam e controlam as
operaes de todos os programas no computador.
O sistema operacional realiza as seguintes funes:
aloca espao de memria e carrega programas para a execuo;
12-9

fornece servios para a obteno de dados de entrada e para a produo de dados de


sada;
fornece recuperao automtica para diversos tipos de erros, como erro na leitura de
um dispositivo de entrada, ou erro de overflow.
Nos sistemas operacionais simples, a memria totalmente alocada a um nico programa.
Assim, se este programa no utiliza toda a memria, parte deste recurso no utilizado. Nos
tempos atuais isto no considerado um problema srio, mas at a dcada de 70 a memria
era um recurso extremamente caro e que no poderia ficar ocioso. Para usar a memria na
sua integridade, desenvolveram-se os sistemas operacionais multiprogramados.
Em sistemas multiprogramados, dois ou mais programas so carregados na memria
(em reas diferentes, naturalmente) e o computador os executa simultaneamente. Havendo
apenas uma UCP, o sistema s pode processar, em cada instante, tarefas relativas a um
usurio. Mas o sistema operacional atende a todos com uma rotatividade intensa, de tal forma
que ele parece estar executando todos em paralelo.
Portanto, nestes sistemas, muitos programas podem residir simultaneamente no computador.
O sistema operacional aloca os diversos recursos computacionais para os programas
selecionados e mantm as atividades de chaveamento dos recursos durante o funcionamento
do sistema. Exemplificando, enquanto um programa est sendo executado na UCP, um
outro programa pode estar recebendo dados de um dispositivo perifrico (fita magntica, por
exemplo), e um terceiro pode estar imprimindo dados.
Em tais sistemas um dos principais problemas a gerncia eficiente de memria. Com a
constante alocao e liberao de memria, podem surgir reas de memria muito pequenas
para conterem um programa. O surgimento destes buracos na memria conhecido como
fragmentao. A fragmentao tem sido minimizada por diversas tcnicas. Uma delas
consiste em rearranjar os endereos do programas (realocao dinmica), movendo-os de
lugar e assim reunindo todas as pores no utilizadas em uma nica regio contnua de
memria.
Outra tcnica a de paginao: por este mtodo, os programas so sub-divididos em pores
iguais ou pginas, e a memria dividida em pores denominadas blocos. Na hora da
carga do programa, as pginas so carregadas nos blocos. Em um sistema de paginao
simples todas as pginas do programa so carregadas na memria. J em um sistema mais
sofisticado de paginao por demanda, um programa pode ser executado sem que todas
as suas pginas estejam na memria. As pginas so carregadas conforme elas so
necessrias, isto , quando elas so referenciadas (demandadas).
Em sistemas onde h mais do que uma UCP, h a possibilidade real de que sejam executadas
duas ou mais instrues ao mesmo tempo: neste caso, tem-se multiprocessamento, ou
seja, cada processador pode executar um programa diferente em paralelo (ao mesmo tempo)
aos demais.
Existem sistemas nos quais o tempo do processador partilhado entre diversos usurios: so
os sistemas de time-sharing (ou de diviso de tempo). Nestes, muitos usurios
comunicam-se com o sistema computacional atravs de terminais remotos. O sistema
operacional aloca a cada um, ou seja, a cada job, um perodo de tempo (time-slice) com
base em consideraes de prioridade. O job uma unidade de trabalho especificado
aplicado na execuo de uma tarefa de processamento de dados. Assim, durante estes
perodos de tempo, o computador faz com que o computador processe um job at que
ocorra uma das seguintes condies:
o job completado;
um erro detectado;
ocorre solicitao ou necessidade de uma entrada/sada;
o perodo de tempo termina.

12-10

Ento o processador designado para o job de mais alta prioridade. Nos dois primeiros
casos, o job deve ser removido da memria. Nos dois ltimos, o job suspenso
temporariamente.
O sistema operacional contribui para o usos mais eficiente dos recursos de hardware pelo
gerenciamento dos recursos de memria. Por exemplo, se um programa no pode ser
acomodado inteiramente na memria devido ao seu tamanho, o sistema operacional pode
dividi-lo em partes denominadas de pginas ou segmentos, transferindo-os gradualmente
da memria secundria para a principal.
O efeito do sistema operacional na gerenciamento do sistema computacional visa melhorar
sua eficincia, a qual avaliada pelo throughput. Throughput a quantidade de
processamento que o sistema realiza com sucesso durante um intervalo de tempo
especificado. Pode servir como medida de avaliao tanto para hardware como para o
software. A contribuio do sistema operacional neste sentido resultante da eficincia das
facilidades existentes no seu cdigo.
1 2 . 7 Funes bsicas dos sistemas operacionais
Um sistema operacional um conjunto de programas que permite ao computador controlar
os recursos, executar programas e gerenciar dados. Inclui todos os programas do sistema
mencionados anteriormente, alm de outros que supervisionam e controlam as operaes de
todos os programas no computador. Do ponto de vista do usurio, a funo do sistema
operacional auxili-lo na mecnica de resoluo de problemas.
O sistema operacional tem trs encargos principais: gerenciar a execuo de programas e
aes realizadas na memria, gerenciar o armazenamento de arquivos e gerenciar as
atividades de E/S. Para tanto, ele detm trs funes bsicas, que so:
controlar os recursos do sistema de computao;
executar os programas do computador;
gerenciar dados.
Estas funes so executadas sem que o programador precise estar instruindo o sistema
operacional a faz-lo, a cada momento. Na verdade, o sistema operacional j existe como
uma srie de programas que fazem parte da mquina e que permitem uma operao
razoavelmente confortvel para o programador de aplicaes. Os programas de controle
minimizam a interveno do operador de tal forma que as operaes do computador fluem de
forma suave e contnua. O programa mais importante no sistema o supervisor, cuja maior
parte reside na memria (est sempre l). Ele controla o sistema operacional inteiro e chama
outros programas do sistema operacional (do disco), quando necessrio, para que eles
permaneam na memria enquanto forem executados. Aps, eles retornam para o disco, para
que se tenha uso eficiente do espao de memria.
O sistema operacional aumenta a eficincia de duas maneiras:
ele atua como promotor da cooperao entre os usurios do sistema, ajudando-os a
fazerem o melhor uso possvel dos recursos computacionais de forma que todos tirem
proveito.
ele chama tradutores e outros programas para que se encarreguem de tarefas comuns
(usuais). Isto libera os programadores de aplicaes de tarefas rotineiras e repetitivas.
A fim de cumprir as funes acima listadas, o sistema operacional executa atividades tais
como:
operaes de seqenciamento e escalonamento de jobs (alocao de espao de
memria e carga de programas para a execuo), e controle de trfego: o sistema recebe
12-11

os diferentes jobs, e com base em suas caractersticas e necessidades decide sobre


sua execuo (prioridades, tempo de execuo, recursos disponveis, etc). Quando
possvel executar-se entrada/sada simultaneamente execuo de um programa, todas
estas funes so escalonadas pelo controlador de trfego.
programao de entrada e sada: executa diretamente as aes relacionadas s operaes
de entrada e sada, quando o canal de entrada e sada tem seu conjunto prprio de
instrues especializadas, necessitando apenas de instrues simples do usurio
referentes a estas operaes.
auto-proteo (contra o usurio) e proteo do usurio com relao aos demais: oferece
proteo ao usurio, evitando que seus programas, bases de dados ou arquivos sejam
modificados por aes maliciosas ou acidentais. Igualmente, o prprio sistema
operacional deve assegurar sua auto-inviolabilidade.
gerenciamento de armazenamento secundrio: o controle do uso de discos, fitas e
outros meios de armazenamento secundrio para os programas e dados do usurio,
sendo uma tarefa realizada pelo sistema operacional, transparente do ponto de vista do
usurio.
manipulao de erros: o sistema operacional deve realizar aes especficas com relao
aos diversos tipos de erros que podem ser causados durante a operao e uso da
mquina, que podem variar desde o envio de aviso ao usurio at a correo ou
modificao de parmetros para poder prosseguir na operao.
Estas funes precisam ser compatibilizadas com as estruturas de hardware, de modo que se
obtenha o melhor compromisso em objetivos conflitantes tais como eficincia, ciclos rpidos
de execuo, e convenincia do usurio. Para tanto so usadas diversas tcnicas de
implementao; algumas so comentadas ao longo deste material.
1 2 . 8 Processos e escalonamento
Um processo pode ser visto como uma seqncia ou conjunto de operaes que realizam
uma tarefa computacional, como por exemplo um processo de leitura, impresso, execuo,
etc. Um processo computacional pode ser seqencial com um conjunto de operaes
ordenadas em tempo ou concorrente com operaes paralelas. O conceito de processos
importante para sistemas operacionais porque a realizao de cada processo pode representar
a execuo de uma tarefa isolada, complementar ou concorrente escalonados pelo sistema
operacional.
Processos seqenciais so caracterizados por uma ordenao da execuo de suas tarefas no
tempo, portanto facilitando a administrao de um conjunto de tarefas por um sistema
operacional. Em processos concorrentes possvel ter duas ou mais operaes em paralelo.
Os processos concorrentes existem por causa da competio no uso dos recursos de um
computador como, por exemplo, usos da memria, UCP, leitoras, etc, resultando em
escalonamento de operaes para minimizar qualquer conflito entre processos como tambm
reduzir o tempo de execuo. Isto feito normalmente atravs de processos como, por
exemplo, leitura pelos canais, enquanto a UCP executa outros processos. A operao
spooling baseada sobre o princpio de sobreposio de processos com o auxlio de canais
ou dispositivos especiais. Em geral, o compartilhamento dos recursos de um computador em
tempo e espao necessita de um mdulo de escalonamento associado aos sistemas
operacionais multiprogramveis.
Existem duas formas principais de escalonamento: escalonamento sem e com preempo. O
escalonamento sem preempo assume que um processo j em posse de um recurso (UCP,
leitora, impressora, etc) no interrompido at o final da execuo do processo. Para
implementar tal poltica, so usados modelos primitivos na deciso de enfileiramento dos

12-12

processos, tais como: primeiro a chegar, primeiro a ser servido, ou processos com mnimo
tempo de execuo.
Com preempo, um processo pode ser interrompido em execuo para transferir controle de
um recurso para outro processo ou atender s necessidades do sistema. Este tipo de
escalonamento muito empregado em sistemas de multiprogramao onde existe
compartilhamento de espao e tempo por todos os processos. Em sistemas de
multiprogramao, os modelos para determinar a poltica de escalonamento podem ser
bastante complexos. A interrupo, bastante usada em sistemas multiprogramveis, tem a
funo de preempo de um processo momentaneamente em posse de um recurso de um
recurso, tal como UCP, dispositivos, etc.
1 2 . 9 Carga do sistema (inicializao da mquina)
Denomina-se de carga do sistema, operao que tem por objetivo colocar o computador em
condies de funcionamento. Consiste, fundamentalmente, em carreg-lo com rotinas
essenciais ao atendimento dos diversos programas de aplicao que lhe sero posteriormente
submetidos. Esta operao comumente denominada de bootstrap, referindo-se
informalmente ao procedimento como dar o boot na mquina.
Esta operao envolve: a colocao das primeiras instrues na memria a partir de um
comando especfico: nas mquinas modernas, este comando j vem embutido na inicializao
da mquina; nas antigas, era disparado por uma tecla ou boto especial, ou estas instrues
eram carregadas manualmente na memria da mquina. Este programa dispara a leitura (de
um disquete, do disco, de uma memria de armazenamento permanente, por exemplo) de um
programa carregador que ento posicionado na memria; a partir deste, novos programas
ou rotinas so sucessivamente carregados ou posicionados na memria, para executar as
aes subseqentes. Esta carga completa denominada de boot inicial do sistema. O
computador no tem a capacidade de reter a informao que est na memria principal
quando cortada a energia eltrica: assim, esta operao repetida a cada nova ligao da
mquina.
1 2. 10 Multiprogramao
Assim, como visto na unidade anterior, a multiprogramao se refere existncia de mais
do que um programa em diferentes partes da memria principal ao mesmo tempo. Seu
principal objetivo a eficincia computacional. Uma tcnica relacionada a multi-tarefas, ou
a existncia de diversas tarefas que so parte do mesmo job e podem ser executadas
simultaneamente.
Em sistemas multiprogramados, dois ou mais programas so carregados em diferentes
reas da memria, na expectativa de que eles vo gerar uma quantidade significativa de
trabalho para o computador. Se este trabalho gerado exceder a capacidade do computador, o
resultado que a mquina (em princpio) no dever ficar parada, esperando novas tarefas.
Assim, o programa supervisor executa o trabalho de alocao das diferentes unidades pela
manuteno de listas de passos que esto prontos para execuo em cada uma das unidades.
Quando uma unidade completa um passo, o supervisor pode consultar a sua lista para um
novo trabalho. No caso das unidades de entrada/sada, a concluso de uma passo indicado
por uma interrupo, que sinaliza UCP para parar temporariamente o programa atual e para
alocar mais trabalho unidade de E/S, se houver. No caso da CPU, a concluso indicada
quando o programa na UCP ou chega ao final do job ou requisita buffers de E/S que ainda
no esto disponveis isto se uma entrada foi requisitada, e o sistema ainda no
preencheu o buffer, ou se uma sada foi requisitada, o sistema ainda no esvaziou os buffers
anteriores de tal forma que haja lugar para os novos.
Neste gerenciamento de execuo de jobs, h problemas envolvidos tais como:

12-13

quando ocorre a interrupo nas atividades de um job, visando transferir o


processamento para outro, necessrio assegurar a guarda de valores contidos nos
registradores e memria, para posteriormente poder retomar as atividades;
determinao de qual(is) job(s) deve(m) ser carregado(s) na memria quando h
diversos aguardando na fila de execuo, e qual tarefa deve ser alocada a uma unidade
em particular, quando h diversas tarefas que aguardam por programas que j esto na
memria. A soluo emprega algoritmos de escalonamento e critrios de prioridades;
custo de memria, j que h necessidade de maior espao de memria do que em
sistemas onde somente um job pode ser rodado em cada momento;
ainda outros problemas dizem respeito a questes tais como: alocao de memria,
relocao e proteo.
A fim de racionalizar o compartilhamento pa UCP (processador) entre os diversos jobs
(processos) utiliza-se um scheduler, ou seja, um elemento de software que realiza duas
funes bsicas:
1. selecionar um processo entre os prontos para executar (ready) para ser o prximo a
ganhar o controle da UCP.
2. determinar a fatia mxima de tempo de processador (time-slice) que o processo pode
utilizar antes de ir novamente para a fila dos processos prontos para executar.
A Figura 12.1 ilustra as transies de estado que um processo pode sofrer. Os processos que
renem todas as condies necessrias para serem executados esto no estado pronto
(ready, em ingls). Quando um dos processos deste grupo ganha o controle do processador,
ele transiciona para o estado executando (running). Ele sair deste estado ou quando a sua
fatia de tempo terminar (neste caso ele retorna para o grupo pronto) ou quando necessitar de
um evento externo UCP (neste caso vai para o grupo bloqueado). Um processo em estado
bloqueado (blocked) permanece neste estado at que o evento esperado ocorra (como o
trmino de uma operao de E/S, a execuo de uma determinada operao por outro
processo, etc). Quando o evento ocorre, o processo volta ao grupo pronto.

Processo selecionado

Pronto

Executando

Processo precisa esperar


pelo trmino de um evento
(por exemplo, E/S)

Processo interrompido
(fim da fatia de tempo)

Bloqueado

O evento esperado pelo processo ocorreu


Figura 12.1 - Estados de um processo
A figura no ilustra nem o nascimento nem a morte de processos. Quando um processo
inicializado, ele vai primeiramente para a fila dos processos prontos, concorrendo com os
demais ao uso da UCP. Quando um processo encerra sua execuo, ele simplesmente no
retorna ao grupo pronto.

12-14

Diversos problemas podem ocorrer no escalonamento dos processos, principalmente


relacionados sincronizao entre processos. Um deste problemas o da corrida (race),
quando a sincronizao to crtica que diversas ordens de escalonamento podem produzir
diferentes computaes (resultados diferentes). Outro problema o do deadlock, quando
diversos processos se bloqueiam mutuamente, e de tal forma que cada processo fica
esperando por eventos que deveriam ser gerados pelos outros processos bloqueados. Estes
problemas podem ser resolvidos de duas maneiras bsicas distintas: por cooperao ou por
comunicao. Na comunicao, os processos trocam mensagens entre si, de forma a se
sincronizarem e impedir o surgimento de problemas. Na cooperao, existem recursos
crticos, que devem ser utilizados nica e integralmente por um processo antes de passarem
para outros processos. Estes recursos de excluso mtua normalmente tem seu acesso
controlado por variveis do tipo semforo. O detalhamento exato dos problemas acima,
assim como as metodologias e solues possveis sero analisados em outras disciplinas.
12 .1 1 Multiprocessamento
O multiprocessamento se refere aos sistemas onde h duas ou mais UCPs em um nico
sistema computacional; assim, h a possibilidade real de que sejam executadas duas ou mais
instrues ao mesmo tempo. Estas UCPs esto conectadas mesma memria, de tal forma
que elas podem estar executando partes do mesmo ou de diferentes programas. O uso de
mltiplas UCPs visa incrementar a capacidade de processamento do sistema, freqentemente
avaliado em mips (millions of instructions per second).
Ainda h os sistemas nos quais vrias UCPs, cada uma com a sua prpria memria, podem
ser interligadas atravs de canais, cada uma assemelhando-se a um dispositivo de E/S do
ponto de vista dos demais computadores. Isto no multiprocessamento: uma sistema
multicomputador, tambm denominado de rede de computadores. Nestes sistemas, h
distribuio dos jobs aos computadores que esto com tempo de processamento disponvel
nas modalidades requisitadas, o que caracterizado como distribuio de carga.
12 .1 2 Exemplos de sistemas operacionais
Os sistemas operacionais vm normalmente incorporados s mquinas (computadores),
sendo cobrados parte ou no. Atualmente, h tendncia no uso de sistemas operacionais
genricos, isto , sistemas operacionais cuja natureza permite que ele opere com sistemas de
computadores de diferentes fabricantes. Estes sistemas tem sido freqentemente criados por
companhias de software e no por fabricantes de mquinas. Exemplos destes casos so o
UNIX e o MS-DOS.
O UNIX foi desenvolvido em 1971 por Ken Thompson e Denis Ritchie na AT&T Bell
Laboratories para uso nos minicomputadores DEC da Bell. Os projetistas surpreenderam-se
com a aceitao no mercado externo Bell. Como razes para o fato, apontam: o uso
disseminado do software por faculdades e universidades, cujos usurios repassaram o uso
posteriormente s indstrias; outra razo foi a enorme reduo no preo por cpia, em 1981,
sendo estas comercializadas por US$ 40. Este um sistema operacional multi-usurio, com
diviso de tempo (time-sharing) que, embora inicialmente implementado para
minicomputadores, atualmente roda em mquinas de grande porte e em alguns
microcomputadores. Entre os problemas relacionados ao UNIX, apontam-se: sua dificuldade
de utilizao (do ponto de vista do usurio, no user-friendly, embora esta caracterstica
tenha sido melhorada pelo uso de menus tradicionais); alm disto, faltam ao UNIX algumas
caractersticas de segurana sofisticadas.
Para computadores pessoais, o sistema operacional mais popular o MS-DOS (Microsoft
Disk Operating System; Bill Gates, Microsoft). Este sistema foi escolhido pela IBM para
incorpor-lo aos seus computadores pessoais, em detrimento do CP/M (Gary Kildall, Digital
Research) que j se encontrava em uso, na poca. Neste sistema, os programas so
executados pela emisso de um comando, ou seja, um nome que chama o programa
12-15

desejado. Os comandos internos do DOS so colocados na memria do computador quando


o usurio liga-o. Os demais, que residem em disco, so chamados de comandos externos do
DOS.
De forma geral, o software escrito para rodar em um sistema operacional, no rodam em
outro. Assim, os projetistas de software tentam maximizar as vendas de seu produto
escrevendo programas para os sistemas operacionais mais utilizados. Alguns sistemas
fornecem figuras e/ou designaes simplificadas aos invs de comandos ou smbolos
simples como o PROMPT (>) do DOS. O efeito destas figuras o de apresentar um aspecto
mais amigvel para o usurio, existindo tal como uma roupagem ou shell ao redor do
sistema operacional. Assim, eles criam um ambiente confortvel para o usurio, que no
precisa estar memorizando comandos especficos.
12 .1 3 Redes de computadores
Computadores podem ser interligados entre si, de forma a compartilhar recursos (memria,
perifricos, UCP e informao). Se os computadores esto prximos entre si (na mesma sala
ou no mesmo prdio), a rede denominada de rede local ou LAN (Local Area Network). Se
por outro lado os computadores esto geograficamente distantes, tem-se uma WAN (Wide
Area Network).
Ao nvel de hardware, a comunicao realizada atravs de circuitos especiais, que
transformam os dados a serem transmitidos em sinais eltricos. Como meio fsico utilizam-se
desde pares telefnicos at cabos coaxiais, fibras ticas, enlaces de microondas e at satlites
de comunicao. Ao nvel de software desenvolveram-se diversos mtodos de comunicao
(protocolos), que definem como esta comunicao realizada e comos os dados
intercambiados devem ser interpretados. Frente a sua complexidade, redes modernas so
projetadas de forma altamente modularizada. A maioria das redes se encontra organizada em
uma srie de camadas hierrquicas, onde cada camada utiliza os servios definidos da
camada inferior e fornece uma outra srie de servios, de mais alto nvel, para a camada
superior. A International Standards Organization (ISO) criou o modelo de referncia OSI
(Open Systems Interconection), que define sete destas camadas em cada mquina:
1. Fsico: define as caractersticas dos equipamentos e os requisitos para a realizao
das ligaes.
2. Enlace (ou ligao): define os meios e os procedimentos para a transmisso de
blocos de informao e controle dos possveis erros que possam ocorrer.
3. Rede: define o intercmbio de informao dentro da rede. Trata do agrupamento da
informao em pacotes, do endereamento dentro da rede e da deteco e correo
de erros.
4. Transporte: trata da transferncia de mensagens, do agrupamento e decomposio
dos pacotes de dados. Outra atribuio a otimizao do uso da rede, selecionando
as conexes adequadas.
5. Sesso: controla as operaes realizadas sobre os dados, a fim de assegurar sua
integridade com respeito ao uso compartilhado dos mesmos. Neste nvel agrupamse as mensagens relacionadas entre si (estabelecendo uma sesso).
6. Apresentao: trata da organizao das entradas e sadas, definindo os formatos
necessrios aos terminais, aos arquivos e aos dados, a fim de que possam ser
utilizados pela sesso e pela aplicao do usurio.
7. Aplicao: consiste no controle e superviso dos processamentos dos usurios que
se intercomunicam.

12-16

Do ponto de vista do sistema operacional, tem-se um recurso a mais a ser gerenciado: a rede.
Servios que no esto disponveis no computador local podem estar acessveis via rede e,
para utiliz-los de forma adequada, o sistema operacional deve ter conhecimento deles. Temse assim os sistemas operacionais distribudos, onde os recursos a serem gerenciados
no esto concentrados em um nico computador, mas sim espalhados ao longo da rede.
O processador deixa de ser uma entidade nica no sistema. Alm do tradicional aspecto do
escalonamento de processos (qual processo ser executado pelo processador), surge a
questo do escalonamento de processadores (qual dos processadores disponveis ir executar
determinado processo).Uma outra consequncia da multiplicidade de processadores a
possibilidade de continuidade do processamento aps a ocorrncia de falhas em um
determinado processador. Como provavelmente ainda haver rplicas desse recurso na rede,
os processos afetados pela falha podem continuar aps migrarem para um processador no
falho.
Tais vantagens, entretanto, so pouco exploradas atualmente. Esse fato decorre da pouca
utilizao de sistemas operacionais distribudos nesse tipo de ambiente. mais frequente o
emprego de sistemas operacionais centralizados tradicionais, que no foram projetados
especificamente para ambientes distribudos, com extenses para suportar algumas operaes
remotas bsicas (como transferncia de arquivos e execuo remota de processos, por
exemplo).
Por um sistema distribudo se entende atualmente um sistema que consiste de mltiplos
processadores que no compartilham memria primria e se comunicam por mensagens
atravs de uma rede de comunicao. Programas distribudos podem contar com quatro tipos
de processos: clientes, servidores, filtros e pares. Clientes e servidores interagem usualmente
de forma sncrona: um cliente envia uma mensagem de requisio de servio a um servidor
local ou remoto; o servio executado pelo servidor, que retorna os resultados ao cliente
(que espera bloqueado). Um servidor pode ser projetado para atender mltiplas requisies
concorrentemente. Processos filtro recebem, processam e enviam adiante os dados obtidos.
Processos pares interagem com mensagens para cooperar no atendimento a requisies.
Nos dias de hoje os ambientes computacionais da maioria das organizaes apresentam um
realidade heterognea. Esta heterogeneidade, que pode ser definida com a diversidade
existente em sistemas de computao, manifesta-se especialmente sob os seguintes aspectos:
arquitetura da mquina: processadores, memria e dispositivos de E/S. As arquiteturas
atuais diferem em uma srie de aspectos, dos quais o principal a famlia do elemento
processador utilizado no equipamento. Por famlia entenda-se um conjunto de
elementos processadores com certo grau de compatibilidade entre si. Exemplos so os
microprocessadores Intel 80x86 e os Motorola 680x0. Uma parcela das estaes de
trabalho existentes atualmente utiliza processadores RISC (Reduced Instruction Set
Computer), embora as linhas de processadores de cada fabricante sejam incompatveis
entre si. H ainda outros tipos de processadores, tal como os Transputers, utilizados
em mquinas paralelas.
sistemas operacionais: chamadas do sistema, interface com o usurio (interpretador de
comandos e ambientes de janelas) e mecanismos de comunicao entre processos;
redes de comunicao: protocolos de comunicao e interfaces de rede;
linguagens de programao e compiladores: diferenas entre implementaes de uma
mesma linguagem e uso de diferentes linguagens.
Um sistema operacional de rede pode ser definido como a soma das camadas de software
escritas em cada mquina (host, ou hospedeiro) para propiciar comunicao e
compartilhamento de recursos entre a mquina local e diferentes mquinas remotas. Tanto o
computador local como os equipamentos remotos que compe a rede so entidades
autnomas.
12-17

Bibliografia

Alcade, E.; Garcia, M.; Peuelas, S. Informtica Bsica. Makron Books, So


Paulo, 1991.

Akonteh, Benny. Introduo organizao e arquitetura de computadores digitais.


AIT, Braslia, 1983.

Axmann, Hans-Peter. Einfhrung in die technische Informatik. Springer Verlag,


Wien, 1979. Captulos VI (Informationsdarstellung) e VII (RechengrundlagenComputerarithmetik).

Capron, H. L. Computers: Tools for an information age. The Benjamin/Cummings


Pub. Co., Redwood City, 1990.

Capron, H. L.; Williams, B. K. Computers and data processing. The


Benjamin/Cummings Pub. Co., Menlo Park, 1984.

Donovan, J. J. Systems programming. McGraw-Hill Kogakusha, Tokyo, 1972.

Gear, Wiliam. Computer organization


Kogakusha, Tokyo, 1969.

Hayes, John
Tokyo,1978.

Hamacher, V.C.; Vranesic, Z.G.; Zaky, S.G. Computer Organization. MacGrawHill, Tokyo, 1978.

Lorin, Harold. Introduo arquitetura e organizao de computadores. Editora


Campus, Rio de Janeiro, 1985.

Mano, M. M. Computer system architecture. Prentice-Hall, Englewood Cliffs,


1976.

Velloso, F. C. Informtica - uma introduo. Editora Campus, Rio de Janeiro,


1986.

Langdon Jr., Glen George; Fregni, Edson. Projeto de computadores digitais.


Editora Edgar Blcher Ltda, So Paulo, 1974.

Kraft, George; Toy, Wing. Mini/Microcomputer Hardware Design. Prentice-Hall,


New Jersey, 1979.

Bartee, Thomas C. Fundamentos de Computadores Digitais. Editora Guanabara


Dois, Rio de Janeiro, 1977.

Flores, Ivan. Computer Logic: the functional design of digital computers. PrenticeHall, New Jersey, 1960. Captulos 6 (Machine arithmetic), 7 (Number systems and
counting) e 8 (Machine Languages).

P.

Computer

architecture

and
and

programming.

McGraw-Hill

organization.MacGraw-Hill,

Flores, Ivan. Computer Design. Prentice-Hall, New Jersey, 1967. Captulos 8


(Numbers) e 9 (Codes).

Maley, Gerald A.; Earle, John. The logic design of transistor digital computers.
Prentice-Hall, New Jersey, 1963. Captulos 2 (Number systems and codes) e 7
(Arithmetic operations).

Coonen, Jerome T. An implementation guide to a proposed standard for floatingpoint arithmetic. Computer, vol.13, n1, january 1980, pp.68-79.

Weber, Raul Fernando. Processador Pipeline com arquitetura bit-slice. PsGraduao em Cincia da Computao, UFRGS, janeiro 1980. Dissertao de
mestrado. (Algoritmos de aritmtica binria).

Potrebbero piacerti anche