Buscar

Introdução à Arquitetura de Computadores

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 57 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 57 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 57 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Faculdades de Tecnologia 
CARLOS DRUMMOND DE ANDRADE 
Tecnologia em Análise e Desenvolvimento de Sistema 
Ronaldo Barbato de Oliveira 
 
 
 
 
 
 
 
 
 
 
Arquitetura de Computadores 
Notas de Aula 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
SÃO PAULO – SP 
Agosto/2007 
 2 
1-Introdução 
 
Muita gente ainda desconhece a composição e organização dos componentes que integram um 
instrumento vital para o seu trabalho: o computador. Hoje em dia, um bom profissional da área de 
informática, deve possuir sólidos conceitos sobre os componentes e a organização dos computadores. 
Mesmo o profissional que irá se dedicar 100% de seu tempo a trabalhar projetando, construindo, 
testando, validando, instalando, treinando ou qualquer outra tarefa em nível de software, deve, pelo 
menos, informar-se sobre o hardware. O trabalho em nível de software pode ser profundamente 
influenciado, pelo hardware, quer seja na produtividade, quer seja em seu planejamento; desta forma, 
os componentes físicos de um sistema computacional não podem ser desconhecidos a um profissional 
da área de informática. 
Saber usar um computador, reconhecer e saber usar seus principais periféricos de entrada e saída 
pode ser suficiente para futuros profissionais, mas você estará subestimando seu potencial e a si 
próprio, além de tornar-se limitado. Sem saber sobre a organização e o funcionamento de seus 
principais componentes não saberá se adquiriu ou indicou o computador mais adequado à determinada 
função, ou, um equipamento caro incapaz de realizar tarefas nas quais os modelos mais simples se 
sobressaem. 
 
Conceituação 
Um computador é uma máquina capaz de sistematicamente coletar, manipular e fornecer os 
resultados da manipulação de informações para um ou mais objetivos. Por ser uma máquina composta 
de vários circuitos e componentes eletrônicos, também é chamado de equipamento de processamento 
eletrônico de dados. 
Processamento de dados consiste, então, em uma série de atividades ordenadamente realizadas, 
com o objetivo de produzir um arranjo determinado de informações a partir de outras obtidas 
inicialmente. 
A manipulação das informações coletadas no inicio da atividade chama-se processamento; as 
informações são usualmente denominadas dados. 
Os termos dado e informação podem ser tratados como sinônimos ou como termos distintos; dado 
pode ser definido como a matéria prima originalmente obtida de uma ou mais fontes e informação, 
como o resultado do processamento, isto é, o dado processado. 
 
Sistemas 
“Conjunto de partes coordenadas que concorrem para realização de um determinado objetivo”. 
Sistemas de processamento de dados são aqueles responsáveis pela coleta, armazenamento, 
processamento e recuperação, em equipamentos de processamento eletrônico, dos dados necessários 
ao funcionamento de um outro sistema maior: o sistema de informações. 
 
Sistemas de Computação 
Um computador precisa entender cada instrução, de modo a executar corretamente a operação que 
se pretendem, as pessoas falam português, inglês e outras línguas para se comunicar e os 
computadores utilizam uma linguagem própria, a linguagem binária ou de máquina. 
Essa linguagem de máquina é tediosa de manipular para os seres humanos, difícil de compreender 
 3 
e fácil de acarretar erros. Por essa razão, foram desenvolvidas outras linguagens, mais próximas do 
entendimento dos operadores, genericamente chamadas linguagens de programação. Atualmente, há 
dezenas dessa linguagens, tais como: Cobol, PL/I, Pascal, Fortran, Basic, Lisp, Assembley, C etc. 
Cada uma dessas linguagens possui regras fixas e rígidas de sintaxe, semelhantes às das linguagens 
de comunicação humana, tais como português, inglês etc. (embora estas não possuam sintaxe tão 
rígidas). O programador escreve o programa através da descrição por instrução. 
Tal programa não é, entretanto, possível de ser diretamente executado pela máquina, visto que as 
linguagens de programação são apenas um modo do operador comunicar-se com o computador. A 
máquina somente entende e executa instruções mais simples, chamadas instruções de máquinas. 
Todo computador é construído com circuitos eletrônicos capazes de reconhecer e executar 
diretamente apenas um conjunto limitado e simples de instruções de máquina, nas quais todo 
programa (escrito em Pascal, Cobol, Basic etc.) deve ser convertido antes de ser executado. Essas 
instruções são normalmente do tipo: 
executar operações aritméticas sobre dois números; 
executar operações lógicas sobre dois números; 
mover um conjunto de bits (um número ou parte) de um ponto para outro do computador; 
desviar a seqüência do programa; 
comunicação com algum disposição de entrada ou saída de dados. 
O conjunto formado pelos circuitos eletrônicos e partes eletromecânicas de um computador é 
conhecido como hardware que é a parte física e visível do computador. 
O software consiste em programas, de qualquer tipo e em qualquer linguagem, que são 
introduzidos na máquina para fazê-la trabalhar, passo a passo, e produzir algum resultado. 
 
Histórico 
As primeiras máquinas de computar. 
John Napier (1550-1617), escocês inventor dos logaritmos, também inventou os ossos de Napier, 
que eram tabelas de multiplicação gravadas em bastão, o que evitava a memorização da tabuada. 
A primeira máquina de verdade foi construída por Wilhelm Schickard (1592-1635), sendo capaz de 
somar, subtrair, multiplicar e dividir. Essa máquina foi perdida durante a guerra dos trinta anos, sendo 
que recentemente foi encontrada alguma documentação sobre ela. Durante muitos anos nada se soube 
sobre essa máquina, por isso, atribuía-se a Blaise Pascal (1623-1662) a construção da primeira 
máquina calculadora, que fazia apenas somas e subtrações. 
A máquina de Pascal foi criada com objetivo de ajudar seu pai a computar os impostos em Rouen, 
França. O projeto de Pascal foi bastante aprimorado pelo matemático alemão Gottfried Wilhelm 
Leibniz (1646-1726), que também inventou o cálculo, o qual sonhou que, um dia no futuro, todo o 
raciocínio pudesse ser substituído pelo girar de uma simples alavanca. 
Todas essas máquinas, porém, estavam longe de ser um computador de uso geral, pois não eram 
programáveis. Isto quer dizer que a entrada era feita apenas de números, mas não de instruções a 
respeito do que fazer com os números. 
Babbage, Ada Lovelace e programas de computador. 
A origem da idéia de programar uma máquina vem da necessidade de que as máquinas de tecer 
produzissem padrões de cores diferentes. Assim, no século XVIII foi criada uma forma de representar 
os padrões em cartões de papel perfurado, que eram tratados manualmente. Em 1801, Joseph Marie 
Jacquard (1752-1834) inventa um tear mecânico, com uma leitora automática de cartões. 
 4 
A idéia de Jacquard atravessou o Canal da Mancha, onde inspirou Charles Babbage (1792-1871), 
um professor de matemática de Cambridge, a desenvolver uma máquina de “tecer números”, uma 
máquina de calcular onde a forma de calcular pudesse ser controlada por cartões. 
Tudo começou com a tentativa de desenvolver uma máquina capaz de calcular polinômios por 
meio de diferenças, o calculador diferencial. Enquanto projetava seu calculador diferencial, a idéia de 
Jacquard fez com que Babbage imaginasse uma nova e mais complexa máquina, o calculador 
analítico, extremamente semelhante ao computador atual. 
Sua parte principal seria um conjunto de rodas dentadas, o moinho, formando uma máquina de 
somar com precisão de cinqüenta dígitos. As instruções seriam lidas de cartões perfurados. Os cartões 
seriam lidos em um dispositivo de entrada e armazenados, para futuras referências, em um banco de 
mil registradores. Cada um dos registradores seria capaz de armazenar um número de cinqüentadígitos, que poderiam ser colocados lá por meio de cartões a partir do resultado de um dos cálculos do 
moinho. 
Além disso tudo, Babbage imaginou a primeira máquina de impressão, que imprimiria os 
resultados dos cálculos, contidos nos registradores. Babbage conseguiu, durante algum tempo, fundos 
para sua pesquisa, porém não conseguiu completar sua máquina no tempo prometido e não recebeu 
mais dinheiro. Hoje, partes de sua máquina podem ser vistas no Museu Britânico, que também 
construiu uma versão completa, utilizando as técnicas disponíveis na época. 
Junto com Babbage, trabalhou a jovem Ada Augusta, filha do poeta Lord Byron, conhecida como 
Lady Lovelace e Ada Lovelace. Ada foi a primeira programadora da história, projetando e explicando, 
a pedido de Babbage, programas para a máquina inexistente. Ada inventou os conceitos de sub-rotina, 
uma seqüência de instruções que pode ser usada várias vezes, loop, uma instrução que permite a 
repetição de uma seqüência de cartões, e do salto condicional, que permite saltar algum cartão caso 
uma condição seja satisfeita. 
Ada Lovelace e Charles Babbage estavam avançados demais para o seu tempo, tanto que até a 
década de 1940, nada se inventou parecido com seu computador analítico. Até essa época foram 
construídas muitas máquinas mecânicas de somar destinadas a controlar negócios (principalmente 
caixas registradoras) e algumas máquinas inspiradas na calculadora diferencial de Babbage, para 
realizar cálculos de engenharia (que não alcançaram grande sucesso). 
A máquina de tabular 
O próximo avanço dos computadores foi feito pelo americano Herman Hollerith (1860-1929), que 
inventou uma máquina capaz de processar dados baseada na separação de cartões perfurados (pelos 
seus furos). A máquina de Hollerith foi utilizada para auxiliar no censo de 1890, reduzindo o tempo de 
processamento de dados de sete anos, do censo anterior, para apenas dois anos e meio. A máquina de 
Hollerith foi também pioneira ao utilizar a eletricidade na separação, contagem e tabulação dos 
cartões. 
A empresa fundada por Hollerith é hoje conhecida como International Bussiness Machines, ou 
IBM. 
Os primeiros computadores de uso geral 
O primeiro computador eletro-mecânico foi construído por Konrad Zuse (1910–1995). Em 1936, 
esse engenheiro alemão construiu, a partir de relês que executavam os cálculos e dados lidos em fitas 
perfuradas, o Z1. Zuse tentou vender o computador ao governo alemão, que desprezou a oferta, já que 
não poderia auxiliar no esforço de guerra. Os projetos de Zuse ficariam parados durante a guerra, 
dando a chance aos americanos de desenvolver seus computadores. 
Foi na Segunda Guerra Mundial que realmente nasceram os computadores atuais. A Marinha 
americana, em conjunto com a Universidade de Harvard, desenvolveu o computador Harvard Mark I, 
projetado pelo prof. Howard Aiken, com base no calculador analítico de Babbage. O Mark I ocupava 
120m³ aproximadamente, conseguindo multiplicar dois números de dez dígitos em três segundos. 
 5 
Simultaneamente, e em segredo, o Exército Americano desenvolvia um projeto semelhante, 
chefiado pelos engenheiros J. Presper Eckert e John Mauchy, cujo resultado foi o primeiro 
computador a válvulas, o Eletronic Numeric Integrator And Calculator (ENIAC)[2], capaz de fazer 
quinhentas multiplicações por segundo. Tendo sido projetado para calcular trajetórias balísticas, o 
ENIAC foi mantido em segredo pelo governo americano até o final da guerra, quando foi anunciado 
ao mundo. 
No ENIAC, o programa era feito rearranjando a fiação em um painel. Nesse ponto John von 
Neumann propôs a idéia que transformou os calculadores eletrônicos em “cérebros eletrônicos”: 
modelar a arquitetura do computador segundo o sistema nervoso central. Para isso, eles teriam que ter 
três características: 
1. Codificar as instruções de uma forma possível de ser armazenada na memória do computador. 
Von Neumann sugeriu que fossem usados uns e zeros. 
2. Armazenar as instruções na memória, bem como toda e qualquer informação necessária a 
execução da tarefa, e 
3. Quando processar o programa, buscar as instruções diretamente na memória, ao invés de lerem 
um novo cartão perfurado a cada passo. 
Este é o conceito de programa armazenado, cujas principais vantagens são: rapidez, versatilidade e 
automodificação. Assim, o computador programável que conhecemos hoje, onde o programa e os 
dados estão armazenados na memória ficou conhecido como Arquitetura de von Neumann. 
Para divulgar essa idéia, von Neumann publicou sozinho um artigo. Eckert e Mauchy não ficaram 
muito contentes com isso, pois teriam discutido muitas vezes com ele. O projeto ENIAC acabou se 
dissolvendo em uma chuva de processos, mas já estava criado o computador moderno. 
 
 6 
2 - Componentes de um sistema de computação 
 
Conceitos sobre organização de computadores 
Para estudar organização de computadores alguns conceitos básicos devem ser assimilados/ 
revisados. Estes conceitos abrangem os componentes funcionais básicos e as formas de representação/ 
armazenamento de informações, além do funcionamento básico dos sistemas de computação. 
Funcionamento básico dos sistemas de computação Os computadores executam quatro funções 
distintas sendo elas: Entrada; Processamento; Armazenamento/recuperação de dados; Saída. A Figura 
1 ilustra a organização dos sistemas de computação. 
Figura 1: Componentes básicos de um sistema de computação 
 
Para que um computador trabalhe é necessária à inserção de informações (entrada). Seguindo as 
instruções fornecidas pelos programas, o computador processa os dados oriundos da entrada 
(processamento) armazenando-os logo em seguida para posterior utilização. As informações 
produzidas ficam disponíveis para utilização (saída) e a menos que se desejem as informar e produzir 
novamente, elas devem ser armazenadas em um dispositivo de armazenamento estável. 
O esquema geral da figura 1 é seguido por praticamente todos os computadores, sendo que os da-
dos são produzidos através de instruções durante a etapa de processamento, realizada pela CPU (Uni-
dade Central de Processamento - processador). Cada processador tem um conjunto único de instruções 
para processar os dados, porém geralmente utilizam a mesma forma de composição das instruções. A 
Figura 2 mostra a forma das instruções comumente utilizada pelos processadores. 
Figura 2: Forma geral das instruções 
A “operação” especifica a função a ser desempenhada, por exemplo, soma, armazene ou desvie, 
entre outras. Os “operandos” fornecem os dados a serem utilizados na operação ou ainda a forma de 
alcançar a posição destes dados na memória. 
 7 
O Bit, o Caractere, o Byte e a Palavra 
Todas as informações manipuladas pelos computadores devem ser entendidas pela máquina. 
Como o computador é um dispositivo eletrônico, ele armazena e movimenta as informações de 
forma eletrônica, podendo utilizar um valor de corrente. Para que a máquina representasse todos os 
símbolos da linguagem humana eletricamente seriam necessárias mais de 100 diferentes voltagens 
(corrente). Uma máquina deste tipo além de ser de custo elevado, seria difícil de construir e de baixa 
confiabilidade. Desta forma, optou-se por construir máquinas binárias, capazes de entender apenas 
dois valores diferentes. 
Os computadores digitais são totalmente binários, isto é, trabalham apenas com dois valores, 
tornando assim simples o emprego da lógica booleana (Sim/Não, Verdadeiro/Falso, Aberto/ 
Fechado,...) tanto na construção de componentes quanto como base para a escrita de programas 
(programação). 
Convencionou-se chamar os dois níveis elétricos de 0 e 1 sendo que cada algarismo da 
representação numérica binária é denominado de bit, correspondente a abreviatura de binary digit 
(dígito binário). 
Obviamente com apenas 1 bit isolado pode-se representarmuito pouca coisa (apenas 2 valores), 
desta forma, usam-se agrupamentos ordenados de bits para a representação de informações úteis. A 
menor informação inteligível aos seres humanos é o caractere, como por exemplo, o número “5” ou a 
letra “a”. Existem diversos agrupamentos de bits para representar caracteres, sendo que o mais po-
pularmente utilizado é chamado de byte. Um byte é uma seqüência ordenada de 8 bits, sendo cada bit 
tratado de forma independente dos demais e com um valor fixo de acordo com sua posição. Qualquer 
seqüência binária pode ser convertida para um número na base decimal, sendo utilizado este valor 
para encontrar o caractere correspondente, utilizando uma tabela de caracteres. As memórias ge-
ralmente armazenam e recuperam informações byte a byte, ou ainda em múltiplos de bytes. 
A representação binária de valores também é utilizada para a representação de números dentro dos 
computadores. A metodologia é a mesma, sendo convertido o valor em base decimal para o 
correspondente em base binária. 
Por exemplo, o número 2310 pode ser armazenado no seguinte byte 00010111. 
Os dispositivos de memória atuais utilizam agrupamentos de bytes para representar sua capacidade 
de armazenamento. Uma vez que tais agrupamentos são oriundos de uma base binária o fator de 
multiplicação utilizado é 1024 (210). Cada faixa possui também uma letra para abreviar a categoria. A 
Tabela 1 demonstra alguns agrupamentos de bits e bytes utilizados. 
Tabela 1: Agrupamento de bits e bytes 
Agrupamento Símbolo Representa 
Byte B 8 bits 
Kilo K 1024 Bbytes 
Mega M 1024 Kbytes 
Giga G 1024 Mbytes 
Tera T 1024 Gbytes 
Peta P 1024 Tbytes 
 
Estes agrupamentos são utilizados na descrição das capacidades de armazenamento dos 
computadores hoje em dia, sendo que esta capacidade é referenciada por um número e um símbolo 
correspondente. Por exemplo, 256MB de memória. 
 8 
Outro conceito importante muito utilizado na descrição do mecanismo de transferência de 
informações entre a CPU e a memória principal é o conceito de palavra. A palavra é utilizada para 
indicar a unidade de transferência e processamento de um computador. As palavras são múltiplos de 1 
byte, sendo que os microprocessadores geralmente utilizam 32bits – 4 bytes como tamanho da palavra 
e 64 bits – 8 bytes.
 9 
3 - Conversão de Bases e Aritmética Computacional 
 
Notação Posicional 
A notação posicional determina o valor de um número em função da posição e do valor de cada 
algarismo dentro do número Base Decimal. 
Exemplo: 130310 
1 x 103 + 3 x 102 + 0 x 101 + 3 x 100 = 
1 x 1000 + 3 x 100 + 0 x 10 + 3 x 1 = 
1000 + 300 + 0 + 3 = 1303 
 
Da aritmética temos que, em qualquer base, o valor do i-ésimo dígito d de um número é dado por: 
d x basei, onde i começa em 0 e cresce da direita para a esquerda, de acordo com a posição ocupada 
pelo dígito. Por exemplo, o número 1011 na base dois é igual a: 
 
1 x 23 + 0 x 22 + 1 x 21 + 1 x 20 = 
1 x 8 + 0 x 4 + 1 x 2 + 1 x 0 = 
 8 + 0 + 2 + 1 = 11 
 
Genericamente, um sistema qualquer de numeração posicional é expresso por: 
N = ( dn-1 dn-2 dn-3 ... d1 d0 )b 
onde: 
d – algarismo dentro do número 
 n-1, n-2, ..., 1, 0 – indicam a posição de cada algarismo 
b – indica a base de numeração 
n – indica o número de dígitos inteiros 
 
O valor do número pode ser obtido por: 
N = dn-1 x bn-1 + dn-2 x bn-2 + ... + d1 x b1 + d0 x b0 
 
Assim, o número 374810 pode ser expresso por: 
(3 x 103) + (7 x 102) + (4 x 101) + (8 x 100) 
 
Outras bases de numeração 
Veremos as bases 2 e outras potências de 2 (8 e 16) 
Vejamos o número: 10112 
1 x 23 + 0 x 22 + 1 x 21 + 1 x 20 = 
1 x 8 + 0 x 4 + 1 x 2 + 1 x 1 = 
 8 + 0 + 2 + 1 = 1110 
 10 
 
Na base 8, são utilizados os dígitos de 0 a 7, em bases superiores a 10, usam-se letras para 
representar os dígitos; é o caso da base 16, que usa as letras A, B, C, D, E e F para representar os 
valores 10, 11, 12, 13, 14 e 15 respectivamente. 
A seguir temos um exemplo em octal: 7278 
7 x 82 + 2 x 81 + 7 x 80 = 
7 x 64 + 2 x 8 + 7 x 1 = 
 448 + 16 + 7 = 47110 
 
E um exemplo em hexadecimal: 2DB16 
2 x 162 + D x 161 + B x 160 = 
2 x 256 + 13 x 16 + 11 x 1 = 
 512 + 208 + 11 = 73110 
 
Tabela 2: Representação numérica nas bases 2, 8, 10 e 16 
BASE 2 BASE 8 BASE 10 BASE 16 
00000 0 0 0 
00001 1 1 1 
00010 2 2 2 
00011 3 3 3 
00100 4 4 4 
00101 5 5 5 
00110 6 6 6 
00111 7 7 7 
01000 10 8 8 
01001 11 9 9 
01010 12 10 A 
01011 13 11 B 
01100 14 12 C 
01101 15 13 D 
01110 16 14 E 
01111 17 15 F 
10000 20 16 10 
10001 21 17 11 
 11 
Conversão de Bases 
Base 2 -> Base 8 
 23 = 8 
 Três dígitos binários equivalem a um dígito octal 
 1101110102 
 6 7 2 8 
 
Base 2 -> Base 16 
24 = 16 
Quatro dígitos binários equivalem a um dígito hexadecimal 
1 1011 10102 
1 B A16 
 
Base 10 -> Base 2 
Na conversão da base 10 para a base 2 o número decimal é dividido sucessivas vezes pela base; o 
resto de cada divisão ocupará sucessivamente as posições de ordem 0, 1, 2 e assim por diante até que 
o resto da última divisão ocupe a posição de mais alta ordem. 
Veja o exemplo da conversão do número 3710 para a base 2: 
 
 
 
 
 
 
 
 
150403120110<= O resto das divisões de cima para baixo são posicionados da direita para a esquerda. 
1001012 = 3710 
 
Base 10 -> Base 16 
A mesma maneira das transformações de decimal para binário, com divisões sucessivas pelo 
número 16. Veja o exemplo da conversão do número 3710 para a base 16: 
 
 
 
 
 
 
37 | 2 
 10 18 | 2 
 01 9 | 2 
 12 4 | 2 
 03 2 | 2 
 04 1 | 2 
150403120110 15 0 
 
37 : 2 = 18 resto 10 
18 : 2 = 9 resto 01 
9 : 2 = 4 resto 12 
4 : 2 = 2 resto 03 
2 : 2 = 1 resto 04 
1 : 2 = 0 resto 15 
 
 
150403120110 
2736 | 16 
 00 171 | 16 
 111 10 | 16 
 102 0 
Mas, 1010 = A16 e 1110 = B16 
A2B100 = AB016 = 273610 
 12 
 Aritmética Binária 
 
Adição 
Para somar dois números binários, fazem-se as contas coluna a coluna, da direita para a esquerda, 
como de costume, fazendo o transporte de um (<e vai um>) quando for o caso. Para isto, observe as 
seguintes operações básicas: 
 1 
 + 0 + 0 +1 +1 
 0 1 1 1 
 0 1 10 11 
(1 + 1 é igual a 0 e vai 1) (1 + 1 + 1 é igual a 1 e vai 1) 
 
Outros exemplos: 
 + 111 100111 1 11110 
 + 1101 100100 11001 101110 
 + 1101 + 1001011111+ 10011 + 1110 
 10010 110110 101100 111100 
 
Subtração 
Como o conjunto de símbolos contém apenas 2 dígitos, ao se efetuar a subtração parcial entre 2 
dígitos, um do diminuendo e outro do diminuidor, se o segundo (diminuidor) exceder o primeiro 
(diminuendo), subtrai-se uma unidade ao dígito imediatamente à esquerda no diminuendo (se existir e 
o seu valor for 1), convertendo-o a 0. Em seguida, substituímos o diminuendo por 2, que corresponde 
à equivalência 1*2, da unidade extraída. Se o dígito imediatamente à esquerda for 0, procura-se nos 
dígitos consecutivos. 
 
Exemplos: 11101 - 111 
 02 
 02 021 
 -11101 -11101 -11101 
 -111 -111 -111 
 10010 11010 10110 
 
Exemplos: 11000 - 111 
 1 0112 
 1 1 0120 
 - 1 0200 
 - -11000 
 -1111001 10001 
 
 
 
 13 
Aritmética Hexadecimal 
 
Adição 
Como exemplo, suponha a adição de 8h+5h, se somada em decimal o valor seria 13. Em 
hexadecimal, o valor 13 é representado por Dh. Deve-se reparar que, tal como nos habituamos a fazer 
no primário, sempre que o resultado iguala ou ultrapassa a base, subtraímos esta ao resultado, e 
fazemos um transporte para a coluna seguinte («e vai um», neste caso). 
Suponha agora a adição de 19 por 9, que em decimal o resultado seria 28, em hexadecimal, 
inicialmente somamos os dígitos menos significativos: 9H+9H = 18; como o resultado é maior que a 
base (16), então 18-16 = 2 e vai um para o dígito mais significativo. 
1 
+ 19 
 9 
 22 
Não é preciso converter os números F8h e A34h para decimal, somá-los e reconverter o resultado 
para a base 16. Podemos fazer a conta coluna a coluna. Então F8H + A34H é calculado da seguinte for-
ma: 
 1 
+ F 8
 H + F 8 H + F 8 H + F 8 H 
 A 3 4
 H A 3 4 H A 3 4 H A 3 4 H 
 C
 H 2 C H B 2 C H 
 
Subtração 
Vamos ver a subtração a partir de um exemplo: 27H-1EH. Efetuamos a operação de subtração co-
luna a coluna. Na primeira coluna, o diminuidor (E) é superior ao diminuendo (7). Então, adicionamos 
a base ao diminuendo, executamos a subtração, e há transporte de uma unidade que somamos ao di-
minuidor da coluna seguinte. 
 1 
 2 7
 H 2 7 H 
 - 1 E
 H - 1 E H 
 9
 H 0 9 H 
 
Retirando o número transportado do diminuendo da coluna da esquerda, 2-1, obtemos 1, e subtra-
indo 1 do diminuidor, obtemos 0: 
 
 14 
4 – Conceitos de Lógica Digital 
 
Portas e Operações Lógicas 
 
AND 
A operação lógica AND é uma operação que aceita dois operandos. Estes operando são biná-
rios simples (base 2). A operação AND é representar com a tabela verdade apresentada abai-
xo. As duas colunas a esquerda representam os dois operandos da operação AND Op1 Op2. 
 
 
Em outras palavras, a operação lógica AND é: “se o primeiro operando é 1 e o segundo ope-
rando é 1, o resultado é 1, senão o resultado é 0”. 
 
OR 
A operação lógica OR também é uma operação com dois operandos. E a tabela verdade da 
operação OR tem a seguinte forma: 
 
 
 
A operação lógica OR pode ser descrita como: “Se o primeiro operando ou o segundo ope-
rando (ou os dois) forem 1, o resultado é 1, senão o resultado é 0. Esta operação também é 
conhecida como ou inclusivo (inclusive-OR). 
 
NOT 
A operação lógica NOT é mostrada pela tabela verdade seguinte: 
 
 
 
Nela se o operando for 1, o resultado é 0, senão o resultado é 1. 
Op1 Op2 AND Op1 Op2 
0 0 0 
0 1 0 
1 0 0 
1 1 1 
Op1 Op2 OR Op1 Op2 
0 0 0 
0 1 1 
1 0 1 
1 1 1 
Op1 NOT Op1 
0 1 
1 0 
 15 
XOR 
A operação lógica XOR que é a abreviação de eXclusive OR (ou exclusivo) e pode ser consi-
derado um caso particular da função OR, sendo sua tabela verdade da seguinte forma: 
 
 
O resultado de uma operação XOR é verdade se os valores de suas entradas forem diferentes 
e será falsa se os valores das entradas forem iguais. 
NAND 
A operação lógica ou porta NAND é definida como complemento da porta AND e sua tabela 
verdade é mostrada a seguir: 
 
 
 
Correspondência entre Circuitos Eletrônicos e Funções Booleanas 
Há uma correspondência de um-para-um entre circuitos elétricos e funções booleanas. Para toda e 
qualquer função booleana é possível desenvolver um circuito eletrônico e vice-versa. Como as fun-
ções booleanas precisam apenas dos operadores booleanos AND, OR e NOT, podemos construir 
qualquer circuito eletrônico usando exclusivamente essas operações. As funções booleanas AND, OR 
e NOT correspondem aos seguintes circuitos eletrônicos: às portas lógicas AND e OR e ao inversor 
(NOT). 
Um fato interessante é que você precisa apenas de um único tipo de porta lógica para implementar 
qualquer circuito. Esta porta é a NAND, mostrada acima. 
 
Para provar que podemos construir qualquer função booleana usando apenas portas NAND, preci-
samos mostrar como construir um inversor (NOT), a porta AND e a porta OR de um NAND (já que 
podemos criar qualquer função booleana usando apenas AND, NOT e OR). Construir um inversor é 
fácil, apenas conecte as duas entradas, como mostrado na figura acima. 
 
 
Uma vez criado o inversor, construir uma porta AND é fácil - apenas inverta a saída de uma porta 
NAND. Afinal de contas, NOT (NOT (A AND B)) é equivalente a A AND B. É claro que isto con-
some duas portas NAND para se construir uma única porta AND, mas ninguém disse que circuitos 
construídos apenas com portas NAND seriam ótimos, apenas que isto seria possível de ser feito. 
Op1 Op2 XOR Op1 Op2 
0 0 0 
0 1 1 
1 0 1 
1 1 0 
Op1 Op2 NAND Op1 Op2 
0 0 0 
0 1 0 
1 0 0 
1 1 1 
 16 
 
A última porta que precisamos sintetizar é a porta OR. Podemos construir facilmente uma porta OR 
a partir de portas NAND aplicando os teoremas de DeMorgan. 
(A or B)' = A' and B' Teorema de DeMorgan. 
A or B = (A' and B')' Inverta os lados da equação. 
A or B = A' nand B' Definição da operação NAND. 
Aplicando essas transformações, obtém-se o circuito da figura acima. Agora você poderia estar se 
perguntando por que estamos nos preocupando com isto. Afinal de contas, porque simplesmente não 
usar as portas AND, OR e inversora? Existem duas razões para isso. Primeiro, portas NAND são ge-
ralmente menos caras de se construir do que outras portas. Segundo, é também muito mais fácil cons-
truir circuitos integrados complexos usando blocos básicos iguais do que construir um circuito inte-
grado usando as diferentes portas básicas. 
 
Ordem das operações no cálculo de expressões lógicas 
A ordem das operações é igual as equações algébricas comuns, ou seja: 
 
{[( )]} 
e 
 AND antes do OR 
 
 _ _ 
Ex: x OR y AND z o primeiro cálculo a ser realizado é: y AND z e não x OR y 
 
 x OR(y AND z) É como se a expressão tivesse parênteses. 
 
 
Circuitos Combinatórios 
 
As portas estudas até aqui necessitam serem combinadas ou interligadas para produzirem redes 
lógicas, também chamadas de circuitos combinatórios e que produzirão o resultado esperado pelo 
projeto, ou seja, um circuito combinatório é definido como um conjunto de portas cuja saída em 
qualquer instante de tempo é função somente de suas entradas. Nesta categoria temos, por exemplo, o 
decodificador 3 x 8 apresentado abaixo, onde para cada uma entrada possível teremos apenas uma 
porta AND com a saída em 1. Este tipo de circuito é utilizado para se endereçar, ou se acessar apenas 
um componente. 
 17 
 
Abaixo é apresentada a tabela verdade do decodificador. 
 
 
 
 
Circuito Seqüencial 
 
Um circuito combinatório que possui um arranjo conhecido por flip-flop passa a ser chamado de 
circuito seqüencial, isto porque o flip-flop é o elemento básico para se guardar ou armazenar 
informações. Um circuito para ser considerado flip-flop precisa possuir as seguintes características 
fundamentais; Ser um elemento biestável, isto é, pode guardar um entre dois possíveis valores 
permanentemente, enquanto estiver energizado. E possuir dois sinais, um deles sendo o complemento 
do outro. 
 
Flip-Flop tipo D 
Neste flip-flop quando a entrada Clk estiver em 1 a saída Q será igual a entrada Dado, quando Clk 
vai para zero, a saída Q vai guardar ou lembrar o ultimo valor que estava em Dado, ou seja, ela ira 
armazenar o valor que estava na entrada enquanto estiver energizado. 
 
 
 
 
 18 
5 – Subsistemas de Memória 
 
Introdução 
A memória principal é apenas um dos componentes dentro do subsistema de memória de um com-
putador, a seguir analisaremosa hierarquia e os tipos principais de memória. 
Todos os programas que são executados nos computadores apresentam um princípio denominado 
localidade de referência. Este princípio estabelece que os programas acessam uma parte relativamente 
pequena do seu espaço de endereçamento em um dado instante de tempo. Existem dois tipos diferen-
tes de localidade: temporal e espacial. 
A localidade temporal estabelece que se um item é referenciado, ele tende a ser referenciado no-
vamente dentro de um espaço de tempo pequeno. Já a localidade espacial estabelece que se um item é 
referenciado, outros itens cujos endereços estejam próximos dele tendem a ser referenciados rapida-
mente. 
Estas propriedades aparecem nos programas pela sua própria natureza. Como exemplo, podemos 
citar os loops onde as instruções e os dados tendem a ser acessados de modo repetitivo (localidade 
temporal). Além disso, se as instruções são acessadas seqüencialmente os programas apresentam loca-
lidade espacial. 
O princípio da localidade é utilizado para implementar o subsistema de memória de um computa-
dor e esta organização é denominada hierarquia de memória. 
A hierarquia de memória prevê a existência de vários níveis de memória e cada um destes níveis 
possui capacidades de armazenamento e tempos de acesso diferentes. As memórias mais rápidas são 
também as mais caras, considerando o custo por bit armazenado. Já as memórias mais lentas são me-
nos custosas e possuem maior capacidade de armazenamento. 
 
Hierarquia de Memória 
Uma hierarquia de memória pode ser formada por diversos níveis, para qualquer quantidade de ní-
veis os dados são copiados entre dois níveis adjacentes. Os níveis superiores são os mais próximos ao 
processador e os níveis inferiores são mais distantes do processador. 
A unidade mínima de transferência de dados entre dois níveis adjacentes é chamada de bloco, se a 
informação solicitada estiver contida num nível ocorre um acerto. Caso contrário, estando a informa-
ção ausente, dizemos que ocorreu uma falha. Neste caso, o nível inferior da hierarquia é acessado para 
que seja possível recuperar o bloco com a informação solicitada. 
A medida de desempenho da hierarquia de memória é dada pela taxa de acertos, que corresponde 
aos dados solicitados que estão presentes naquele nível da memória. A taxa de falhas corresponde aos 
dados não encontrados naquele nível da memória. A penalidade por falha corresponde ao somatório 
dos tempos necessários para identificar que o dado não está presente no nível procurado, acessar o ní-
vel inferior e trazer o bloco para o nível superior da hierarquia e enviar o dado ao processador. 
 
 19 
Em um sistema de computador tanto a CPU quanto o subsistema de entrada e saída interagem com 
a memória, dado que cada conteúdo (palavra ou byte) armazenado na memória possui seu próprio en-
dereço, a interação é feita através de uma seqüência de leituras e escritas a endereços de memória es-
pecíficos. Num sistema de computador existem tipos de memória com diferentes características que 
formam uma hierarquia, como a hierarquia hipotética ilustrada na figura acima. 
A hierarquia de memória pode ser analisada segundo suas capacidades de armazenamento, custo 
por bit e tempo de acesso. Partindo do nível mais inferior da figura, as memórias secundárias são ca-
pazes de armazenar uma grande quantidade de informação, seu custo por bit é menor e o seu tempo de 
acesso é relativamente maior do que as memórias dos níveis superiores. 
No segundo nível, está a memória principal, ela é capaz de armazenar uma quantidade menor de in-
formação, seu custo por bit é maior e seu tempo de acesso é menor do que as memórias secundárias. 
No nível mais superior estão as memórias cachê e estas memórias são as mais rápidas e com o 
maior custo por bit. Por serem muito caras as memórias cache são pequenas. Isto é, são as que têm 
menor capacidade de armazenamento em relação as demais. Qualquer que seja a quantidade de níveis 
utilizados na hierarquia de memória os dados são sempre copiados entre os níveis adjacentes. 
Existem diversas políticas de gerenciamento para a memória primária ou memória principal. O ge-
renciamento de memória usa regras ou políticas de gerenciamento para: 
• busca. Determina quando um bloco de informação deve ser transferido da memória secundária 
para a memória principal; 
• armazenamento. Determina onde o bloco de informação deve ser colocado na memória principal; 
• substituição. Determina qual bloco de informação deve ser substituído por um novo bloco. 
Existem muitos esquemas diferentes de gerenciamento de memória. A seleção de um esquema, em 
particular, depende de muitos fatores, mas em especial depende do suporte de hardware do sistema. 
 
 
CLASSIFICAÇÃO DAS MEMÓRIAS 
Quanto à leitura e escrita, as memórias podem ser classificadas como: 
 
R/W - Read and Write (memória de leitura e escrita), comumente (e impropriamente) chamada de 
RAM (Random Access Memory ou memória de acesso aleatório), embora não seja a única RAM, este 
tipo de memória permite operações de escrita e leitura pelo usuário e pelos programas. Seu tempo de 
acesso é da ordem de dezenas de nano segundos e independe do endereço acessado. É construída com 
tecnologia de semicondutores (bipolar, CCD), 
Existem basicamente dois tipos de memória RAM, o tipo dinâmico - DRAM ("Dynamic Random 
Access Memory") que são módulos que possuem alta capacidade, podendo comportar grandes quanti-
dades de dados. No entanto, o acesso a essas informações costuma ser mais lento que nas memórias 
estáticas. Em compensação tem preços bem menores que as memórias do tipo estático, pois utiliza 
uma tecnologia mais simples. E o tipo estático que é chamado SRAM ("Static Random Access Me-
mory") e é muito mais rápido que as memórias DRAM, porém armazenam menor quantidade de da-
dos. 
A memória RAM é volátil, ou seja, perde a informação armazenada quando deixa de ser energizada. 
Os módulos, também chamados "pentes" de memória RAM variam em capacidade de armazenamen-
to e em velocidade. Em princípio, quanto mais memória RAM o computador tiver, tanto mais rápido 
será o seu funcionamento e mais facilmente ele suportará a execução de funções simultâneas. Os ta-
manhos de memória RAM foram aumentando gradativamente: 16, 32, 64, 128, 256, 512 MB, e assim 
por diante. 
A seguir, são mostrados os tipos de encapsulamento de memórias mais usados nos PCs: 
EDO é a sigla para (Extended Data Out). Trata-se de um tipo de memória que chegou ao mercado 
no início de 1997 e que possui como característica essencial a capacidade de permitir ao processador 
acessar um endereço da memória ao mesmo tempo em que esta ainda estava fornecendo dados de uma 
 20 
solicitação anterior. Esse método permite um aumento considerável no desempenho da memória 
RAM. 
Esse tipo de memória precisava ser usada com pentes em pares. Isso porque os processadores daque-
la época (Pentium) podiam acessar 64 bits por vez, mas cada pente de memória EDO trabalhava ape-
nas com 32 bits. No caso de processadores 486, esse acesso era feito a 32 bits e assim um único pente 
poderia ser usado. Memórias EDO usavam o encapsulamento SIMM-72, visto em um tópico mais à 
frente. 
- DIP (Dual In Line Package) - esse é um tipo de encapsulamento de memória antigo e que foi utili-
zado em computadores XT e 286, principalmente como módulos EPROM (que eram soldados na pla-
ca). Também foi muito utilizado em dispositivos com circuitos menos sotisticados; 
- SIPP (Single In Line Pin Package) - esse tipo encapsulamento é uma espécie de evolução do DIP. 
A principal diferença é que esse tipo de memória possui, na verdade, um conjunto de chips DIP que 
formavam uma placa de memória (mais conhecida como pente de memória). O padrão SIPP foi apli-
cado em placas-mãe de processadores 286 e 386; 
- SIMM (Single In LineMemory Module) - o encapsulamento SIMM é uma evolução do padrão 
SIPP. Foi o primeiro tipo a usar um slot (um tipo de conector de encaixe) para sua conexão à placa-
mãe. Existiram pentes no padrão SIMM com capacidade de armazenamento de 1 MB a 16 MB. Este 
tipo foi muito usado nas plataformas 386 e 486 (primeiros modelos). 
Na verdade, houve dois tipos de padrão SIMM: o SIMM-30 e o SIMM-72. O primeiro é o descrito 
no parágrafo anterior e usava 30 pinos para sua conexão. O segundo é um pouco mais evoluído, pois 
usa 72 pinos na conexão e armazena mais dados (já que o pente de memória é maior), variando sua 
capacidade de 4 MB a 64 MB. O SIMM-72 foi muito utilizado em placas-mãe de processadores 486, 
Pentium e em equivalentes deste; 
- DIMM (Double In Line Memory Module) - esse é o padrão de encapsulamento que surgiu após o 
tipo SIMM. Muito utilizado em placas-mãe de processadores Pentium II, Pentium III e em alguns mo-
delos de Pentium 4 (e processadores equivalentes de empresas concorrentes), o padrão DIMM é com-
posto por módulos de 168 pinos. Os pentes de memória DIMM empregam um recurso chamado ECC 
(Error Checking and Correction - detecção e correção de erros) e tem capacidades mais altas que o 
padrão anterior: de 16 a 512 MB. As memórias do tipo SDRAM (Synchronous Dynamic Random Ac-
cess Memory) utilizam o encapsulamento DIMM, e é um tipo de memória que permite a leitura ou o 
armazenamento de dois dados por vez (ao invés de um por vez, como na tecnologia anterior). Além 
disso, a memória SDRAM opera em freqüências mais altas, variando de 66 MHz a 133 MHz. 
A memória do tipo DDR (Double Data Rate), atinge taxas de transferência de dados de duas vezes o 
ciclo de clock, podendo chegar a 2,4 GB por segundo na transmissão de dados. 
 
 
ROM - Read Only Memory ou memória apenas de leitura 
Esta memória permite apenas a leitura e uma vez gravada não pode mais ser alterada. Também é de 
acesso aleatório (isto é, é também uma RAM), mas não é volátil. É utilizada geralmente por fabrican-
tes para gravar programas que não se deseja permitir que o usuário possa alterar ou apagar acidental-
mente (tal como por ex..a BIOS - Basic Input Output System e microprogramas de memórias de con-
trole). Quando se liga uma máquina, é da ROM que vem os programas que são carregados e processa-
dos no "boot" (na inicialização o hardware aponta automaticamente para o primeiro endereço da 
ROM). Desta forma, parte do espaço de endereçamento da MP é ocupado por ROM. A ROM é mais 
lenta que a R/W e é barata, porém o processo produtivo depende de ser programada por máscara 
("mask programmed") em fábrica e devido ao alto custo da máscara somente se torna econômica em 
grandes quantidades. 
 
Obs.: Boot (ou bootstrap loader) é o processo de inicialização e carga dos programas básicos de um 
computador, automática, sem intervenção externa. Este termo vem de uma analogia com um processo 
(impossível) que seria uma pessoa se levantar puxando-se pelos cordões de suas próprias botas. 
 
 21 
PROM - Programmable Read Only Memory ou memória apenas de leitura, programável. Esta memó-
ria é uma ROM programável (em condições e com máquinas adequadas, chamadas queimadores de 
PROM) e geralmente é comprada "virgem" (sem nada gravado), sendo muito utilizada no processo de 
testar programas no lugar da ROM, ou sempre que se queira produzir ROM em quantidades pequenas. 
Uma vez programada (em fábrica ou não), não pode mais ser alterada. 
 
EPROM - Erasable Programmable Read Only Memory ou memória apenas de leitura, programável 
(com queimadores de PROM) e apagável (com máquinas adequadas, à base de raios ultra-violeta). 
Esta memória é uma PROM apagável. Tem utilização semelhante à da PROM, para testar programas 
no lugar da ROM, ou sempre que se queira produzir ROM em quantidades pequenas, com a vantagem 
de poder ser apagada e reutilizada. 
 
EEPROM (ou E2PROM) - Electrically Erasable Programmable Read Only Memory ou memória a-
penas de leitura, programável e eletronicamente alterável. Também chamada EAROM (Electrically 
Alterable ROM). Esta memória é uma EPROM apagável por processo eletrônico, sob controle da 
UCP, com equipamento e programas adequados. É mais cara e é geralmente utilizada em dispositivos 
aos quais se deseja permitir a alteração, via modem, possibilitando a carga de novas versões de pro-
gramas à distância ou então para possibilitar a reprogramação dinâmica de funções específicas de um 
determinado programa, geralmente relativas ao hardware (p.ex., a reconfiguração de teclado ou de 
modem, programação de um terminal, etc). 
 
 
Arquitetura de Computadores 1
Componentes do Computador e 
Modelo de Von Neumann
Arquitetura de Computadores 2
1 Introdução
• Um computador é composto por blocos 
convencionalmente chamados de:
– Memória
– Unidades Operacionais
– Unidade de Controle
– Dispositivos de entrada e saída
• São compostos de dispositivos de menor complexidade 
tais como registradores, contadores, multiplexadores, 
seletores, decodificadores, somadores e portas lógicas 
(and, or, inv, ...)
Unidade Central de Processamento
CPU
Arquitetura de Computadores 3
1. Introdução
• Registadores são elementos digitais com capacidade de 
armazenar dados. Tem associados sinais de carga que 
determinam quando serão armazenados novos 
conteúdos nesses elementos. São compostos por 
latches ou flip-flops.
• Contadores, Multiplexadores, seletores, decodificadores, 
somadores e portas lógicas são capazes de operar com 
dados fornecendo como resultado o novo dado da 
operação que realizam.
• Elementos digitais necessitam ser ativados ou 
habilitados por sinais de controle definidos pela unidade 
de controle. 
Arquitetura de Computadores 4
2 Elementos Básicos de um Computador
Controle
(contadores, flip-
flops, latches,
lógica aleatória, ...)
Memória de dados e 
de programa
Unidade operacional
(registradores, contadores,
Unidade aritmética e lógica (ULA), ...)
Entrada e Saída
Arquitetura de Computadores 5
2 Elementos Básicos de um Computador
Memória de Dados 
e programas
Banco de 
registradores
Unidade de controle 
(gera os sinais de 
controle)
Program counter
Arquitetura de Computadores 6
3 Princípio Básico de Funcionamento
• Cada computador tem um conjunto de operações e 
convenções único para determinar as posições dos 
dados os quais a operação será realizada. 
• Os vários computadores diferem-se nas operações 
específicas que fornecem e nos métodos que eles usam 
para para referenciar dados que serão manipulados por 
uma operação . 
Operação, determinada instrução:
Operação Operandos
• Operação: especifica a função que será desempenhada
• Operandos: fornece a maneira de calcular a posição 
atual dos dados com o qual a operação será realizada
Arquitetura de Computadores 7
3 Princípio Básico de Funcionamento
• Um programa é constituído por uma sequência pré-
determinada de instruções que devem ser seguidas para 
que seja atingido o objetivo computacional.
• Programa armazenado na memória de programa,
também chamada memória da máquina. 
• As instruções são executadas em uma sequencia
determinada por suas posições de memória. 
• O endereço representa uma posição particular na 
memória e pode ser formado de várias maneiras. (direto, 
indireto)
Arquitetura de Computadores 8
3 Princípio Básico de Funcionamento
• A unidade lógica e aritmética realiza ações indicadas 
nas instruções, executando operações numéricas 
(aritméticas) e não numéricas (lógicas). 
• Unidade central de processamento (CPU) (unidade de 
controle e unidade opercional) é responsável pelo:
– Busca da instrução na memoria de programa
– Decodificação da instrução (tabela dos codicos das instruções, 
especifica paracada microprocessador)
– Execução das Instruções (unidade operacional controlada pelos 
sinais de controle)
Arquitetura de Computadores 9
3 Princípio Básico de Funcionamento
• Contador de instrução (program counter) PC (busca da 
instrução):
– Contem a posição (endereço da memória de programa) da 
proxima execução a ser executada.
– Registrador localizado na CPU
• Registrador de Instrução (busca da instrução)
– Contem a instrução (codigo) lida da memória e que será 
executada.
• A instrução é decodificada (interpretada) e uma 
sequencia de sinais são gerados para a execução da 
instrução.
Arquitetura de Computadores 10
4 Barramento
• Dados são transferidos entre os diversos elementos de 
um computador por caminhos físicos chamado de 
barramento.
• Arquitetura Von Neumann: mesmo barramento para os 
dados e para as instruções. (Gargalo de Von Neumann)
• Do ponto de vista da arquitetura, um barramento de
caracteriza pela sua largura em bits.
• A largura dos bits do barramento deve corresponder ao 
comprimento dos elementos (dados, endereço, controle) 
que são por ele transportados. 
Arquitetura de Computadores 11
5 Memória
• A memória é formada por elementos armazenadores de 
informação. (latches)
• Uma memória esta dividida em palavras (words)
• Cada palavra ocupa uma posição de memória e é 
identificada univocamente por um endereço.
• O conteúdo armazenado nas palavras da memória tanto 
pode representar dados como instruções.
Memória
Reg, endereço da mem
(REM)
Reg, dados da mem
(RDMin)
Reg, dados da mem
(RDMout)
Read
Write
Arquitetura de Computadores 12
6 Unidade Operacional
• Unidade Operacional (Bloco Operacional): executa as 
transformações sobre os dados especificadas pelas 
instruções.
• Porte do processador:
– Número de registradores 
– Tamanho dos registradores
– Quantidade e tipo de operações da Unidade lógica e aritmética 
(ULA) realiza. 
– Desempenho, paralelismo na execução, etc...
Arquitetura de Computadores 13
7 Unidade Aritmética e Lógica (ULA)
• Realiza operações aritméticas e lógicas sobre um ou 
mais operandos. 
• Exemplo: soma de dois operandos, negação de um 
operando, AND de dois operandos, deslocamento para 
a direita, esquerda, etc...
• As operações da ULA são normalmente muito simples. 
Funções mais complexas são realizadas pela ativação 
sequencial de funções mais simples. (Ex. multiplicação)
• A ULA fornece o resultado da operação realizada e 
também alguns codigos de condição (overflow, sinal, 
carry, zero, ...)
Arquitetura de Computadores 14
7 Unidade Aritmética e Lógica (ULA)
• Os sinais de controle selecionam a operação da ULA
• ULA se caracteriza pelo comprimento em bit dos 
operandos, número e tipo de operações, código de 
condições gerados.
Operando A Operando B
Resultado
controle códigos de condição
Arquitetura de Computadores 15
8 Acumulador
• Registrador que tem função armazenar um operando e / 
ou resultado fornecido pela ULA. 
• Nos computadores mais simples, é encontrado apenas 
um acumulador. Em arquiteturas mais complexas, vários 
registradores podem desempenhar a função de 
acumulador.
• O registrador acumulador se caracteriza ao nível de 
arquitetura pelo seu comprimento em bits. 
Arquitetura de Computadores 16
9 Unidade de Controle
• Produz sinais de controle que gerenciam o fluxo interno 
de dados e o instante preciso em que ocorre a 
transferência entre uma unidade e outra.
• Cada sinal de controle comanda uma microoperação
como:
– carga em um registrador, 
– seleção de um dado para a entrada em um determinado 
componente
– Ativação da memória
– Seleção de uma operação da ULA 
– Habilitação de um circuito lógico 
Arquitetura de Computadores 17
9 Unidade de Controle
• Unidade de Controle são máquinas de estados finitas 
(FSM) realizadas por lógica sequencial composto por 
latches e flip-flops e portas combinacionais.
• Exemplo de duas organizações de lógica sequencial:
– Organização convencional: unidade de controle composta por 
componentes digitais tais como flip-flops, contadores, 
decodificadores, que geram sequencialmente e nos instantes de 
tempo adequeados todos os sinais de controle necessários a 
atividade da unidade operacional, do sistema de entrada e saída 
e da memória.
– Organização Microprogramada: os sinais de controle são 
armazenados numa memória especial chamada de memória de 
controle. Vários sinais de controle são buscados a cada acesso 
a memoria de controle. Esses sinais são agrupados em longas 
palavras chamadas microinstrução.
Arquitetura de Computadores 18
9 Unidade de Controle
• RI : registrador de Instrução
• RST : registrador de estado
Unidade de 
Controle
Registador de
Instrução
Registrador de
Estado
Sinais de controle
Arquitetura de Computadores 19
10 Alguns Registradores
• PC (apontador de instrução): caracteriza pelo seu 
comprimento em bits. Deve poder acessar toda a 
memória de programa. Guarda o endereço da memória 
de programa onde a instrução será lida.
• RI (registrador de instrução): armazena a instrução lida 
da memória de programa. O comprimento em bits de RI 
depende do tamanho e codificação das instruções do 
computador.
• RST (registrador de estado): armazena códigos de 
condição gerados pela ULA ou por outras unidades 
como interrupção de dispositivos de E/S. Em função do 
conteúdo do registrador a unidade de controle gera ou 
não os sinais de controle. 
Arquitetura de Computadores 20
11 Conjunto de Instruções 
• Uma instrução é um conjunto de bits devidamente 
codificados que indica ao computador que sequencia de
microoperações ele deve realizar. 
• Instruções são realizadas por semelhança de propósito 
e formato.
• Classificação:
– Instruções de transferência de dados (MOV)
– Instruções Aritméticas e Lógicas (ADD, OR, ...)
– Instruções de Teste e Desvio (JMP, JNZ, ...)
• O conjunto de todas as instruções que um computador 
reconhece e pode executar é chamado de conjunto de 
instruções desse computador.
Arquitetura de Computadores 21
12 Ciclo de Busca-Decodificação-Execução
• Busca-Decodificação-Execução de Instruções
• Busca:
– Copiar o PC para o registrador de endereços da memória (REM)
– Ler uma instrução da memória
– Copiar o registrador de dados da memória (RDM) para o 
registrador de instrução (RI)
– Atualizar o pontador do PC
• Decodificação
– Determinar qual instrução a ser realizada, normalmente 
implementada por lógica combinacional
Arquitetura de Computadores 22
12 Ciclo de Busca-Decodificação-Execução
• Execução:
– Cálculo do endereço dos operandos
– Busca dos operandos na memória
– Seleção da operação da ULA
– Carga nos registradores
– Escrita de operandos na memória
– Atualização do PC para desvios.
Arquitetura de Computadores 23
13 Programação de um Processador
• Linguagem que o processador entende é a linguagem
de máquina.
• Linguagem de máquina é uma linguagem numérica 
(binária) que representa a codificação do conjunto de 
instruções.
• Um programa descrito em linguagem simbólica pode ser 
traduzido em linguagem de máquina para facilitar o 
desenvolvimento dos programas pelo usuário.
• Formato das instruções
Operação Operando1 Operando2 ....
... Conforme a arquitetura de n endereços, teremos n 
operandos.
“Assembly 8086”
Faculdades de Tecnologia 
CARLOS DRUMMOND DE ANDRADE
Tecnologia em Análise e Desenvolvimento de Sistema
Ronaldo Barbato de Oliveira
Arquitetura de Computadores
Introdução à linguagem assembly do 8086
A sintaxe assembly do 8086
• A linguagem montadora não é sensível à letra 
maiúscula ou minúscula
• Para facilitar a compreensão do textodo 
programa, sugere-se:
– uso de letra maiúscula para código;
– uso de letra minúscula para comentários.
Introdução à linguagem assembly do 8086
Declarações (statements):
• Instruções, que são convertidas em código de máquina
• Diretivas, que instruem o montador a realizar 
alguma tarefa específica:
– Alocar espaço de memória para variáveis;
– Criar uma sub-rotina (procedure ou procedimento).
Introdução à linguagem assembly do 8086
• Formato de uma declaração (linha de programa):
[Nome:] [Cod. oper.] [Operando(s)] [;Comentário]
Exemplo:
INICIO: MOV CX,5h ;inicializar contador
Observação:
A separação entre os campos deve ser do tipo 
<espaço> ou <tab>.
Introdução à linguagem assembly do 8086
Campo Nome:
– Pode ser um rótulo de instrução, um nome de sub-rotina, um 
nome de variável, contendo de 1 a 31 caracteres, iniciando por 
uma letra ou um caracter especial e contendo somente letras, 
números e os caracteres especiais ? . @ _ : %
Exemplos: nomes válidos nomes inválidos
LOOP1: DOIS BITS
.TEST 2abc
@caracter A42.25
SOMA_TOTAL4 #33
Observação:
O Montador traduz os nomes por endereços de memória.
Introdução à linguagem assembly do 8086
Campo de Código de Operação:
– Contem o código de operação simbólico (mnemônico)
– No caso de diretivas, contem o código de pseudo-
instrução
Exemplos:
instruções diretivas
MOV .MODEL
ADD .STACK
INC nome PROC
JMP
Introdução à linguagem assembly do 8086
Campo de operandos:
• Instruções podem conter 0, 1 ou 2 operandos no 
8086.
Exemplos:
NOP ; sem operandos: instrui para fazer nada
INC AX ; um operando: soma 1 ao conteúdo de AX
ADD A,2d ; dois operandos: soma 2 ao conteúdo da 
; palavra de memória A
ADD A,2
Introdução à linguagem assembly do 8086
Campo de operandos (cont.):
• No caso de instruções de dois operandos:
– o primeiro, operando destino: registrador ou posição de 
memória onde o resultado será armazenado, o conteúdo 
inicial será modificado;
– o segundo, operando fonte: não modificado pela instrução;
– os operandos são separados por uma vírgula.
• No caso de diretivas, o campo de operandos
contem mais informações acerca da diretiva.
Introdução à linguagem assembly do 8086
Campo de Comentário:
– Um ponto-e-vírgula ( ; ) marca o início deste campo;
– O Montador ignora tudo após o este marcador até o fim 
da linha;
– Comentários são opcionais, mas imprescindíveis.
• OBS.: Uma boa prática de programação é
comentar tudo e incluir a informação acerca da 
idéia por trás da codificação (o algorítmo).
Introdução à linguagem assembly do 8086
Campo de Comentário (cont.):
• Exemplos:
MOV CX,0 ;movimenta 0 para CX (óbvio!)
MOV CX,0 ;CX conta no. de caracteres, 
;inicialmente vale 0
; (linhas em branco: separação)
;
; inicialização dos registradores (linha inteira de comentário)
Introdução à linguagem assembly do 8086
Formato de dados, variáveis e constantes
• Números:
Exemplos:
– binário: 1110101b ou 1110101B
– decimal: 64223 ou 64223d ou 64223D
– hexa: 64223h ou 64223H, 0x64223
Introdução à linguagem assembly do 8086
• Exemplos de números ilegais:
– 1,234 caracter estranho (vírgula)
– FFFFh não começa por número de 0 a 9 difícil distinguir
do nome de uma variável
– 1B4D não termina com h ou H
Introdução à linguagem assembly do 8086
• Caracteres ASCII e strings:
– Caracteres isolados ou strings de caracteres devem estar 
escritos dentro de aspas simples ( ‘ ) ou duplas ( “ ).
Exemplos:
“ A” ou ‘ A ’
‘ola, como vai’
“EXEMPLO”
Introdução à linguagem assembly do 8086
Variáveis: 
• Variável é um nome simbólico para um dado 
atualizável pelo programa.
– Cada variável possui um tipo e é associada a um endereço 
de memória;
– Usa-se pseudo-instruções para definir o tipo da variável;
– O Montador atribui o endereço de memória.
Introdução à linguagem assembly do 8086
PSEUDO-INSTRUÇÃO SIGINIFICADO
DB define byte (8 bits)
DW define word (16 bits, 2 bytes consecutivos)
DD define doubleword (2 palavras, 4 bytes consecutivos)
DQ define quadword (4 palavras, 8 bytes consecutivos)
DT define ten bytes (10 bytes consecutivos)
Introdução à linguagem assembly do 8086
• Definição de variáveis de tipo byte:
Nome DB valor_ inicial
Exemplos:
Alfa DB 0 ;equivale a 00h
A DB 10h
B DB 0150h ;ilegal, por que?
BIT DB ? ;não inicializada
Introdução à linguagem assembly do 8086
• Definição de variáveis de tipo word:
Nome DW valor_inicial
Exemplos:
WORD1 DW 0h ; equivale a 0000h
CONTA Dw 0150h ; OK!, por que?
C DW ? ; não inicializada
WORD1 DW 1234h ; byte baixo 34h, endereço WORD1
; byte alto 12h endereço WORD1+1
Introdução à linguagem assembly do 8086
• Array: sequência de bytes ou words consecutivos na memória
– Armazenar dados relacionados;
– Armazenar caracteres ASCII organizados (ex: texto).
Exemplos:
BYTE_ARRAY DB 10h,20h,30h
WORD_ARRAY DW 1000h,123h,0h,0FFFFh
• Um array pode conter um string de caracteres, sendo 
definido como:
LETRAS DB ‘abC’ ; e´ equivalente aos caracteres ASCII
LETRAS DB 61h,62h,43h ;depende se maiúscula ou 
; minúscula
Introdução à linguagem assembly do 8086
• Combinação de caracteres e números numa mesma 
definição:
MENSAGEM DB ‘Alo!’, 0Ah,0Dh,’$’
OBS.: Para alguns serrviços da BIOS o caracter '$' 
marca o fim de um string de caracteres (e não é
exibido).
Introdução à linguagem assembly do 8086
• Constantes: é um nome simbólico para um dado de valor constante, que seja muito utilizado num programa.
– Para atribuir um nome a uma constante, utiliza-se a pseudo-instrução EQU (equates -> igual a) e a sintaxe:
Nome EQU valor_da_constante
Exemplos:
LF EQU 0Ah ;caracter Line Feed como LF
CR EQU 0Dh ;caracter Carriage return como CR
LINHA1 EQU ‘Digite seu nome completo’
MENSAGEM DB LINHA1,LF,CR
Observação: Constantes não geram código de máquina e nem “ocupam” espaço de memória em tempo de execução.
Introdução à linguagem assembly do 8086
• Algumas instruções básicas do 8086
– MOV destino, fonte
• Usada para transferir dados entre:
– registrador e registrador
– registrador e uma posição de memória
– mover um número diretamente para um registrador ou 
posição de memória
Introdução à linguagem assembly do 8086
• Instrução MOV
Operando Operando destino
fonte
Registrador Registrador Posição
dados segmento memória
Registrador
Dados sim sim sim
Registrador sim não sim
Segmento 
Posição sim sim não 
memória
Constante sim não sim
Introdução à linguagem assembly do 8086
• Exemplos de instruções MOV válidas:
MOV AX,WORD1 ;movimenta o conteúdo da posição de 
;memória WORD1 para o registrador AX
MOV AH,’A’ ;transfere o caracter ASCII ‘A’ para AH
MOV AH,41h ;idem anterior: 41h corresponde ao caracter A
MOV AH,BL ;move o conteúdo do byte baixo de BX 
;o byte alto de AX
MOV AX,CS ;transfere cópia do conteúdo de CS para AX
Introdução à linguagem assembly do 8086
• MOV AX,WORD1
• Obs: para a instrução MOV não é permitido operar de posição de memória para posição de memória diretamente, por motivos técnicos do 8086. 
Antes Depois
AX AX
0006h 8FFFh
WORD1 WORD1
8FFFh 8FFFh
Introdução à linguagem assembly do 8086
• Por exemplo:
MOV WORD1,WORD2 ;instrução inválida. Esta restrição é
;contornada como segue
;
MOV AX,WORD2 ;primeiro o conteúdo de WORD2 vai para AX
MOV WORD1,AX ;depois, o conteúdo de AX é movido para a
;posição de memória WORD1
Introdução à linguagem assembly do 8086
XCHG destino, fonte
• Usada para troca de dados (nos dois sentidos) 
entre:
– registrador e registrador
– registrador e uma posição de memória
– não é permitido trocas diretas entre posições de memória
Introdução àlinguagem assembly do 8086
• XCHG destino, fonte
Operando Operando destino
fonte
Registrador Posição
dados memória
Registrador
Dados sim sim
Registrador não não
Segmento 
Posição sim não
memória
Introdução à linguagem assembly do 8086
• Exemplos de instruções válidas:
XCHG AX, WORD1 ;troca o conteúdo da posição de memória 
; WORD1 com o do registrador AX
XCHG AH, BL ;troca o conteúdo do byte baixo de BX 
;com o do byte alto de AX
XCHG AX,BX
Antes Depois
AX BX
0006h FFFFh
AX BX
FFFFh 0006h
Introdução à linguagem assembly do 8086
• ADD destino,fonte
• SUB destino,fonte
– Usadas para adicionar (ou subtrair) dados entre:
• registrador e registrador
• registrador e uma posição de memória
• adicionar (ou subtrair) um número diretamente a (de) um 
registrador ou posição de memória
Operando Operando destino
fonte
Registrador Posição
dados memória
Registrador
Dados sim sim
Posição sim não
memória 
Constante sim sim
Introdução à linguagem assembly do 8086
• Exemplos de instruções válidas:
ADD AX,BX ;soma o conteúdo de BX com AX, resultado em AX
ADD AX,WORD1 ;soma o conteúdo da posição de memória 
;WORD1 a AX e resultado em AX
SUB WORD2,AX ;subtrai o conteúdo de AX do conteúdo da
;posição de memória WORD2, resultado em 
;WORD2
SUB BL,5 ;subtrai a quantidade 5 decimal do conteúdo
; de BL
Introdução à linguagem assembly do 8086
Observações: 
ADD BYTE1,BYTE2 ;instrução inválida esta restrição 
; é contornada como segue
MOV AL,BYTE2 ;primeiro o conteúdo de BYTE2 vai para AL
ADD BYTE1,AL ;depois, o conteúdo de AL é somado ao da
; posição de memória BYTE1, resultado final
; em BYTE1
O resultado de SUB, se for negativo, estará armazenado no 
registrador destino em complemento de 2.
Introdução à linguagem assembly do 8086
• INC destino
• DEC destino
– Usadas para adicionar 1 (incrementar) ou subtrair 1 
(decrementar) ao/do conteúdo de:
• um registrador;
• uma posição de memória.
Exemplos:
INC CX ;incrementa o conteúdo de CX
INC WORD1 ;incrementa conteúdo posição memória WORD1 
DEC BYTE2 ;decrementa conteúdo posição de memória BYTE2
DEC CL ;decrementa o conteúdo de CL (byte baixo de CX)
Introdução à linguagem assembly do 8086
• NEG destino
– Usada para substituir o conteúdo destino pelo seu 
complemento de 2, operando sobre:
• um registrador;
• uma posição de memória.
Exemplos:
NEG BX ; gera o complemento de 2 
; do conteúdo de BX
NEG WORD1 ; idem, no conteúdo da posição de
; memória WORD1 
Introdução à linguagem assembly do 8086
• Tradução de expressões matemáticas em Linguagem 
de Alto Nível para Linguagem Montadora
Exemplo1: B = A
MOV AX,A ; transfere o conteúdo da posição de 
; memória A para AX e
MOV B,AX ; transfere AX para a posição de 
; memória B
Introdução à linguagem assembly do 8086
Exemplo 2: A = 5 - A
NEG A ; gera o complemento de 2 da posição
; de memória A e
ADD A,5 ; realiza (-A) + 5, que equivale a 5 - A
Exemplo 3: A = B - 2A
MOV AX,B ; AX contem a variável B
SUB AX,A ; AX contem B - A
SUB AX,A ; AX contem B - 2A
MOV A,AX ; movimenta o resultado para A
Estrutura de um programa em Linguagem 
Montadora
• Segmento de dados
– Contem a definição e declaração das variáveis.
– Pode-se também fazer a atribuição de símbolos para 
constantes.
Sintaxe: .DATA
Exemplo:
.DATA
WORD1 DW A8h
BYTE1 DB 5
MENSAGEM DB ‘Isto e uma mensagem’
LF EQU 0Ah
Estrutura de um programa em Linguagem 
Montadora
• Segmento de pilha (stack segment)
– Reserva um bloco de posições de memória consecutivas para armazenar a pilha.
– Deve ter espaço suficiente para suportar a pilha no seu máximo tamanho.
Sintaxe: .STACK tamanho
Exemplo:
.STACK 100h ; reserva 100h bytes para a área
; de pilha, um tamanho razoável
; para a maioria das aplicações não
; recursivas
Estrutura de um programa em Linguagem 
Montadora
• Segmento de código
– Contem propriamente as instruções do programa.
– Dentro do segmento de código, as instruções são 
organizadas em procedimentos ou sub-rotinas.
Sintaxe: .CODE
Estrutura de um programa em Linguagem 
Montadora
Exemplo:
.CODE
nome PROC
;
;corpo da procedure -> instruções
;
nome ENDP
;
;outras procedures seguem abaixo, se existirem
onde:
nome -> identificação da procedure
PROC e ENDP -> pseudo-instruções usadas para delimitar a procedure
para um programa simples, não há necessidade de se definir a procedure.
Estrutura de um programa em Linguagem 
Montadora
Exemplo de uma estrutura de programa assembly completa
TITLE nome_do_programa
.MODEL SMALL
.STACK 100h
.DATA
;
;definição dos dados: variáveis e constantes
;
.CODE
EXEMPLO PROC
;
;seqüência de instruções
;
EXEMPLO ENDP
;
;segue outras procedures
;
END EXEMPLO
Obs: 
se não houver definição de procedure, usa-se apenas END.
Introdução à linguagem assembly do 8086
Instruções de entrada e saída
IN e OUT -> instruções Assembly para acessar portas de 
E/S para periféricos
Não são utilizadas na maioria das aplicações:
os endereços das portas de E/S variam conforme o modelo
do PC é mais fácil utilizar o SO (DOS) ou o BIOS para 
Funções de E/S
Para acessar as rotinas de E/S do BIOS ou DOS 
utiliza-se a instrução:
INT número_de_interrupção
Introdução à linguagem assembly do 8086
Observação: 
Em uma chamada do BIOS (ou função do DOS) o 
programa em curso é interrompido, passando o 
controle para o DOS, que realiza a operação de E/S 
e retorna o controle para o programa.
Exemplo:
INT 21h ; acessa um grande número de funções 
; de E/S do DOS
Introdução à linguagem assembly do 8086
• Algumas funções DOS de E/S
Função 1h: Entrada de um caracter simples pelo teclado
Acesso: AH = 1h
Resultado: AL = código ASCII do caracter digitado no
teclado
Função 2h: Exibição de caracter simples no monitor de vídeo
Acesso: AH = 2h
DL = código ASCII do caracter a exibir
Resultado: exibição na tela do monitor
Introdução à linguagem assembly do 8086
Exemplos:
Trecho padrão de programa para providenciar
a entrada de um caracter ASCII pelo teclado:
MOV AH,1h ;prepara para entrar caracter pelo
; teclado o processador espera até
; que o usuário digite o caracter
; desejado
INT 21h ; após a digitação, caracter ASCII 
; em AL. Se um caracter não-ASCII
; for digitado, AL = 0h
Obs: o caracter teclado também aparece no monitor (eco), por causa do DOS. 
Instruções de controle de fluxo
Instruções de laço (loop) e de salto (jump) permitem que:
– o programa "tome" certas decisões, alterando seu curso;
– certas partes de um programa sejam repetidas um número 
controlado de vezes.
Saltos Condicionais
Jxxx rótulo_de_destino
xxx define uma condição dependente de algum dos Flags de 
Estado
Se a condição xxx é verdadeira: 
- a próxima instrução a ser executada é aquela definida pelo 
rótulo_de_destino; 
- a CPU ajusta o registrador IP para apontar para a posição de 
memória 
dada por rótulo_de_destino.
Se a condição xxx é falsa: 
- a próxima instrução é aquela que imediatamente segue o 
salto.
Saltos Condicionais
Faixa de endereçamento do rótulo_de_destino:
- deve preceder Jxxx não mais do que 126 bytes;
- deve suceder Jxxx não mais do que 127 bytes.
Há três classes de saltos condicionais:
- saltos sinalizados: dependem de um resultado na forma de um
número sinalizado;
- saltos não-sinalizados: dependem de um resultado na forma de 
um número não-sinalizado;
- saltos de Flag simples: que dependem do status de algum dos 
Flags.
Obs.: A instrução Jxxx não altera nenhum Flag.
Saltos Condicionais
Tipos de saltos condicionais
Saltos sinalizados 
Símbolo Descrição Condições 
JG ou 
JNLEsalto se maior do que OU 
salto se não menor do que ou igual a 
ZF = 0 E 
SF = OF 
JGE ou 
JNL 
salto se maior do que ou igual a OU 
salto se não menor do que 
SF = OF 
JL ou 
JNGE 
salto se menor do que OU 
salto se não maior do que ou igual a 
SF ≠ OF 
JLE ou 
JNG 
salto se menor do que ou igual a OU 
salto se não maior do que 
ZF = 1 OU 
SF ≠ OF 
 
Saltos Condicionais
Tipos de saltos condicionais
Saltos não-sinalizados 
Símbolo Descrição Condições 
JÁ ou 
JNBE 
salto se acima de OU 
salto se não abaixo de ou igual a 
CF = 0 E 
ZF = 0 
JAE ou 
JNB 
salto se acima de ou igual a OU 
salto se não abaixo de 
CF = 0 
JB ou 
JNAE 
salto se abaixo de OU 
salto se não acima de ou igual a 
CF = 1 
JBE ou 
JNA 
salto se abaixo de ou igual a OU 
salto se não acima de 
CF = 1 OU 
ZF = 1 
 
Saltos Condicionais
Tipos de saltos condicionais
Saltos de Flag simples 
Símbolo Descrição Condições 
JE ou 
JZ 
salto se igual OU 
salto se igual a zero 
ZF = 1 
JNE ou 
JNZ 
salto se não igual OU 
salto se não igual a zero 
ZF = 0 
JC salto se há VAI-UM (carry) CF = 1 
JNC salto se não há VAI-UM (not carry) CF = 0 
JO salto se há overflow OF = 1 
JNO salto se não há overflow OF = 0 
JS salto se o sinal é negativo SF = 1 
JNS salto se o sinal é não-negativo (+) SF = 0 
JP ou JPE salto se a paridade é PAR (even) PF = 1 
JNP ou JPO salto se a paridade é IMPAR (odd) PF = 0 
 
Saltos Condicionais
Diferença entre Saltos sinalizados e não-sinalizados
a) Trecho de programa que supõe quantidades não-sinalizadas:
;supondo que AX contem 7FFFh e BX contem 8000h
...
CMP AX,BX
JA PT2 ;o salto não ocorre porque 7FFFh < 8000h
...
...
PT2: MOV ... ;continuação do programa
Saltos Condicionais
Diferença entre Saltos sinalizados e não-sinalizados
b) Trecho de programa que supõe quantidades sinalizadas:
;supondo que AX contem 7FFFh e BX contem 8000h
...
CMP AX,BX
JG PT2 ;o salto ocorre porque 7FFFh (+) > 8000h (-)
...
...
PT2: MOV ... ;continuação do programa
Salto Condicionais
Exemplo: Supondo que AX e BX contenham números sinalizados, 
escreva um trecho de programa que coloque o maior deles em 
CX.
...
MOV CX,AX ;AX já é pressuposto ser o maior deles
CMP AX,BX
JNL ABAIXO ;poderia ser também JGE ABAIXO
MOV CX,BX ;caso BX seja de fato o maior deles
ABAIXO: ... ;continuação do programa
...
Salto Incondicional
JMP rótulo_de_destino
Rótulo_de_destino é uma posição no programa, no mesmo 
segmento de código onde JMP aparece
Não há restrição de faixa de endereçamento como em JXXX
JMP pode ajudar a solucionar o problema de faixa de 
endereçamento das instruções JXXX
Como?
Salto Incondicional
Exemplo: trecho utilizando JMP para resolver a restrição no 
alcance de JXXX
TOPO: ...
; mais do que 126 bytes de instruções: limitação 
; para JXXX
...
; corpo de algum laço
;
DEC CX ; se Zero termina o laço
JZ CONTINUA
JMP TOPO
CONTINUA: MOV ... ; o programa continua
...
Instrução de laço
Repetição
LOOP rótulo_de_destino
Tem como contador implícito o registrador CX, que deve ser 
inicializado antes do laço.
Salta para rótulo_de_destino enquanto o conteúdo de CX não for zero.
Quando CX = 0, a próxima instrução após LOOP será executada.
CX é decrementado automaticamente quando LOOP é executada.
Nenhum FLAG é afetado.
Instrução de laço
Exemplo de instruções válidas:
LOOP PT1
LOOP TOPO
LOOP RETORNO
Obs: são equivalentes as seqüências:
MOV CX, (valor_inicial) MOV CX, (valor_inicial)
TOPO: ... TOPO: ...
...
...
LOOP TOPO DEC CX
JNZ TOPO
Instrução de laço
2) FOR loop
Em linguagem de alto nível:
FOR (número_de_vezes) DO
(seqüência de instruções)
END_FOR
Instrução de laço
Em linguagem de alto nível:
FOR (80 vezes) DO
(exibir “ * “ )
END_FOR
Em linguagem de montagem:
...
;for 80 vezes
MOV CX,80d
MOV AH,2h
MOV DL,” * ”
;do
TOPO: INT 21h
LOOP TOPO
;end_for
...
Instrução de laço
3) WHILE loop
Em linguagem de alto nível:
WHILE(condição_verdadeira) DO
(seqüência de instruções)
END_WHILE
Instrução de laço
Em linguagem de alto nível:
WHILE (caracter diferente de CR?) DO
(ler caracter do teclado e armazená-lo)
(contador = contador +1)
END_WHILE
Em linguagem de montagem:
...
MOV DX,0h ; inicialização
MOV AH,1h
INT 21h
;while
LOOP: CMP AL,0Dh ; é o caracter CR?
JE FIM ; salto quando caracter é igual a CR
MOV AL, (algum lugar) ; salvando o caracter lido
INC DX ; conta número de caracteres
INT 21h
JMP LOOP ; fecha o loop WHILE
;end_while
FIM:
Instrução de laço
4) REPEAT loop
Em linguagem de alto nível:
REPEAT
(seqüência de instruções)
UNTIL (condição_verdadeira)
Exemplo: Ler caracteres ASCII do teclado, contando sua 
quantidade, até que seja lido o caracter Carriage Return
(CR).
Instrução de laço
Em linguagem de alto nível:
REPEAT
(ler caracter do teclado e armazená-lo)
(contador = contador + 1)
UNTIL (caracter igual a CR)
Em linguagem de montagem:
...
MOV DX,0h ;inicialização
MOV AH,1h
;repeat
LOOP: INT 21h
MOV AL, (algum lugar) ;salvando o caracter lido
INC DX ;conta número de caracteres
CMP AL,0Dh ;é o caracter CR?
JNE LOOP ;salto enquanto caracter não é
CR
;until
...
Exemplo: Exibição de na tela de todos os caracteres ASCII
TITLE EXIBICAO DE CARACTERES ASCII
.MODEL SMALL
.STACK 100H
.CODE
;inicializacao de alguns registradores
;
MOV AH,2 ;funcao DOS para exibicao de caracter
MOV CX,256 ;contador com o numero total de caracteres
MOV DL,00H ;DL inicializado com o primeiro ASCII
;
;definicao de um processo repetitivo de 256 vezes
;
PRINT_LOOP:
INT 21H ;exibir caracter na tela
INC DL ;incrementa o caracter ASCII
DEC CX ;decrementa o contador
JNZ PRINT_LOOP ;continua exibindo enquanto CX nao for 0
;
;quando CX = 0, o programa quebra a sequencia do loop ;saida para o DOS
;
MOV AH,4CH
INT 21H
END
Instrução de comparação
CMP destino,fonte
CMP (Compare) compara os conteúdos destino e fonte, que podem ser:
· registrador e registrador
· registrador e uma posição de memória
· um número diretamente como operando fonte
Combinações legais de operandos
 Operando destino 
Operando fonte Registrador de 
dados 
Posição de 
memória 
Reg. de dados sim sim 
Posição de memória sim não 
Constante sim sim 
Instrução de comparação
CMP calcula a subtração: (destino) - (fonte)
O resultado não é armazenado, porém Todos os Flags de Estado são 
afetados.
Exemplos de instruções válidas:
CMP DX,BX ;compara os conteúdos de DX e BX
CMP AX,[WORD1] ;compara o conteúdo do registrador AX com o da
;posição de memória WORD1 
CMP AH,’A’ ;compara o conteúdo de AH com o caracter ASCII ‘A’
“Instruções de Multiplicação, Divisão
e Bits de Status ”
Instruções de Multiplicação
MUL fonte
IMUL fonte
• MUL (multiply) -> usada com números em representação 
não-sinalizada;
• IMUL (integer multiply) -> usada com números sinalizados.
• Multiplicação com números em formato byte:
– registradores de 8 bits e variáveis de tipo DB;
– segundo operando é assumido em AL;
– resultado (destino) pode atingir 16 bits e se encontra em 
AX.
Instruções de Multiplicação
• Multiplicação com números em formato word:
– registradores de 16 bits e variáveis de tipo DW
– segundo operando é assumido em AX
– resultado pode atingir 32 bits (tamanho doubleword) e se 
encontra em:
• DX -> 16 bits mais significativos (high word)

Outros materiais