Buscar

GE_Eletrônica Digital e Sistemas Digitais_Unidade IV_DIGITAL PAGES

Prévia do material em texto

MICROPROCESSADOR 
COMERCIAL, TÉCNICAS 
DE PROGRAMAÇÃO EM 
ASSEMBLY
E INTRODUÇÃO A 
MICROCONTROLADORES
4
UNIDADE
SER_CA_ELEIND_UNI4.indd 89 27/09/2019 17:35:24
Objetivos da unidade
Tópicos de estudo
 Apresentar o microprocessador comercial;
 Abordar o conjunto de instruções de um microprocessador comercial;
 Explicar a lei de Moore e a evolução dos microprocessadores comerciais;
 Conceituar a linguagem de programação Assembly;
 Demonstrar como é escrito um programa em Assembly;
 Explicitar as vantagens e desvantagens da linguagem Assembly;
 Definir microcontroladores;
 Explorar as diferenças entre um microprocessador e um microcontrolador;
 Introduzir os microcontroladores PIC e Arduino.
 Microprocessador comercial
 Conceitos e definições
 Instruções de máquina
 A Lei de Moore
 Técnicas de programação em 
Assembly
 Vantagens e desvantagens
 Programando em Assembly
 Introdução aos microcontrola-
dores
 Microcontroladores PIC
 Arduino
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 90
SER_CA_ELEIND_UNI4.indd 90 27/09/2019 17:35:24
Microprocessador comercial
Durante o processo evolutivo, foram projetados e construídos inúmeros ti-
pos de computadores, dos quais alguns causaram um impacto signifi cativo, 
inspirando os cientistas e pesquisadores em novas ideias e desenvolvimentos 
inovadores. Com base nas pesquisas de Andrews S. Tanenbaum e Todd Austin, 
publicadas no livro Organização estruturada de computadores, de 2013, vamos ex-
por alguns dos principais pontos da história dos computadores.
Blaise Pascal (1623–1662) foi o primeiro cientista a construir uma máquina 
operacional para realizar cálculos. Construída em 1642, ela dispunha de engre-
nagens, funcionava com uma manivela e realizava operações de adição e subtra-
ção. Após cerca de três décadas, o matemático alemão Gottfried Wilhelm Von 
Leibniz (1646–1716) construiu uma máquina mecânica que executava operações 
de multiplicação e divisão.
Em 1822, Charles Babbage (1792–1871), inventor do velocímetro e professor 
de matemática da Universidade de Cambridge, projetou e construiu sua primeira 
máquina diferencial. Assim como a máquina de Pascal, esse dispositivo fazia 
operações de soma e subtração, calculando tabelas para a navegação marítima. 
Na verdade, a máquina foi projetada para executar um único algoritmo: o méto-
do de diferenças fi nitas, que usava polinômios.
Um desenvolvimento importante que remonta ao fi nal da década de 1930 foi 
o surgimento das máquinas calculadoras automáticas. Construídas por Konrad 
Zuse, estudante alemão de Engenharia, as máquinas utilizavam relés eletromag-
néticos. Mesmo com a destruição delas durante a Segunda Guerra Mundial, Kon-
rad Zuse se solidifi cou como um dos pioneiros da área.
Mais tarde, nos Estados Unidos da América, John Atanasoff , no Iowa State 
College, e George Stibbitz, no Bell Laboratories, projetaram calculadoras auto-
máticas utilizando aritmética binária e memória composta de capacitores.
Em 1944, Howard Aiken desenvolveu a MARK I, uma máquina automática que 
utilizava relés, possuía 72 palavras de 23 algarismos decimais cada, além de um 
tempo de instrução da ordem de 6 segundos. Uma fi ta de papel perfurada era 
utilizada para a entrada e a saída das palavras. Quando Howard concluiu sua 
sucessora, a MARK II, as máquinas de relés já estavam obsoletas, em razão do 
desenvolvimento da Eletrônica.
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 91
SER_CA_ELEIND_UNI4.indd 91 27/09/2019 17:35:25
O primeiro computador, o ENIAC (Electronic Numeral Integrator and Calculator), 
teve seu desenvolvimento iniciado em 1943, mas só se tornou operacional após a 
Segunda Guerra Mundial. Ele pesava 30 toneladas, media 5,50 m de altura e 25 m 
de comprimento, ocupando 180 m² de área construída. Possuía em torno de 70 mil 
resistores e aproximadamente 18.000 válvulas a vácuo! Quando acionado pela pri-
meira vez, consumiu tanta energia que as luzes da Filadélfia piscaram!
O UNIVAC (Universal Automatic Computer) se tornou, em 1951, o primeiro com-
putador a lidar com dados numéricos e alfabéticos com mais facilidade. Também 
foi o primeiro disponível comercialmente, sendo utilizado para o censo americano 
da década de 1950.
Os computadores de primeira geração foram superados entre o fim da dé-
cada de 1950 e início de 1960, devido à invenção do transistor, proporcionada 
em 1947 por John Bardeen, Walter Houser Brattain e William Bradford Shockley. 
Como resultado da invenção, Bardeen, Brattain e Shockley foram contemplados 
com o Prêmio Nobel de Física em 1956.
Esses computadores de segunda 
geração, os transistorizados, já eram 
capazes de fazer um milhão de ope-
rações por segundo. Foram, por sua 
vez, superados pelos computadores 
de terceira geração, com circuitos in-
tegrados, em meados de 1960 e final 
de 1970. O início da década de 1980 foi 
caracterizado pelo desenvolvimento 
do microprocessador e pela evolução 
dos microcomputadores e computado-
res pessoais, tendo em vista a tecnolo-
gia de integração VLSI (Very Large Scale Integration – integração em escala muito 
grande), que possibilitou a inserção de milhões de transistores em um único chip.
A partir do ano 2000 até os dias atuais a Eletrônica, a Microeletrônica e a Na-
noeletrônica, tanto analógica quanto digital, vêm se desenvolvendo rapidamen-
te e de forma contínua, permitindo ao ser humano explorar novos horizontes 
com o desenvolvimento de tecnologias de hardware, software e aplicativas de 
última geração, caracterizando a computação ubíqua.
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 92
SER_CA_ELEIND_UNI4.indd 92 27/09/2019 17:35:30
CITANDO
“A indústria de computadores está avançando como nenhuma outra. A 
força propulsora primária é a capacidade dos fabricantes de chips de 
empacotar cada vez mais transistores por chip todo ano. Mais transisto-
res, que são minúsculos interruptores eletrônicos, signifi cam memórias 
maiores e processadores mais poderosos. Gordon Moore, cofundador e 
ex-presidente do conselho da Intel, certa vez disse, brincando, que, se a 
tecnologia da aviação tivesse progredido tão depressa quanto a tecnolo-
gia de computadores, um avião custaria 500 dólares e daria uma volta na 
Terra em 20 minutos com 20 litros de gasolina. Entretanto, seria do tama-
nho de uma caixa de sapatos”. (TANENBAUM; AUSTIN, 2013, p. 22).
Conceitos e definições
O microprocessador defi ne-se como um dispositivo lógico com funções de 
acessar, controlar e executar instruções existentes da memória principal. A opera-
ção do microprocessador é determinada pelas instruções que ele executa, conhe-
cidas como instruções de máquina ou do computador. Em tempo, as diferentes 
instruções que o processador executa são conhecidas como conjunto de instru-
ções (instruction set) do processador. É importante ressaltar que, para o programa-
dor, a arquitetura de um processador pode ser defi nida pelo conjunto de instru-
ções, pelo endereçamento, bem como pelos registradores de instruções.
Cada tipo de microprocessador tem o seu próprio conjunto de instruções 
mnemônicas, que representam os códigos binários das 
instruções. Vale ressaltar que a linguagem Assembly uti-
liza o conjunto de instruções para criar programas para o 
microprocessador. Uma vez que a linguagem Assem-
bly está relacionada com linguagem de máquina 
(instruções em código binário), ela é classifi cada 
como linguagem de baixo nível.
Basicamente, o conjunto de instruções é a 
parte que estabelece a fronteira entre o soft-
ware e o hardware – isto é, o conjunto de instru-
ções que permite tanto a movimentação de dados 
quanto a execução das operações no microprocessador. A partir 
daí, constatamos que a operação de uma CPU é determinada pelas instruções 
que ela executa, ou seja, pelo conjunto de instruções de máquina.
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 93
SER_CA_ELEIND_UNI4.indd 93 27/09/2019 17:35:30
Fonte: STALLINGS, 2010, p. 287. (Adaptado).
Instruções demáquina
De acordo com os estudos de William Stallings no livro Arquitetura e organiza-
ção de computadores, de 2010, vamos conhecer um pouco sobre tais instruções 
de máquina, bem como suas características, elementos e formas representati-
vas (representação da instrução).
É necessário que as instruções de máquina tenham as informações neces-
sárias para que a CPU possa executá-las. Nesse sentido, as referidas instruções 
possuem alguns elementos, são eles:
• Código de operação (opcode): código binário que especifi ca a operação a 
ser realizada. Os opcodes são representados por abreviações, conhecidos como 
mnemônicos (por exemplo, ADD, SUB, MPY e DIV);
• Referência ao operando fonte: a operação pode envolver um ou mais ope-
randos fontes, ou seja, que são entradas para a operação;
• Referência ao operando destino: a operação pode produzir um resultado;
• Referência à próxima instrução: informa à CPU onde fazer a busca da 
próxima instrução após o término de uma.
O Diagrama 1 representa um esquema de estados do ciclo de instruções, 
mostrando as etapas envolvidas na execução da instrução. Observe! 
DIAGRAMA 1. ESTADO DO CICLO DE INSTRUÇÕES
Busca 
da instrução
Múltiplos 
operandos
Múltiplos 
resultados
Cálculo do 
endereço 
de instrução
Operação dos 
dados
Cálculo do 
endereço 
do operando
Decodifi cação 
da operação 
da instrução
Cálculo do
 endereço 
do operando
Armazenamento
do operando
Busca do 
operando
Instrução completa, busca 
da próxima instrução
Retorno de string 
ou vetor de dados
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 94
SER_CA_ELEIND_UNI4.indd 94 27/09/2019 17:35:31
Vamos entender a função de cada estado do ciclo de instruções mostrado no 
Diagrama 1. Nestas condições, os estados podem ser descritos da seguinte forma:
• Cálculo de endereço de instrução (instruction address calculation): deter-
mina o endereço da próxima instrução que será executada;
• Busca da instrução (instruction fetch): realiza a leitura da instrução do seu 
local da memória para o microprocessador;
• Decodificação da operação da instrução (instruction operation deco-
ding): analisa a instrução para determinar o tipo de operação a ser realizado e 
o(s) operando(s) a ser(em) utilizado(s);
• Cálculo do endereço do operando (operation address calculation): se a 
operação envolve referência a um operando na memória ou disponível via E/S 
(entrada/saída), então determina seu endereço;
• Busca do operando (operation fetch): acessa (busca) o operando na me-
mória ou realiza a leitura da E/S;
• Operação dos dados (data operation): realiza a operação indicada na ins-
trução;
• Armazenamento do operando (operand store): grava (escreve) o resultado 
na memória ou envia para a E/S.
Com relação ao operando fonte e ao operando destino, é possível que eles 
estejam localizados em uma das seguintes áreas: na memória principal ou vir-
tual, no registrador do processador, no próprio campo de instrução ou no dis-
positivo de E/S.
Representação de uma instrução
No microprocessador, cada instrução é representada por uma sequência de bits. 
As instruções são divididas em campos, de acordo com os seus elementos (formato 
de instrução). A Figura 1 mostra um exemplo de formato de instrução. Observe! 
4 Bits 6 Bits
16 Bits
6 Bits
Opcode
Referência
ao
operando
Referência
ao
operando
Figura 1. Formato de instrução. Fonte: STALLINGS, 2010, p. 288. (Adaptado).
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 95
SER_CA_ELEIND_UNI4.indd 95 27/09/2019 17:35:31
No decorrer da execução, uma instrução é transferida para um registrador de 
instrução (IR) no microprocessador, que realiza a operação exigida. Vale ressaltar 
que torna-se difícil para o programador lidar com representações binárias de ins-
truções máquina. Por isso, é comum utilizar uma representação simbólica para elas. 
Desta forma, os opcodes são representados pelas tais abreviações, que indicam a 
operação que será realizada. Observe alguns exemplos:
• ADD – Adiciona;
• SUB – Subtrai;
• MPY – Multiplica;
• DIV – Divide;
• LOAD – Carrega dados da memória;
• STOR – Armazena dados na memória.
Em tempo, os operandos também podem ser representados simbolicamente, 
por exemplo, a instrução ADD R, Y pode levar à seguinte leitura: somar o valor conti-
do no local de dados Y (posição Y) com o conteúdo do registrador R. Neste exemplo, 
Y refere-se ao endereço de um local na memória, e R refere-se a um registrador.
Tipos de instrução
Vamos considerar uma instrução em linguagem de alto nível que pode ser ex-
pressa em JavaScript, Phyton, PHP ou C#, ou seja, X = X + Y. Essa instrução, que na 
verdade é um comando soma, realiza a soma do valor armazenado em Y ao valor em 
X, colocando o resultado em X.
Utilizando as instruções de máquina, como este comando soma poderia ser 
realizado? Partindo do pressuposto que as variáveis X e Y correspondem aos 
locais 513 e 514 de memória, a instrução (comando soma) é realizada por meio 
de três instruções:
1. Carregue um registrador com o conteúdo do local de memória 513;
2. Some o conteúdo do local de memória 514 ao registrador;
3. Armazene o conteúdo do registrador no local de memória 513.
Assim, podemos verificar que uma única instrução de alto nível implica em três 
instruções de máquina (baixo nível). Além disso, para executar um programa escrito 
em uma linguagem de alto nível, é necessário traduzi-lo para linguagem de máqui-
na. Em tempo, é possível dizer que o conjunto de instruções de máquina deve ser 
suficiente para expressar qualquer instrução de uma linguagem de alto nível. Nesse 
sentido, podemos determinar os tipos de instrução como:
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 96
SER_CA_ELEIND_UNI4.indd 96 27/09/2019 17:35:31
• Processamento de dados: instruções aritméticas e lógicas;
• Armazenamento de dados: movimentação de dados para dentro ou fora do 
registrador e/ou memória;
• Movimentação de dados: instruções de E/S (entrada e saída);
• Controle: instruções de teste e desvio.
Número de endereços
A arquitetura do microprocessador pode ser representada pelo número de en-
dereços contidos em cada instrução. Diante disso, na maioria das arquiteturas exis-
tentes, praticamente todas as instruções possuem um, dois ou três endereços de 
operando, com o endereço da próxima instrução implícito, obtido pelo contador de 
programa do próprio computador.
É importante ressaltar que a quantidade de endereços por instrução é uma deci-
são de projeto. Isto signifi ca que, quanto mais endereços por instrução, consequen-
temente as instruções serão maiores e mais complexas, fazendo-se necessário mais 
registradores. Em contra partida, as operações entre os registradores serão mais 
rápidas, exigindo menor quantidade de instruções por programa.
Por outro lado, quanto menor a quantidade de endereços, menor é a complexi-
dade das instruções, que se fazem menores e mais primitivas. Porém, será neces-
sária uma maior quantidade delas por programa, resultando em maior tempo de 
execução, bem como em programas mais complexos e maiores.
A lei de Moore
Em 18 de julho de 1968, o físico e coinventor do circuito integrado de silício, 
Robert Noyce, o químico e físico Gordon Earl Moore e o investidor Arthur Rock fun-
daram a N M Electronics que, pouco depois, passou a se chamar Intel Corporation.
A empresa, por sua vez, iniciou suas operações produzin-
do circuitos integrados para a memória RAM e, após alguns 
anos, entrou no mercado de manufatura de microproces-
sadores. A seguir, apresentaremos uma breve evolução 
dos microprocessadores comerciais utilizados em com-
putadores. Vamos conferir?
A Tabela 1 mostra a evolução dos microprocessadores co-
merciais. Observe! 
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 97
SER_CA_ELEIND_UNI4.indd 97 27/09/2019 17:35:31
TABELA 1. EVOLUÇÃO DOS MICROPROCESSADORES COMERCIAIS
CHIP DATA MHZ TRANS. MEMÓRIA NOTAS
4004 4/1971 0,108 2.300 640 Primeiro processador em um chip
8008 4/1972 0,108 3.500 16 KB Primeiromicroprocessador de 8 bits
8080 4/1974 2 6.000 64 KB Primeira CPU de uso geral em um chip
8086 6/1978 5-10 29.000 1 MB Primeira CPU de 16 bits em um chip
8088 6/1979 5-8 29.000 1 MB Usada no IBM PC
80286 2/1982 8-12 134.000 16 MB Com proteção de memória
80386 10/1985 16-33 C275.000 4 GB Primeira CPU de 32 bits
80486 4/1989 25-100 1,2 M 4 GB Memória cache de 8 KB embutida
Pentium 3/1993 60-233 3,1 M 4 GB Dois pipelines; modelos posteriores tinham MMX
Pentium Pro 3/1995 150-200 5,5 M 4 GB Dois níveis de cache embutidos
Pentium II 5/1997 233-450 7,5 M 4 GB Pentium Pro mais instruções MMX
Pentium III 2/1999 650-1.400 9,5 M 4 GB Instruções SSE para gráfi cos em 3D
Pentium 4 11/2000 1.300-3.800 42 M 4 GB Hyperthreading; mais instruções SSE
Core Duo 1/2006 1.600-3.200 152 M 2 GB Dual cores em um único substrato
Core 7/2006 1.200-3.200 410 M 64 GB Arquitetura quad core de 64 bits
Core i7 1/2011 1.100-3.300 1.160 M 24 GB Processador gráfi co integrado
4004
8008
4/1971
4/1972
8080
4/1972
8086
0,108
 4/1974
8086
0,108
 4/1974
8088
2.300
0,108
6/1978 
80286
2.300
 2
80286
3.500
6/1979 
80386
640
5-10
2/1982 
80486
6.000
10/1985
16 KB
10/1985
Pentium
Primeiro processador em 
29.000
8-12 
4/1989
Pentium Pro 
Primeiro processador em 
 Primeiro microprocessador 
64 KB 
29.000 
16-33 
Pentium Pro 
Primeiro processador em 
um chip
 Primeiro microprocessador 
29.000 
134.000 
3/1993 
Pentium Pro 
Primeiro processador em 
 Primeiro microprocessador 
de 8 bits
Primeira CPU de uso geral 
1 MB
134.000 
25-100 
3/1995 
 Primeiro microprocessador 
de 8 bits
Primeira CPU de uso geral 
1 MB 
C275.000
60-233 
3/1995 
 Primeiro microprocessador 
Primeira CPU de uso geral 
em um chip
Primeira CPU de 16 bits em 
16 MB 
60-233 
Primeira CPU de uso geral 
em um chip
Primeira CPU de 16 bits em 
16 MB 
1,2 M 
150-200 
Primeira CPU de uso geral 
Primeira CPU de 16 bits em 
um chip
Usada no IBM PC
4 GB 
3,1 M 
150-200 
Primeira CPU de 16 bits em 
um chip
Usada no IBM PC
Com proteção de memória
4 GB 
3,1 M 
Primeira CPU de 16 bits em 
Usada no IBM PC
Com proteção de memória
4 GB 
5,5 M 
Usada no IBM PC
Com proteção de memória
Primeira CPU de 32 bits
4 GB 
Com proteção de memória
Primeira CPU de 32 bits
Memória cache de 8 KB 
Com proteção de memória
Primeira CPU de 32 bits
Memória cache de 8 KB 
4 GB 
Primeira CPU de 32 bits
Memória cache de 8 KB 
embutida
Dois pipelines; modelos 
posteriores tinham MMX
Memória cache de 8 KB 
Dois pipelines; modelos 
posteriores tinham MMX
Dois pipelines; modelos 
posteriores tinham MMX
Dois níveis de cache 
Dois pipelines; modelos 
posteriores tinham MMX
Dois níveis de cache 
embutidos
posteriores tinham MMX
Dois níveis de cache 
embutidos
Pentium II Pentium II 
Pentium III Pentium III 
5/1997 
Pentium 4 Pentium 4 
233-450 
2/1999 
Core Duo 
233-450 
11/2000 
Core Duo 
650-1.400 
11/2000 
Core 
7,5 M 
650-1.400 
1/2006 
7,5 M 
1.300-3.800
Core i7 
9,5 M 
1.300-3.800
1.600-3.200 
7/2006 
4 GB 
1.600-3.200 
42 M
1.600-3.200 
1.200-3.200 
1/2011 
Pentium Pro mais instruções 
4 GB 
1.200-3.200 
Pentium Pro mais instruções 
152 M
1.100-3.300 
Pentium Pro mais instruções 
Instruções SSE para gráfi cos 
4 GB 
410 M
1.100-3.300 
Pentium Pro mais instruções 
MMX
Instruções SSE para gráfi cos 
410 M
Pentium Pro mais instruções 
Instruções SSE para gráfi cos 
em 3D
2 GB 
1.160 M 
Pentium Pro mais instruções 
Instruções SSE para gráfi cos 
em 3D
Hyperthreading
64 GB 
1.160 M 
Instruções SSE para gráfi cos 
Hyperthreading
instruções SSE
Dual cores em um único 
64 GB 
; mais 
instruções SSE
Dual cores em um único 
24 GB 
Dual cores em um único 
substrato
Arquitetura quad core de 
Dual cores em um único 
substrato
Arquitetura quad core de Arquitetura quad core de 
64 bits
Processador gráfi co 
Arquitetura quad core de 
Processador gráfi co 
integrado
Processador gráfi co 
integrado
Processador gráfi co 
Fonte: TANENBAUM; AUSTIN, 2013, p. 31. (Adaptado).
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 98
SER_CA_ELEIND_UNI4.indd 98 27/09/2019 17:35:32
Tecendo alguns comentários sobre a Tabela 1, constatamos que o primeiro 
microprocessador comercial foi o Intel 4004, fabricado em 1971. Ele era de 4 
bits, integrava 2.300 transistores e possuía uma memória de 640 bytes.
Passados aproximadamente 22 anos, surge em 1993 o processador Intel Pen-
tium, integrando 3,1 milhões de transistores, lançados com clocks de 60 MHz. Gra-
dualmente surgiram versões de 75, 90, 120, 133, 150, 166, 200, e 233 MHz.
No ano 2000, surge o Pentium 4, integrando 42 milhões de transistores com 
versões de clock variando entre 1300 e 3800 MHz. Em 2006, a Intel alterou o 
nome da marca Pentium para Core e lançou um chip dual core, conhecido como 
Core duo. Ele integrava 152 milhões de transistores, operando com versões de 
clock entre 1600 e 3200 MHz. A série Core evolui com o i3, i5, i7 e i9, caracteri-
zando um avanço significativo na integração dos transistores e nas tecnologias 
gráficas e de inteligência artificial.
O Gráfico 1 apresenta a lei de Moore. Esta lei surgiu em 1965 através de um 
conceito estabelecido por Gordon Earle Moore, cuja afirmação básica era a de 
que o poder de processamento dos computadores dobraria a cada dezoito me-
ses em razão do processo de integração dos transistores. Observe!
Nú
m
er
os
 d
e 
tra
ns
ito
re
s
Ano
4K
1K
16K
256K
4M
64M
256M
1G
2G
64K
1M
16M
512M
1965 1970 1975 1980 1985 1990 1995 2000 2005 2010
100G
10G
1G
100M
10M
1M
100K
10K
1K
100
10
1
GRÁFICO 1. LEI DE MOORE
Fonte: TANENBAUN; AUSTIN, 2013, p. 22. (Adaptado).
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 99
SER_CA_ELEIND_UNI4.indd 99 27/09/2019 17:35:32
CURIOSIDADE
Jensen Huang, executivo-chefe da fabricante de chips Nvidia, fez um 
declaração de impacto na CES (Consumer Electronics Show) de 2019, a 
maior feira de tecnologia do mundo, que aconteceu em Las Vegas, nos 
Estados Unidos. Segundo Huang, a Lei de Moore “não é mais possível” – 
ela está morta, porque o mercado de tecnologia não consegue mais por 
em prática o que ela prevê. É possível ler mais sobre isso na matéria “O 
que é a Lei de Moore e por que você deve se preocupar com o fi m dela”, 
publicada pelo jornalista Rodrigo Trindade na UOL em 2019.
Técnicas de programação em Assembly
Nesta seção iremos conhecer um pouco sobre a linguagem Assembly, suas 
técnicas de programação, representações simbólicas, vantagens e desvantagens.
Então, vamos aos estudos?
A linguagem Assembly é considerada uma linguagem de máquina de baixo 
nível. Ela utiliza palavras abreviadas ou representações simbólicas, os já mencio-
nados mnemônicos, para cada instrução de máquina, objetivando uma melhor 
compreensão das operações por parte dos profi ssionais da área, como progra-
madores. Vale ressaltar que a tradução da linguagem Assembly para os códigos 
de máquina do processador, isto é, para códigos binários, é realizada por um 
programa conhecido como assembler (ou montador).
A seguir, apresentamos dois exemplos de instruções Assembly. Confi ra!
• MOV R1, R2: nesta instrução temos o mnemônico MOV (abreviação de 
MOVE) e dois registradores R1 e R2 como parâmetros. Quando o processador 
executa esta instrução, comanda o movimento do conteúdo de R2 para R1.
• ADD R1, R2: nesta instrução dispomos do mnemônico ADD (abreviação de 
ADDITION) e dois registradores R1 e R2 como parâmetros. Quando o processa-
dor executa esta instrução, ele comanda a adição do conteúdo de R1 ao conteú-
do de R2, e o resultado é armazenado em R1.
Vantagens e desvantagens
Assim como toda linguagem de programação, a linguagem Assembly apresen-
ta algumas vantagens e desvantagens. A seguir apresentaremos algumas ques-
tões que tornam a linguagem de programação Assembly mais proveitosa ou não.
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 100
SER_CA_ELEIND_UNI4.indd 100 27/09/2019 17:35:32Vamos conferir?
Entre as vantagens, temos:
• Otimização do código, para aproveitar ao máximo as características intrín-
secas do hardware (microcontrolador e/ou microprocessador);
• Existência de assemblers (programas oferecidos pelos próprios pelos fabri-
cantes) para todos os microprocessadores;
• Otimização de espaço na memória;
• Rapidez na execução do código.
Quanto às desvantagens, podemos sublinhar:
• Maior tempo na decomposição de cada tarefa em conjuntos de instruções 
e/ou operações;
• Maior conhecimento de programação por parte do programador;
• Condição desproporcional entre o conjunto de instruções e as tarefas que o 
microprocessador normalmente executa;
• Não apresentar tanta portabilidade, ou seja, a linguagem é portável para uma 
família de microprocessadores e não para uma estação de trabalho, por exemplo;
• Maior custo de desenvolvimento, tendo em vista a baixa expressividade en-
tre os profi ssionais de Informática. Isto signifi ca que desenvolver em assemblers 
requer maior quantidade de programadores experientes.
Programando em Assembly
Conforme mencionamos, a linguagem Assembly é uma lingua-
gem de montagem, e programar nela é escrever um código en-
tendido pelo hardware. Exemplo disso é a programação dos mi-
croprocessadores e dos microcontroladores. Este programa pode 
ser escrito em um editor de textos e depois copiado para ambiente 
de programação. Este ambiente pode ser o MPLAB. 
EXPLICANDO
MPLAB é uma ferramenta utilizada para o desenvolvimento de programas 
com o microcontrolador PIC, uma vez que a compilação, a simulação e a 
gravação são executadas no mesmo ambiente de programação.
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 101
SER_CA_ELEIND_UNI4.indd 101 27/09/2019 17:35:32
O assembler interpreta as instruções escritas em linguagem Assembly como 
uma sequência de algarismos 0 e 1, que carregam significado para a lógica opera-
cional do microcontrolador. Vamos considerar a instrução RETURN, que o micro-
controlador executa para retornar de um subprograma. Traduzindo-a por meio do 
assembler, obtemos uma série de 1 e 0 correspondentes a 14 bits que o microcon-
trolador interpreta. Ou seja: RETURN 00 0000 0000 1000.
O resultado da tradução é realizado por um arquivo de execução, conhecido 
por HEX. Esta nomenclatura provém de sua representação hexadecimal. Uma vez 
produzido, o referido arquivo é inserido no microcontrolador pelo programador.
A linguagem Assembly possui alguns elementos básicos, como os labels, as 
instruções, os operandos, as diretivas e os comentários. Tratemos de cada um 
deles a seguir.
• Labels (rótulos): é uma designação textual de uma linha em um programa ou 
o início de um conjunto de linhas. É fundamental que um rótulo seja iniciado com 
uma letra do alfabeto ou com um traço baixo (ou seja: _). Também é importante 
que o rótulo inicie na primeira coluna do programa. Vale ressaltar que a extensão 
de um rótulo pode ir até 32 caracteres.
• Instruções: as instruções são específicas para cada microcontrolador. Diante 
disso, é necessário conhecer suas instruções. A forma de escrever uma instrução 
é designada por “sintaxe”.
• Operandos: são os elementos necessários para que a instrução possa ser 
executada. Normalmente são registros, variáveis e constantes. 
As constantes são designadas por “literais”.
• Diretivas: as diretivas independem do tipo de micro-
controlador, sendo uma característica inerente à própria 
linguagem de programação. Elas utilizam variáveis ou re-
gistros para satisfazer determinados propósitos, por exem-
plo, NIVEL pode ser uma designação para uma variável loca-
lizada no endereço 0Dh da memória principal (memória RAM), 
tendo em vista que é mais fácil para o programador recordar de uma palavra do 
que um endereço de memória.
• Comentários: é um texto que o programador escreve no programa a fim de 
torná-lo mais claro e legível. Ele é inserido após uma instrução e deve iniciar com 
ponto-e-vírgula (;).
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 102
SER_CA_ELEIND_UNI4.indd 102 27/09/2019 17:35:32
Introdução aos microcontroladores
Vamos iniciar esta seção com uma pergunta: Qual é a diferença entre um 
microprocessador e um microcontrolador?
Um microcontrolador difere de um microprocessador em vários aspectos. O 
primeiro refere-se à funcionalidade: para que um microprocessador execute suas 
funções, outros componentes externos devem ser conectados, para receber, en-
viar e processar os dados, tais como a memória principal (RAM) e o disco rígido.
Por outro lado, o microcontrolador é projetado e desenvolvido para integrar 
inúmeros componentes em um único circuito integrado. Nestas condições, pode-
mos dizer que nenhum componente externo faz-se necessário para seu funciona-
mento interno, pois todos os referidos componentes encontram-se integrados no 
chip microcontrolado.
Podemos defi nir microcontrolador como um circuito integrado programável 
utilizado no controle de processos que exigem uma lógica computacional, como 
processos automatizados das indústrias manufatureiras. Ainda podemos encon-
trá-los em impressoras, elevadores, motores de corrente contínua, servomotores 
e motores de passo, entre outras aplicações.
Microcontroladores PIC
O microcontrolador PIC (Programmable Intelligent Computer) é um circuito inte-
grado lógico que possui inúmeros componentes internos, constituindo um siste-
ma digital programável totalmente controlado.
Externamente, o PIC pode ser visto como um circuito integrado lógico da fa-
mília TTL (Transistor-Transistor Logic) ou mesmo como um circuito integrado CMOS 
(Complementary Metal Oxide Semiconductor). Porém, internamente, possui inúme-
ros componentes, o que constitui um típico sistema microprocessa-
do. Os microcontroladores dispõem de uma CPU, de uma memória 
PROM (memória programável somente para leitura), de uma me-
mória RAM (memória de acesso aleatório), linhas de E/S, 
barramentos, clock, registrador, contador, entre outros.
O microcontrolador PIC está disponível em vários 
modelos (famílias) para atender às mais diversas exigên-
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 103
SER_CA_ELEIND_UNI4.indd 103 27/09/2019 17:35:32
cias de projetos e aplicações, possuindo sobretudo boa diversidade de recursos, 
diversas capacidades de processamento e grande flexibilidade de aplicações.
A Figura 2 apresenta a estrutura interna básica de um microcontrolador cons-
tituído dos seguintes componentes: CPU (conjunto de registradores), comunicação 
serial (porta serial), memória, temporizador (contador), dispositivos (registrado-
res) de entrada e de saída de dados, barramentos (barramentos de dados, de en-
dereço e de controle) e watchdog (contador independente). Observe! 
Registro de 
entrada e 
saída
SERIAL
Referência
Saída
Entrada 
I/O
CPU
WATCHDOG
Linhas de controle
Endereços
R/W
Da
do
s
Dados
Dados
MEMÓRIA
TEMPORIZADOR
Posição 0
Reg. de entrada
Reg. de saída
Registrador 1
Registrador 2
Registrador 3
Contador 
independente
Posição 1
Posição n
Contador
Figura 2. Estrutura interna básica de um microcontrolador. Fonte: DIAGO; AMARAL; HORTA, 2011, p. 125. (Adaptado).
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 104
SER_CA_ELEIND_UNI4.indd 104 27/09/2019 17:35:33
Os microcontroladores PIC possuem algumas famílias. São elas:
• Família PIC de 8 bits: PIC10 – 8 microcontroladores (6 pinos), PIC12 – 20 mi-
crocontroladores (8 pinos), PIC16 – 155 microcontroladores (8 a 64 pinos) e PIC18 
– 223 microcontroladores (18 a 100 pinos). Esta família permite várias aplicações 
que exigem economia de energia, alta compatibilidade e robustez.
• Família PIC de 16 bits: PIC24, PIC3 
e PIC33. Esta família integra 432 micro-
controladores (12 a 122 pinos) e possui 
conversores AD/DA (analógico/digital 
e digital/analógico) de maior resolução 
com funções de processamento digital 
de sinais, bem como vários recursos, 
como USB e protocolo TCP/IP.
• Família PIC de 32 bits: PIC32 com184 microcontroladores (28 a 144 pi-
nos), por exemplo. Esta família é dedica-
da a operações em pontos flutuantes. A 
frequência de operação é de até 200 MHz (contra 48 MHz das outras famílias), tem 
interfaces gráficas, áudio e controles para realizar multitarefas.
É importante ressaltar que cada família de microcontrolador PIC difere uma da 
outra em vários fatores, como bits de configuração, tensão elétrica de alimenta-
ção, frequência elétrica operacional, quantidade de pinos etc. Isto significa que um 
programa escrito para um microcontrolador de uma determinada família não irá 
funcionar adequadamente.
No que se refere aos compiladores, podemos dizer que existem vários, 
cada qual necessitando de ambientes de programação distintos para atender 
às famílias de PICs. Alguns exemplos são os compiladores desenvolvidos pela 
Microchip Technology Inc.: MPLAB XC8, MPLAB XC16 e MPLAB XC32. Vale sa-
lientar que estes compiladores suportam sistemas operacionais do tipo Linux, 
MacOS® e Windows®, bem como são compatíveis com as versões anteriores 
do MPLAB IDE.
Para entender um pouco mais sobre os microcontroladores PIC, vamos conhe-
cer a estrutura interna do microcontrolador PIC 16F628A apresentada na Figura 
3. Confira! 
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 105
SER_CA_ELEIND_UNI4.indd 105 27/09/2019 17:35:38
Figura 3. Estrutura interna do microcontrolador PIC 16F628A. Fonte: DIAGO; AMARAL; HORTA, 2011, p. 126. (Adaptado).
Memória Flash
do programa
Programa
Instrução
8 Level Stack (13 bits)
Decodificação e 
controle de instrução
Geração de timing
Registradores de
arquivos RAM
PO
RT
A
PO
RT
B
FSR
Status
Contador 0
VREF
Contador 1
CCP1
Contador 2
USART
Comparador
Data EEPROM
W reg
Contador de energização
Oscilador 
Contador de inicialização
Power-On
Reset
Contador independente
Brown-out Reset
Low-voltage
Programmin
Endereço
MUX
ULA
RA0/AN0
RA1/AN1 
RA2/AN2/VREF 
RA3/AN3/CMP1 
RA4/TOCK1/CMP2 
RA5/MCLR/MCLR 
RA5/OSC2/CLKOUT 
RA7/OSC1/CLKIN
RB0/INT
RB1/RX/DT
RB2/TX/CK
RB3/CCP1
RB4/PGM
RB5
RB6/T1OSO/T1CKI/PGD
RB7/T1/OSI/PGD
OS
C 1
/C
LK
IN
OS
C 2
/C
LK
OU
T
8
8
87
14
13 8
9
3
MCLR
VOO
VSS
Analisando a Figura 3, observamos que o registrador W (work) está diretamen-
te ligado à ULA, tendo em vista que uma das que das principais funções deste 
registrador é a transferência de dados. A memória de dados é conectada a um 
barramento de 8 bits, enquanto que a memória de programa (memória Flash) está 
conectada a um barramento de 14 bits para otimizar a execução do conjunto de 
instruções. Nota-se também que existem alguns blocos representativos, os quais 
são circuitos lógicos de memória EEPROM, timers, comparadores e portas seriais. 
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 106
SER_CA_ELEIND_UNI4.indd 106 27/09/2019 17:35:39
Nas portas A e B, localizadas no lado direito superior da Figura 3, existe o diagrama 
de pinos do microcontrolador.
O encapsulamento pode ser do tipo DIP (Dual Inline Package). Também é pos-
sível encontrar o PIC 16F628A em mais dois tipos de encapsulamentos: o SSOP 
(Shrink Small-Outline Package) e o QFN (Quad Flat No Leads). O microcontrolador 
PIC 16F628A pode ter o seu clock gerado por um oscilador externo de frequência 
máxima de 20 MHz ou por um oscilador interno de 4 MHz ou 37 kHz. Em todos os 
casos, o clock é dividido internamente por 4.
Para fins de exemplo e análise, iremos considerar um clock de 4 MHz. Após a 
divisão interna por 4, resulta-se um clock interno de 1 MHz e um período de 1 µs. 
Este tempo é conhecido como ciclo de máquina, no qual cada etapa da instrução 
é executada. 
DIAGRAMA 2. FASES INTERNAS DO CLOCK DO MICROCONTROLADOR PIC 16F628A
Extrair INST (PC)
Fases 
internas do 
clock
Extrair INST (PC + 1)
Extrair INST (PC + 2)
Exexutar INST (PC - 1)
Exexutar INST (PC + 1)
Exexutar INST (PC)
OSC1
Q1
Q1 Q1 Q1
Q2
Q2 Q2 Q2
Q3
Q3 Q3 Q3
Q4
Q4 Q4 Q4
PC PC PC + 0 PC + 2
Fonte: DIAGO; AMARAL; HORTA, 2011, p. 127. (Adaptado).
Analisando o Diagrama 2, observamos que, durante um ciclo, composto por 
quatro fases (Q1, Q2, Q3, Q4), enquanto uma instrução é executada, a próxima é 
acessada para ser executada no ciclo seguinte. Nestas condições, cada instrução 
é executada em um único ciclo. Em geral, as instruções são executadas em apenas 
um ciclo de máquina, exceto as que geram salto, como as chamadas de rotina e os 
saltos para outros endereços que não os da sequência normal do programa. Des-
sa maneira, para um clock externo de 4 MHz, temos uma instrução simples, que 
leva 1 µs para ser executada, e aquelas que produzem salto levam 2 µs.
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 107
SER_CA_ELEIND_UNI4.indd 107 27/09/2019 17:35:39
Arduino
Arduino é uma plataforma de prototipagem (projeto/protótipo) eletrônica de 
software e de hardware livres (open source) e de placa única. Projetada com um 
microcontrolador Atmel Corporation AVR (microcontrolador RISC de 8 bits), a pla-
taforma possui suporte de entrada/saída embutido e uma linguagem de progra-
mação padrão, normalmente as linguagens C ou C++.
O principal objetivo do Arduino é criar ferramentas acessíveis, com baixo custo, 
fl exíveis e fáceis de utilização, tanto para iniciantes quanto para profi ssionais da 
área computacional e/ou eletroeletrônica.
Como exemplos de aplicação do Arduino, podemos mencionar: controle de 
semáforos, de contador binário, de sensores, de termômetros digitais, de servo-
motores, entre muitas outras aplicações que envolvem acionamentos e controles 
microprocessados/microcontrolados.
Os Arduinos utilizam a série de chips megaAVR, particularmente os ATmega8, 
ATmega168, ATmega328 e o ATmega1280.
ASSISTA
Para saber mais sobre o Arduino, assista ao vídeo pro-
duzido pelo Manual do Mundo a respeito do assunto. E 
então? Vamos conferir?
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 108
SER_CA_ELEIND_UNI4.indd 108 27/09/2019 17:35:39
Sintetizando
Nesta unidade, tivemos a oportunidade de conhecer três assuntos importan-
tes no que concerne à eletrônica e os sistemas digitais. O primeiro assunto diz 
respeito aos microprocessadores comerciais. O segundo refere-se aos estudos 
sobre a linguagem de programação Assembly. Por fim, o terceiro assunto discu-
tido foi sobre os microcontroladores.
O microprocessador é um dispositivo lógico programável cuja operação é de-
terminada pelas instruções que ele executa, conhecidas como instruções de má-
quina. Tais instruções são conhecidas como conjunto de instruções. Cada tipo de 
microprocessador tem o seu próprio conjunto de instruções mnemônicas, que 
representam os códigos binários das instruções.
Vale ressaltar que a linguagem Assembly utiliza o conjunto de instruções para 
criar programas para o microprocessador. Uma vez que a linguagem Assembly 
está relacionada com linguagem de máquina (instruções em código binário), é 
classificada como de baixo nível.
Vimos que, no microprocessador, cada instrução é representada por uma se-
quência de bits. No decorrer da execução, uma instrução é transferida para um 
registrador de instrução (IR) no microprocessador, que realiza a operação exigida.
É comum utilizar uma representação simbólica para instruções de máquina. 
Desta forma, os opcodes são representados por abreviações, chamados mne-
mônicos, que indicam a operação que será realizada. Observe alguns exemplos: 
ADD – Adiciona, SUB – Subtrai, MPY – Multiplica, DIV – Divide, LOAD – Carrega 
dados da memória e STOR – Armazena dados na memória.
Quanto à linguagem Assembly, vimos que ela é uma linguagem que utiliza os 
já mencionados mnemônicos, visando a melhorar compreensão das operações 
por parte dos programadores. Sua tradução em códigos binários é realizada por 
um programa conhecido como assembler.
Por fim, vimos microcontroladores. Um microcontrolador é projetado para 
integrar componentes em um único circuito integrado. Podemos dizer que ne-
nhum componente externo torna-se necessáriopara o seu funcionamento in-
terno, ao contrário dos microprocessadores. Além disso, constatamos que eles 
podem ser encontrados em distintas aplicações, como impressoras, elevado-
res, servomotores etc.
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 109
SER_CA_ELEIND_UNI4.indd 109 27/09/2019 17:35:39
O microcontrolador PIC pode ser visto como um circuito integrado lógico da fa-
mília TTL ou mesmo como um circuito integrado CMOS, e está disponível em vários 
modelos, para atender às mais diversas exigências de projetos e aplicações espe-
cíficas. É importante ressaltar que cada família de microcontrolador PIC difere em 
vários fatores.
Finalmente, comentamos brevemente acerca do Arduino, uma plataforma de 
prototipagem eletrônica de software e de hardware livres e de placa única, que pos-
sui suporte de entrada/saída embutido e uma linguagem de programação padrão 
– normalmente C ou C++.
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 110
SER_CA_ELEIND_UNI4.indd 110 27/09/2019 17:35:39
Referências bibliográficas
DIAGO, R.; AMARAL, V. M.; HORTA, E. Eletrônica: eletrônica digital. São Paulo: 
Fundação Padre Anchieta, 2011 (Coleção Técnica Interativa. Série Eletrônica, v. 4).
MONTEIRO, M. A. Introdução à organização de computadores. 5. ed. Rio de 
Janeiro: LTC, 2012.
O QUE É Arduino, afinal de contas? #ManualMaker Aula 4, Vídeo 1. Posta-
do por Manual do Mundo. (17min. 2s.). Disponível em: <https://www.youtube.
com/watch?v=sv9dDtYnE1g>. Acesso em: 4 set. 2019.
OLIVEIRA, C. L. V. et al. Aprendendo Arduino: uma abordagem prática. Duque 
de Caxias: Katzen, 2018.
PATTERSON, D.; HENNESSY, J. L. Organização e projeto de computadores: a 
interface hardware/software. Rio de Janeiro: Campus-Elsevier, 2005.
PEREIRA, F. Microcontroladores PIC: técnicas avançadas. 6. ed. São Paulo: Érica,
2008.
SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Tradução 
João Eduardo Nóbrega Tortello. Porto Alegre: Bookman, 2018.
STALLINGS, W. Arquitetura e organização de computadores. Tradução de 
Daniel Vieira e Ivan Bosnic. Revisão técnica de Ricardo Pannain. 8. ed. São Pau-
lo: Pearson Pratice Hall, 2010.
TANENBAUM, A. S.; AUSTIN, T. Organização estruturada de computadores. 
Tradução de Daniel Vieira. Revisão técnica de Wagner Luiz Zucchi. 6. ed. São 
Paulo: Pearson Prentice Hall, 2013.
TRINDADE, R. O que é a Lei de Moore e por que você deve se preocupar com o 
fim dela. UOL, São Paulo, 29 jan. 2019. Disponível em: <https://www.uol.com.
br/tilt/noticias/redacao/2019/01/29/o-que-e-a-lei-de-moore-e-porque-voce-
-deve-se-preocupar-com-o-fim-dela.htm?cmpid=copiaecola>. Acesso em: 4 
set. 2019.
ELETRÔNICA DIGITAL E SISTEMAS DIGITAIS 111
SER_CA_ELEIND_UNI4.indd 111 27/09/2019 17:35:39

Continue navegando