Hardware
INTRODUÇÃO
AOS MICROPROCESSADORES
v
Conceitos
Básicos
Os
termos micro-computador e microprocessador são hoje cada vez mais utilizados
pelo cidadão comum. A informática deixou de ser assunto exclusivo de
profissionais para poder estar ao alcance de todos.
O
interesse pelo cálculo automático esta intimamente ligado ao desenvolvimento
da matemática, não sendo de admirar que desde há longos anos o Homem tenha
tentado construir máquinas capazes de executar operações aritméticas. As
mais antigas, de que há conhecimento, são os ábacos chineses.
No
século XVII o cientista francês Blaise Pascal construiu um mecanismo, à
base de rodas dentadas semelhantes ás de um relógio, com o qual se podiam
executar adições e subtracções.
Com
o evoluir da técnica foi possível a construção de maquinas de calcular mecânicas
que têm as suas raízes na maquina de Pascal e que foram largamente utilizadas
até finais dos anos 60.
Estas
máquinas, se bem que dessem um contributo importante para o cálculo numérico,
não respondiam de forma alguma à crescente necessidade de se efectuar um
maior numero de operações num espaço de tempo cada vez mais curto. Para além
do factor tempo-velocidade, estas maquinas realizavam apenas operações aritméticas,
isto é, manipulavam apenas dados numéricos e, além disso, não tinham capacidade
de armazenamento.
Com
o desenvolvimento da electrónica foi possível as construção de maquinas
ditas “inteligentes”: os computadores.
No
principio dos anos 50 assistiu-se a comercialização dos primeiros computadores
cujos circuitos eram implementados com válvulas electrónicas. Devido a
enorme quantidade de válvulas utilizadas, na ordem da dezena de milhar, a
probabilidade de uma válvula se fundir em intervalos de tempo bastante curtos
(2 a 5 minutos) era grande, pelo que o seu funcionamento não se apresentava
seguro.
Com
a utilização dos dispositivos electrónicos no estado sólido, díodos e transístores,
a fiabilidade dos computadores aumentou extraordinariamente, ao mesmo tempo
que as enormes instalações até então necessárias para a sua acomodação
deixaram de ser um óbice.
A
par destes avanços tecnológicos, o factor económico tem vindo também a
evoluir rapidamente. Os computadores tomam-se mais potentes e mais baratos. São
estes dois vectores que projectam o computador para um número crescente de
aplicações fazendo com que seja possível assistir-se a uma verdadeira revolução
tecnológica no domínio do processamento da informação.
Convém
desde já esclarecer que, de facto, Os computadores actuais nada têm de
inteligente. Limitam-se a executar as instruções com que foram programados
pelo Homem e nada mais. Donde provém então todo o seu “poder”?
Essencialmente de dois factores:
grande
velocidade de execução de operações: milhares num segundo ;
facilidade
de armazenamento e tratamento de grande quantidade de informação (dados) .
A
evolução da electrónica do estado sólido conduziu a que numa pequena
pastilha de semicondutor (alguns milímetros quadrados) fosse possível a
integração de uma serie de componentes electrónicos (transístores, díodos,
resistências, condensadores) nascendo, assim, o circuito integrado.
Consoante
o grau de integração, temos circuitos SSI
(small scale integration: integração em pequena escala), MSI (medium scale integration: integração em media escala) e LSI
(large scale integration: integração em grande escala) e VLSI
(very large scale integration: muito grande escala de integração).
Considera-se um circuito como sendo de MSI
quando tem mais de dois mil transístores,
de LSI quando tem mais de cinco
mil transístores e de VLSI
quanto tem mais de dez mil transístores.
Com
a integração em grande escala passou a ser possível a construção de
pequenas unidades “inteligentes” alargando-se enormemente o âmbito de
utilização dos computadores.
Surgiram
as pequenas ma quinas de calcular programáveis, jogos electrónicos de televisão
e um sem-número de aparelhos que tem como elemento comum o microprocessador.

Fig.1
Basicamente,
um computador é constituído pelos seguintes blocos (fig. 1):
>Unidade
central de processamento.
>Memória
de programa.
>Memória
de dados.
>Dispositivos
de entrada e saída, de informação (dados e resultados).
>Relógio.
Os
termos ingleses estão mundialmente consagrados pela pratica, pelo que iremos
referi-los sempre que se tomar necessito.
A
unidade central de processamento (CPU:
Central Processing Unit) é o “cérebro” de todo o sistema. Normalmente
encontra-se dividida em dois blocos: a unidade aritmética e lógica (ALU: Arithmetic Logic Unit) e a unidade de controlo (CU:
Control Unit).
Quando
a unidade central de processamento (CPU)
se encontra num único circuito integrado estamos na presença de um Microprocessador, ou MPU
(do inglês Microprocessor Unit). Microprocessador é, portanto, um circuito
integrado que contém a unidade aritmética e lógica, a unidade de controlo e,
como iremos ver nas páginas seguintes, uma pequena porção de memória
(registos).
A
memória de programa é usualmente uma ROM
(Read Only Memory, ou memória só de leitura). Como o próprio nome indica, o
fluxo de informação dirige-se sempre no sentido da memória para a CPU. O programa tem apenas necessidade de ser lido durante o
processamento. Se pretendermos fazer a escrita de um programa a memória tem
de ser de leitura e escrita.
A
memória de dados tem a designação de RAM
(Random Access Memory, ou memória de acesso aleatório). Esta memória pode ser
alterada em qualquer momento e, como tal, é uma memória de escrita e de
leitura (R/W M: Read-Write Memory).
Os
dispositivos de entrada e saída (I/O
devices) são normalmente referidos como Input
e Output, respectivamente. Como
exemplo podemos referir os mais comuns e utilizados na maior parte dos computadores,
o écran, ou VDU (Video Display Unit),
e o teclado, ou keyboard.
São
estes dispositivos que permitem ao utilizador comunicar com o computador e, ao
mesmo tempo, receber resultados e informações do sistema.
Por
último, temos o relógio, ou clock,
que é como que o maestro de todo o sistema. e ele que impõe o ritmo de execução
das instruções e demais operações sendo em sincronismo com ele que actuam os
diversos sinais de controlo vindos da CPU
em direcção aos outros dispositivos.
Sempre
que a unidade central de processamento (CPU)
for um microprocessador (MPU)
podemos dizer que estamos em presença de um micro-computador.
A
relação entre o microprocessador e o micro-computador é semelhante aquela que
existe entre Os centros de decisão do cérebro e o corpo humano. O
microprocessador faz parte de uma estrutura a que chamamos micro-computador. E o
seu órgão de decisão.
Existem
micro-computadores formados por um único circuito integrado (8048, 8748 e
8051 da INTEL, por exemplo).
Um
dos campos em que o micro-computador esta a ser bastante utilizado é o da
electrónica de controlo.
Antigamente
os circuitos de controlo eram constituídos à base da lógica discreta
(hardware), em que o projecto e execução eram normalmente complexos e
demorados. Com o aparecimento dos micro-computadores passou-se a poder utilizar
o método da lógica programável (software) em conjunto com um pequeno numero
de circuitos que funcionam como interface entre o micro e o sistema a controlar.
Este
método tem a vantagem de ser de muito mais fácil execução ao mesmo tempo que
quaisquer modificações necessárias podem ser efectuadas com simplicidade.
Estamos
já na era do microprocessador.
Computadores
e micro-computadores funcionam fundamentalmente do mesmo modo. Este facto
verifica-se porque todos os sistemas são baseados num idêntico conceito de
processamento que, em última análise, nos conduz à noção de “bit”,
termo formado pelas palavras inglesas binary digit, digito binário.
Um
digito binário é um numero que pode tomar apenas dois valores: 0 ou 1
Qualquer
dispositivo que possa estar num estado “ligado” (ON)
ou “desligado” (OFF), “alto”
(HIGH) ou “baixo” (LOW) pode representar um digito binário nos seus dois valores possíveis,
isto é, 0 ou 1.
JÁ
referimos que todo o computador necessita de ser programado pelo Homem não
podendo por si só resolver qualquer problema. o micro-computador que iremos
abordar em pormenor não tem um fim especifico, podendo ser utilizado no cálculo
cientifico, no controlo de uma máquina ou dispositivo electrónico ou na Área
da gestão. Designam-se abreviadamente estes computadores por GPC, do inglês General Fur-pose Computer.
Suponhamos
que queremos somar os números 5 e 10 e multiplicar o resultado por 2.
Podemos
escrever um pequeno programa que o microprocessador vai lar, interpretar a
executar. Os resultados intermédios são guardados na memória RAM.
Passemos a exemplificar como actua a estrutura do micro-computador representado
na figura 1.
Pequeno
programa pode ser esquematizado da seguinte forma:
1
- /span>Ler de um dispositivo de INPUT (teclado) um numero (será o numero 5).
2-
Guardar num registo do microprocessador esse numero.
3-
Ler de um dispositivo de INPUT outro numero (será o numero 10).
4-
Somar Os dois números lidos e guarda-los na memória RAM.
5-
Ler outro numero de um dispositivo de INPUT
(será o numero 2).
6-
Multiplicar o numero guardado na RAM
pelo número lido em 5.
Enviar
o resultado para um dispositivo de OUTPUT
(écran).
A
passagem de cada segundo (a titulo de exemplo) o microprocessador irá
executar uma instrução, executando de uma forma sequencial todo o programa.
Temos
dito que a memória RAM é uma memória
de dados. Na verdade a RAM pode também
conter instruções que formam um programa. Sendo uma memória volátil,
sempre que se desliga o micro-computador todo o seu conteúdo se perde. Para
ultrapassar este problema utilizam-se dispositivos de armazenamento como, por
exemplo, as cassetes. As cassetes são largamente utilizadas nos computadores
pessoais porque a partir de um simples gravador de áudio se tem uma memória
de armazenamento de programas permanente. Para executar o programa bastará
passa-lo para a memória RAM sendo
depois processado pelo microprocessador.
Resumindo,
um micro-computador é formado, essencialmente, por cinco elementos: um
microprocessador (MPU), uma memória
de escrita e leitura (RAM), uma memória
só de leitura (ROM), um relógio (CLOCK)
e dispositivos de entrada a saída de dados (I/O).
v
O microprocessador
A
integração em larga escala permitiu a implementação da unidade central de
processamento (CPU) num único
circuito integrado: o microprocessador.
A
função do microprocessador é obter instruções da memória e executar as
operações requeridas. Uma vez que o microprocessador tem de comunicar com
outros dispositivos terá de existir um processo de ele os seleccionar.
Assim,
todos os dispositivos estão ligados ao microprocessador através de fios que
permitem o endereçamento das memórias e dos elementos de entrada e saída.
Estas linhas, normalmente, são em número de 16 e formam o barramento de
endereços, ou address bus. Colocando estas linhas no estado 0, ligação a 0 V,
ou no estado 1, ligação a + 5 V, o microprocessador selecciona um endereço e
comunica com o dispositivo seleccionado (fig. 2).
Fig.
2
Na
(figura 2) exemplifica-se a selecção de 16 memórias com 4 Kbytes cada uma.
usamos as quatro linhas de endereço de maior peso para seleccionar cada uma das
16 memórias, para o que usamos o descodificador 1 -de- 16. Repare que apenas
uma posição de memória é seleccionada por cada endereço porque apenas uma
das saídas esta activa de cada vez.
O
sentido das setas nas linhas do address bus significa que é o MPU
que gera o endereço e o comunica ao dispositivo, por exemplo uma memória.
Trata-se de um barramento unidireccional em que a informação flui do
microprocessador para os outros elementos do sistema. De notar também que as
linhas se encontram numeradas de 0 a 15 e, como podem “tomar” apenas os dois
valores lógicos, “0” ou “1”, formam um barramento de 16 bits.
Em
linguagem de computadores, um conjunto de oito bits forma um byte (ler baite).
Assim, Os 16 bits do barramento de endereços dividem-se em dois bytes:

O
byte menos significativo, bits 0,1, 2, 3, 4, 5, 6 e 7, é chamado low byte,
enquanto o byte mais significativo, bits 8, 9, 10, 11, 12,13,14 e 15, é chamado
de hight byte Os bytes normalmente também se podem dividir em dois conjuntos de
quatro bits referidos como nibbles. Como já foi dito, a passagem de um número
binário para hexadecimal é imediata através da codificação directa na
base 16 de grupos de quatro bits, ou seja, dos nibbles.
Depois
de seleccionadas as linhas do address bus (barramento de endereços) é necessária
a existência de um conjunto de fios que permita a comunicação do
microprocessador com o dispositivo escolhido. Estas linhas encontram-se
representadas na figura 2 e fazem parte do data bus, ou barramento de dados. A
informação flui nos dois sentidos, isto é, do microprocessador para o
dispositivo ou do dispositivo para o microprocessador. Trata-se de um barramento
bidireccional.
A
unidade básica de informação processada pelo microprocessador designa-se por
palavra. Consoante o número de bits que formam a palavra diz-se que estamos em
presença de um microprocessador de 4, 8,16 ou 32 bits. Hoje em dia os
microprocessadores mais comuns tem um comprimento de palavra de oito bits, caso
dos 8080 e 8085 da Intel, do 6800 e 6502 da Motorola e do Z80 da Zilog.
O
micro-computador que iremos estudar tem como CPU o microprocessador Z80, pelo
que iremos considerar oito bits como comprimento da palavra. Sendo a palavra a
unidade básica de informação o barramento de dados terá oito linhas,
realizando-se as comunicações byte a byte:

A semelhança do barramento de endereços os bits do
barramento de dados encontram-se numerados, de acordo com os seus pesos, de 0 a
7.O bit 0 é o bit menos significativo, LSB (Least Significant Bit), enquanto
o bit 7 é o bit mais significativo, MSB (Most Significant Bit). Novamente, 5
V numa linha de dados representa o digito “1”, enquanto “0” V representa
o digito binário “0”. Existe um terceiro tipo de linhas que ligam o
microprocessador aos outros dispositivos que formam o micro-computador. Trata-se
do barramento de controlo, ou control bus, em inglês. Estas linhas controlam
a sequência de acontecimentos em todo o sistema. Por exemplo, quando existem
dados no barramento de dados são os sinais de controlo no barramento de
controlo que informam o dispositivo se é o microprocessador que fornece os
dados ou se, por outro lado, é o microprocessador que extrai a informação
do barramento de dados. Em resumo, trata-se de definir se o microprocessador
efectua uma operação de “escrita” ou de leitura, para evitar que vários
dispositivos enviem simultaneamente sinais para o barramento de dados.
Já sabemos através de que meios físicos o
microprocessador comunica com os restantes dispositivos do sistema. Estudemos,
então, a sua arquitectura interna. Um microprocessador CPU o micro-computador)
é constituído basicamente por três grupos de elementos (fig. 3):

Ø
Unidade aritmética e lógica, ALU. Esta unidade efectua as operações básicas: aritméticas, lógicas
e de rotação.
Ø
Unidade de controlo. Descodifica as instruções extraídas
da memória e gera Os sinais internos a externos (sistema) de modo a que as
instruções sejam executadas.
Ø
Conjunto de registos que memorizam temporariamente dados,
instruções a endereços.
A
unidade aritmética e lógica está ligada directamente a dois registos que contêm
Os dois nu meros binários a operar (fig. 4). Um dos registos é directamente
acessível ao programador e designa-se por acumulador (A).

O
outro registo (registo temporário) é por vezes também directamente acessível,
dependendo este facto do tipo de microprocessadores. Para um microprocessador
com um barramento de dados de oito bits estes registos podem armazenar uma
palavra, isto é, um byte.

Fig.4
O
acumulador, além de reter um dos operandos, guarda também o resultado final da
operarão efectuada. Na comunicação com o exterior o acumulador encontra-se
sempre presente, quer na transferência de resultados para os dispositivos de saída,
quer na entrada de dados através dos dispositivos de entrada.
As
operações aritméticas e lógicas que a ALU pode efectuar sobre os operandos são
as seguintes (entre parêntesis os termos em inglês):
Ø
Adição (add).
Ø
Subtracção (subtract).
Ø
Incrementação (increment).
Ø
Decrementação (decrement).
Ø
Complementação (complement).
Ø
Deslocamento para a esquerda (shift left).
Ø
Deslocamento para a direita (shift right).
Ø
E (AND).
Ø
OU (OR).
Ø
OU- Exclusivo (XOR)
Estas
instruções serão minuciosamente descritas no desenrolar do trabalho.
Para
executar um programa a CPU necessita de ler na memória do micro-computador as
instruções nela armazenadas. Para efectuar esta operação a CPU dispõe,
normalmente, de três registos específicos, isto é, registos que serão
utilizados com este fim: registo de endereço, contador de programa e registo
de instrução.
Se
queremos ler ou escrever (read ou write) uma palavra de dados na memória,
precisamos de indicar o endereço da célula de memória a que queremos ter
acesso. Esta posição de memória é armazenada num registo de endereço (address
register ou data counter).
O
comprimento do registo de endereço é igual ao numero de linhas do barramento
de endereços. Nos exemplos que vimos são 16.
A
dimensão do registo de endereço depende do número de células de memória que
o microprocessador pode endereçar. No caso dos 16 bits temos 2^16 =65 536
palavras. Geralmente utiliza-se outra notação para indicar o número de posições
de memória endereçáveis. Por definição 2^10=1024=1 k e uma vez que
2^16=2^10 * 2^6=1024 x 64, dizemos que a capacidade de endereçamento do
microprocessador é de 64 Kbytes (ver fig. 2).
o
contador de programa (PC), ou program counter em inglês, é um registo em tudo
análogo ao data counter. A diferença reside no facto de o program counter
endereçar sempre uma célula de memória que contém uma instrução do
programa, enquanto o data counter selecciona uma posição de memória que contém
uma palavra de dados. ~ também um registo de 16 bits, podendo endereçar, como
sabemos, 64 k posições de memória.
Se
armazenarmos na memória códigos de instruções de uma forma sequencial
construímos um programa. Para esse programa ser lido é necessário carregar o
contador de programa com o endereço da primeira posição da memória que contém
o código do programa. Estando o programa armazenado sequencialmente em memória
bastará incrementar de uma unidade o conteúdo do PC para lermos o segundo código
de instrução e assim por diante.
Quando
o program counter endereça uma posição de memória a instrução que nela
se encontra armazenada é colocada num registo da CPU designado por registo de
instrução, IR (instruction register). Esta operação é designada por FETCH
(busca).
Uma
vez no IR, o código da instrução é descodificado e a unidade de controlo
gera Os sinais necessários à execução dessa instrução. Esta operação é
designada por EXECUTE (execução).
Apresentamos
seguidamente um pequeno exemplo de adição de dois números armazenados na memória.
Os códigos das instruções são realistas, se bem que não correspondam as
instruções apresentadas. Não considere por agora Os códigos de instrução
mas tente compreender a descrição do procedimento que passamos a descrever.
o
nosso programa inicia-se na posição de memória com o endereço
2000(16)
(referimo-nos a base 16):

Inicialmente, o contador de programa (PC) contém o
endereço, 2000(16), da primeira instrução a executar. o conteúdo dos outros
registos é supostamente desconhecido e portanto arbitrário. A memória de
dados armazena dois números nas células de memória 2A00(16), respectivamente,
3B(16) e 22(16).
Na figura 6 está representado o sinal gerado pelo
relógio. Os dispositivos que requerem este sinal como entrada designam-se por
dispositivos síncronos e podem ser activados tanto no patamar positivo como
no nível de zero. Os dispositivos que não requerem o sinal de relógio
dizem-se dispositivos assíncronos. Certos circuitos digitais também podem ser
activados pelos flancos, como e’ o caso dos flip-flops edge triggered que
podem ser activados pelo flanco ascendente do impulso de relógio ou pelo flanco
descendente. Normalmente a frequência do sinal de clock (relógio) situa-se
entre 1 MHz e 10 MHz.

Para
finalizar a descrição do microprocessador apresenta-se na figura 7 a configuração
dos pinos de um CPU, o Z80 da ZILOG.

Fig.7