Organização de Computadores
Paulo Maciel
Arquitetura de Computadores



Introdu₤₧o
Resumo Histórico
Componentes computador
Componentes de um
processador
Opera₤ões de um
processador
Sistema de Interconex₧o
Estruturas Estáticas e
Dinâmicas
Barramentos
Memória Interna
Memória Semicondutora
Memória Cache

Memória Externa
Disco Magn₫tico
CD-ROM
Fita Magn₫tica

Dispositivos de Entrada e Saída
I/O Programado
Tratado por Interrup₤₧o
DMA
Canais
SCSI
Arquitetura de Computadores

Suporte do Sistema Operacional
Vis₧o Geral de um Sistema
Operacional
Escalonamento
Gerenciamento de Memória

Unidade de Processamento
Componentes
Via de Dados
Unidade de Controle
Aritm₫tica
Controle Hardwired
Controle Microprogramado
RISC versus CISC
Arquitetura de Computadores

Arquitetura X86
Modos de opera₤₧o
Modelo de software
Descri₤₧o funcional
Opera₤ões sobre o
barramento
Pipelining
Processador Super-escalar
Previs₧o de desvio


 Memória cache
 Cache de instru₤₧o e de

dados
 Unidade de Ponto Flutuante

Software
Modos de endere₤amento
de dados e programa
Instru₤ões
Introdu₤₧o à
programa₤₧o
Interrup₤ões
Classifica₤₧o
Processamento de
Interrup₤ões
Macroassembly
Programando com Servi₤os
do Sistema Operacional
Arquitetura de Computadores
Material Didático:
Computer Organization and Architecture
Autor: William Stallings
Editora : Prentice-Hall, Inc
The Pentium Microprocessosr
Autor - James L. Antonakos
Editora: Prentice-Hall, Inc.
Outros Livros
Computadores Mecânicos

Máquina de Pascal

Máquina Analítica
– Opera₤ões:Soma e
– Componentes:
Subtra₤₧o
– Manivela
» Armazenamento
» Engenho
» Se₤₧o de Entrada
» Se₤₧o de Saída
– Cartões Perfurados
– Charles Babbage (17921871)
– Ada Lovelace
Blaise Pascal (1623-1662)
Computador El₫trico

Advento da Energia El₫trica

Desenvolvimento da tecnologia
eletrot₫cnica
– dispositivos eletromagn₫ticos
– rel₫s

Automatiza₤₧o dos processos
mecânicos

Máquinas de Aiken
– Rel₫s
– Dígitos decimais
– Fita de papel perfurado
Computador Eletrônico
– Máquina Enigma
COLOSSUS (1943)
» 1° computador eletrônico
Alan Turing
1ª Gera₤₧o (1945-1955)
– ENIAC
» Tecnologia - Válvulas e rel₫s
» Arquitetura: 20 registradores
10 digitos decimais
» Programa₤₧o: Chaves
Jonh Mauchley
– UNIVAC
– IBM 7090
1ª Gera₤₧o (1945-1955)

EDSAC - Jonh von Neumann
– Tecnologia - Válvulas e rel₫s
– Arquitetura:
» Componentes
• Memória
• Unidade lógico-aritm₫tica
• Unidade de controle
• Equipamentos de entrada
• Equipamentos de saída
» Aritm₫tica binária
Arquitetura de von Neumann
Memória
Unidade
de
Controle
– Programa em linguagem de
baixo nível armazenado em
memória
Entrada
ULA
Acumulador
Saída
Camadas de um Sistema
Computacional
Aplica₤ões

Linguagens

Sistemas Operacionais

Máquinas
SO
Máquina
1ª Gera₤₧o (1945-1955)
Nesta ₫poca os
conceitos de linguagem
de programa₤₧o e de
sistemas operacionias
n₧o estavam claros

Máquinas
– UNIVAC
– IBM 7090
 Linguagens
Um único grupo de
 Código Absoluto
pessoas projetava,
Fios e Paineis
construia, programava,
operava e efetuava
manuten₤₧o das máquinas
2ª Gera₤₧o (1955 - 1965)

Advento do Transistor
– redu₤₧o de dimensões
– redu₤₧o do consumo de
pot₨ncia
– possibilita a constru₤₧o de
equipamentos mais complexos

TX-0
» 1° Computador transistorizado
– MIT
 PDP-1
– Metade do desempenho do
IBM 7090
– ~5% o valor do IBM 7090
– DEC
IBM 1401
 IBM 7094

2ª Gera₤₧o (1955 - 1965)

 Linguagens de Alto Nível
Sistema Operacional Batch
FORTRAN
– Fortran Monitor System
ALGOL
– IBSYS

Distin₤₧o clara das atividades e
grupos de pessoas na execu₤₧o de
tarefas
3ª Gera₤₧o (1965 - 1980)

Circuitos Integrados
– redu₤₧o de dimensões
– redu₤₧o do consumo de
pot₨ncia
– possibilita a constru₤₧o de
equipamentos mais complexos
– melhoria de desempenho

IBM System/360
– Família de Computadores com
diferentes desempenhos, precos,
mas compatíveis.

DEC PDP-11
– Minicomputador de 16 bits.

Microprocessadores
– INTEL

Microprocessadores
» 4004,8008,8080,8085,8086
– ZILOG
» Z80
– Motorola
» 68000
3ª Gera₤₧o (1965 - 1980)


Multiprograma₤₧o
Timesharing

Simula

Pascal

C

ML

Smalltalk
4ª Gera₤₧o (1980 - ?)

Very Large Scale Integration
Computadores
– Cray
– SUN - 20
– IBM SP2
Computadores Pessoais

Workstations
Processadores
– Intel PENTIUM
– ALPHA Digital
– PowerPC
4ª Gera₤₧o (1980 - ?)
Sistemas Operacionais para

C++

VisualBasic
Redes
Sistemas Operacionais
(Programa₤₧o Visual)
Distribuídos

Unix, Windows NT
Java
(Aplica₤ões para WEB)
Arquitetura de Computadores
 Abordagens
de Hardware e de Software
Códigos de
Instru₤ões
Dados
Seqü₨ncia de
Fun₤ões Aritm₫tica
e Lógicas
Interpretador
de
Instru₤ões
Resultados
Programa₤₧o em Hardware
Controle
Dados
Fun₤ões Aritm₫tica Resultados
e Lógicas de
Propósito Geral
Programa₤₧o em Software
Arquitetura de Computadores
 Diagrama
I/O Paralelo
Circuitos de
Temporiza₤₧o
em Bloco
I/O Serial
Circuitos de
Interrup₤₧o
CPU
Memória
Sistema de Memória

Hierárquia
– Interna
» Registradores
» Cache
» Memória Principal
– Externa
» Disco Magn₫tico
» Fita

Desempenho × Custo

Princípio da Localidade
Reg.
Memória Principal
Memória de Massa
Processador Hipot₫tico
Barramento de Dados
Data buffer
Reg. Aux.
ALU
Reg. Inst
A
•Desempenho
•Espa₤o de endere₤amento
Flags
Reg. Uso
Geral
Dec. Inst
Unidade de Controle
.......................
Latch End.
Barramento de Controle
Barramento de Endere₤os
Arquitetura de Computadores
 Ciclo
–
–
–
–
–
de Instrução
Ciclo de Busca
Ciclo de Decodificação
Ciclo de Leitura
Ciclo de Execução
Ciclo de Escrita
Arquitetura de Computadores
 Formato
Genérico de Uma Instrução
Código da Instrução Dado, Endereço ou Modo de Endereçamento

Exemplos:
– mov al,01h
– mov al,[0400]
– mov al,[bx+si]
Arquitetura de Computadores
 Diagrama
de Estado do Ciclo de Instrução
Lê
Operand.
Busca
Inst.
Escrev.
Operand.
Múltiplos
Resultados
Múltiplos
Operandos
Cal. End.
Prox. Inst.
Dec.
Inst.
Cal. End.
Operand.
Instrução Finalizada. Busca
Nova Instrução
Exec.
Operaç.
Retorna para string ou vetor
Cal. End.
Operand.
Arquitetura de Computadores
 Interrupções
–
–
–
–
Internas
- erro de paridade, divisão por zero
Externas
- relógio, teclado
Mascarável - pode ser inibida
Não Mascarável - não pode ser inibida
Arquitetura de Computadores
 Interrupções
– Hardware
– Software
na Arquitetura x86
Internas
Externas
Mascarável
Não-Mascarável
Sistema Operacional
Usuário
Arquitetura de Computadores
Programa do Usuário
1
2
i
i+1
m
Servi,co de Interrupção
Arquitetura de Computadores
 Diagrama
de Estado do Ciclo de Instrução
com Interrupção
L₨
Operand.
Busca
Inst.
Escrev.
Operand.
Múltiplos
Resultados
Múltiplos
Operandos
Cal. End.
Prox. Inst.
Dec.
Inst.
Cal. End.
Operand.
Instrução Finalizada. Busca
Nova Instrução
Exec.
Operaç.
Retorna para string ou vetor
Verif. se
há interrp.
Sem
Interrup.
Cal. End.
Operand.
Interrupção
Arquitetura de Computadores
Múltiplas Interrupções
Programa do Usuário
Serviço da Interrupção X
1
2
i
i+1
j
j+1
m
Serviço da Interrupção Y
Arquitetura de Computadores
Interrupções Aninhadas
Programa do Usuário
Serviço da Interrupão X
1
2
J
j+1
i
i+1
Serviço da Interrupção Y
m
Arquitetura de Computadores
•Desempenho
•Espaço de endereçamento
Barramento
I/O
I/O
Dados
Endereço
Controle
CPU
Memória
Arquitetura de Computadores
Barramento

Linhas de Controle Típicas
Escrita
em memória
Leitura de memória
Escrita em I/O
Leitura de I/O
Solicitação de Barramento
Reconhecimento da Solicitação do Barramento
Solicitação de Interrupção
Reconhecimento de Interrupção
Clock
Reset
Arquitetura de Computadores

Barramento Hierárquico
Barr. Local
Cache
CPU
Controlador
Locoal de I/O
Memória
Barr. do Sistema
Interface
de Expansão
Modem
I/O Serial
SCSI
Network
Expansão do Bus
Arquitetura de Computadores
Elementos de Projeto de um Barramento

Tipo

Multiplexado
 Dedicado
Vantagem
I/O Paralelo
•Menos linhas
•Possível menor
Custo
I/O Serial
Desvantagem
CPU
Memória
•Circuitos dos
módulos é
mais complexo
•Desempenho
Arquitetura de Computadores
Elementos de Projeto de um Barramento

Tipo

Multiplexado
 Dedicado
Vantagem
I/O Paralelo
I/O Serial
Barr. de I/O
Desvantagem
•Mais linhas
•Custo
Adaptador
Adaptador
Barr. local
CPU
•Menor contenção
•Desempenho
Memória
Arquitetura de Computadores
Elementos de Projeto de um Barramento

Método de Arbitragem
Centralizado
Distribuído
Req0
LM0
Req1
P1
P0
Árbitro
Gnt0
SM
Gnt1
I/O
LM1
Arquitetura de Computadores
Elementos de Projeto de um Barramento

Método de Arbitragem
Centralizado
Distribuído
I/O
SM
Term.
Barr.
Term.
Busy
BPO Barr.
BPI
LM0
BPI
BPO
P0
LM1
BPI
BPO
P1
LM2
P2
Arquitetura de Computadores
Elementos de Projeto de um Barramento

Temporização
AD bus
Síncrono
mrq
Assíncrono
CPU
rd
clk
clk
mrq
Circuitos de
Temporiza₤₧o
rd
add
data
Memória
Válido
P/ CPU
Leitura de Memória
Arquitetura de Computadores
Elementos de Projeto de um Barramento

Temporização
AD bus
Síncrono
Assíncrono
msyn
data
CPU
rd
ssyn
rd
add
msyn
Válido
P/ CPU
ssyn
Leitura de Memória
Memória
Arquitetura de Computadores
Elementos de Projeto de um Barramento

Largura

Baramento de Dados : desempenho

Barramento de Endereço: espaço de endereçamento
Arquitetura de Computadores

PCI - Peripherical Component Interconnect
Barr. Local
CPU
Ponte/
Controlador de
Memória
DRAM
Cache
Vídeo
Contolador de
Vídeo
Network
Áudio
SCSI
Barramento PCI
Ponte para
Expansão
Dispositivos I/O
Expansão do Bus
Arquitetura de Computadores

PCI - Peripherical Component Interconnect

Estrutura
Pinos de Sistema (reset e clock)
Pinos de Dados e Endereços (32 linhas multiplexadas de dados e
endereços, erro de paridade)
Pinos de Controle de Interface (Coodernação e controle de
transações entre dispositivos - IRDY, TRDY, IDSEL, DEVSEL)
Pinos de Arbitragem - (Req, GNT)
Pinos de Erro - (PERR,SERR)
Pinos de Interrupção - (INTA,INTB,INTC,INTD)
Pinos de Suporte à Cache - (SOB,SDONE)
Pinos de Extensão para Barr. de 64 Bits - (Linhas de endereço e

dados multipliexadas, linhas de erro etc)
Pinos JTAG - ( Procedimentos de teste definidos no padrão IEEE 1149.1)

Arquitetura de Computadores

PCI - Peripherical Component Interconnect

Comandos
Reconhecimento de Interrupção
Ciclo Especial - (Utilizado por um iniciador para enviar comando

para mais de um destino ao memo tempo)
Leitura e Escrita de I/O
Leitura de Memória

Leitura
Leitura de Linha
Leitura Múltipla

Escrita em Memória
Escrita em Memória com Invalidação
Leitura de Configuração de Dispositivo
Escrita de Configuração de Dispositivo
Ciclo de Endereçamento Dual - (Endereçamento de 64 bits)

Sistema de Memória

Hierárquia
– Registradores
– Cache
– Memória Principal
• Memória Interna
– Disco Magnético
– CDROM
• Memória Externa
– Fita
• Memória Off-line
Sistema de Memória
Memória Principal - semicondutora Volateídade Categoria
Volátil
Tipo
Apagamento Escrita
E/L
RAM
Elétrico
Elétrico
Só leitura
ROM
Ñ é Possível
Máscara
PROM
Ñ volátil
Elétrico
Quase só
EPROM
UV
de leitura
EEPROM Elétrico
Sistema de Memória

Vcc
Memória ROM
Vcc
An-1
Dm-1
A0
nm
ROM
A0
CS
Lógica
de
Decod.
D0
Diagrama em Bloco
Vcc
An-1
CS
D0
D1
Estrutura Interna
D m-1
Sistema de Memória

Vcc
Memória PROM
Fusível
Vcc
An-1
Dm-1
A0
nm
PROM
A0
CS
Lógica
de
Decod.
D0
Diagrama em Bloco
Vcc
An-1
CS
D0
D1
Estrutura Interna
D m-1
Sistema de Memória

Memória EPROM
An-1
Entradas
CS OE/Vpp
Saídas
Ler/
Verificar
Saída
Desabilitada
VL
VL
dados_saída
VL
VH
Alta Imp.
Standby
VH X
Alta Imp.
Programa
VL VPP
Dados_entrada
Dm-1
nm
EPROM
A0
Modo
OE/
CS Vpp D0
Diagrama em Bloco
Sistema de Memória

Memória EEPROM
An-1
A0
Dm-1
Diagrama em Bloco
Entradas
CS OE
WE
Saídas
Ler
VL
Escreve
VL VH
VL Dados_ent.
Standby
VH X
X
A0
nm
EEPROM
WE CS OE D0
Modo
VL
VH Dados_saída
An-1
Alta imp.
Sistema de Memória

Ent_ Dados
Memória RAM Estática
Célula
An-1
A0
RW
Dm-1
A0
Diagrama em Bloco
An-1
Buffer de Saída
A0
Lógica
de
Decod.
nm
RAM
CS D0
R/W
Registradores
An-1
Buffer de Entrada
Saída_Dados
CS
Sistema de Memória

Memória RAM Estática
Célula
Vdd
Q1
Q2
A0
An-1
Q3
Ent_ Dados
R/W
Buffer de Saída
A0
Lógica
de
Decod.
Registradores
An-1
Q4
Buffer de Entrada
Célula
Saída_Dados
CS
Sistema de Memória

Ent_ Dados
Memória RAM Dinâmica
R/W
Célula
Ak-1/An-1
Din
n  1 Dout
RAM
A0/Ak
A0
RW RAS CAS
An-1
A0
Lógica
de
Decod.
Matrix
An-1
Diagrama em Bloco
Saída_Dados
CS
Memória Cache

Princípio da Localidade
– Instruções
Processador
Cache
– Dados

Operação
Next:
MOV CX,1000
SUB AX,AX
ADD AX,[SI]
MOV [SI],AX
INC SI
LOOP Next
Memória
Memória Cache

Princípio da Localidade
– Tacc=HitRate  Tcache+(1- HitRate) 
(Tcache+Tmem)
Processador
– Tcache=10 ns
– Tmem= 70 ns
– HitRate= 0,9
Cache
Memória
Tacc= 17 ns
Memória Cache

Política de Busca
– Demanda
» Busca uma linha i
Define quando e quais
informações buscar na
CACHE
quando esta se faz
necessário
– Pré-busca
» Busca a linha i+1
quando a linha i for
referida
Memória Cache

Política de Escrita
– Writethrough
» Garante consistência dos
Define quando uma palavra
deve ser alterada na
memória principal.
dados
» Aumenta o tráfego no
barramento
– Writeback
» Reduz o tráfego no
barramento
» Necessita de mecanismos
para manutenção de
consistência
Memória Cache

Política de Substituição
Define como uma linha da
memória CACHE deve ser
substituída.
– RAND - Aleatório
– FIFO - First in First Out
– LRU - Least Recently Used
Memória Cache
Organização

Mapeamento Direto
Tag
Linha
20
7
Endereço de 32 bits
5
– Vantagem
Simplicidade do Hardware
Algoritmo de Substituição ₫
simples
– Desvantagem
Não é flexível
Diversos blocos de memória são
mapeados na mesma linha da
CACHE
TAG
Dado
0
TAG
Dado
1
.
.
.
.
.
.
TAG
Dado
25 = 32 bytes
Número de Linhas
27 = 128
127
Memória Cache
Organização

Completamente Associativa
Tag
Linha
27
Endereço de 32 bits
5
– Vantagem
Flexibilidade
– Desvantagem
Complexidade do Hardware
TAG
Dado
0
TAG
Dado
1
.
.
.
.
.
.
TAG
Dado
25 = 32 bytes
127
Memória Cache
Organização

Associativa por Conjunto
(Set Associative)
Tag
Linha
21
6
5
Endereço de 32 bits
TAG
Dado
TAG
Dado
0
TAG
Dado
TAG
Dado
1
.
.
.
.
.
.
.
.
.
.
.
.
TAG
Dado
TAG
Dado
25 = 32 bytes
25 = 32 bytes
63
Coer₨ncia de Cache em Sistemas
Multiprocessadores

Protocolo de coerência
de Cache MESI
– Modified - a linha corrente
foi modificada (diferente da
informação na memória
principal) e pertence a uma
única cache.
– Exclusive - linha são
modificada e exclusiva de uma
única cache. Escrevendo-se
nesta linha, esta passa para o
estado Modified.
– Shared - linha corrente
pertence a mais de uma cache.
Ao escrever-se nesta linha, um
writethrough é gerado e
invalidam-se as outras cópias
em outras caches.
– Invalid - a linha corrente
está vazia. Uma leitura desta
linha gera um miss.
Coerência de Cache em Sistemas
Multiprocessadores
p3
P1
X=7
I
cache
I
cache
D
cache
D
cache
Barramento
p4
P2
I
cache
D
cache
X=10
Memória
I
cache
D
cache
X=30
Arquitetura de Computadores

Classifica₤₧o de Flyn
– SISD - Processadores von
Neumann
– SIMD - Array Processors
– MISD
– MIMD - Multiprocessadores
/Multicomputadores

Classifica₤₧o para
Arquiteturas Paralelas
– Computadores Pipeline
– Array Processors
– MIMD
Multiprocessadores - UMA
P1
P2
Pn
Sistema de Interconex₧o
I/O
SM1
•Fortemente Acoplados
•Aplica₤ões Gerais
Time-sharing
SMm
Memória
Compartilhada
Multiprocessadores - NUMA
Modelo Cedar
GSM
- University Illinios
GSM
GSM
Rede de Interconex₧o Global
P
CSM
P
CSM
P
CSM
P
CSM
C1
C2
Multiprocessadores - COMA
P
Cache
P
P
Cache
Cache
Rede de Interconex₧o Global
•DDM - Swedish Institute of Computer Science
Multicomputadores
M
P
Rede
de
Interconex₧o
M
P
•Intel iPSC/1 •Intel Paragon •MIT J-Machine-
M
P
M
P
Memória Externa
• Disco Magnético
Setor
– Organização dos Dados
Gap
•
•
•
•
Superfícies
Trilhas (separadas por gaps)
Setores (separados por gaps)
Densidade
Trilha
Memória Externa
• Disco Magnético
Trilhas
– Características Físicas
• Cabeças Móveis
Cabeça
Memória Externa
• Disco Magnético
Trilhas
– Características Físicas
• Cabeças Fixas
Cabeças
Memória Externa
• Disco Magnético
•
– Características Físicas
• Cabeças Fixas
• Cabeças Móveis
• Removíveis (Floppy disk)
Memória Externa
• Disco Magnético
•
– Características Físicas
•
•
•
•
Cabeças Fixas
Cabeças Móveis
Removíveis (Floppy disk)
Fixos (hard disk)
Memória Externa
• Disco Magnético
•
– Características Físicas
• Sistema das Cabeças de R/W
– Contact (Floppy disk)
– Fixed Gap
– Gap Aerodinâmico (Winchester)
Memória Externa
• Disco Magnético
Cabeças de Leitura/Gravação
Superficies
Setor
Trilha
Gap
Tacesso=Tseek + Tlat + Ttrans
Taxatransf = bytes transf./ Tacesso
Memória Externa
• CD-ROM
– Tecnologia
• Disco feito de resina
• Coberto por alumínio reflexivo
• Informação gravada através criados por raios lazer
• Proteção final feita por um lacquer
• Leitura feita através da relexão de raios lazer sobre a
superfície
Memória Externa
• CD-ROM
* CD-ROM
Velocidade
Angular Constante
•Desvantagem
Capacidade dos
setores externos fica
limitada a do mais
interno
Vantagem
Simplicidade no
endereçamento de
setores
Velocidade
Linear Constante
Desvantagem
Vantagem
Maior capacidade Sistema de
de armazenamento endereçamento
mais complexo
Memória Externa
• CD-ROM
•Espaçamento entre
trilhas (eet)= 1.6 m
#trilhas = r/eet =20344
(aparentes)
r=32,55m
•De fato, tem-se uma espiral!
•Comprimento da espiral = 5,27Km
•VLC = 1,2 m/s
Tempo para percorrer o disco = 4391s = 73,2 min
•Densidade de Armazenamento = 176,4 Kbytes/s
 Capacidade = 774,57 Mbytes
Memória Externa
• CD-ROM
– Organização dos Dados
• Superfícies
• Trilhas (separadas por gaps)
• Blocos
– Formato do Bloco
00 FF×1000 End M
Sync
Id
2048 bytes
Dados
Modos
•M0 - campo de
dados em branco
•M1 - 2048 bytes + ECC
•M2 - 2336 sem ECC
288 bytes
ou ECC
M2=dados, M1=ECC
Memória Externa
• WORM (Write Once Read Many)
– Tecnologia
• Disco feito de resina
• Coberto por alumínio reflexivo
• Pré-formatação feita através de raios lazer que cria uma
série de “bolhas”
• Gravação feita por um sistema lazer (não tão poderoso)
que rompe as “bolhas”
• Leitura feita através da relexão de raios lazer sobre a
superfície
– Layout - VAC
– Capacidade característica = 650 Mbytes
Memória Externa
• Erasable Optical Disk
– Tecnologia
• Disco feito de resina
• Coberto por um material cuja reflexibilidade pode ser Alta, Baixa ou
indeterminada.
• A gravação é feita através de raio lazer que altera o estado
de reflexivo do material
• Leitura feita através da relexão de raios lazer sobre a
superfície
– Layout - VAC
– Capacidade Característica : 650 Mbytes
Memória Externa
• Fita Magnética
– Tecnologia
• Material recoberto por oxido magnético.
– Organização dos dados
Gap
Trilhas
Registro
Memória Externa
• Fita Magnética
–
–
–
–
Número Típico de Trilhas - 9, 18, 36
Acesso Seqüencial
Vantagem : Custo
Desvantagem : Tempo de Acesso
Entrada/Saída
• Técnicas para Controle de I/O
– I/O programado
– Baseado em Interrupções
– Baseado em DMA
Entrada/Saída
• Modelo de Genérico de Dispositivo de I/O
Bus de end.
Bus de dados
Bus de controle
Módulo I/O
status e
controle
dados
Disp. Externo
Dados do/para o ambiente
Entrada/Saída
• Categorias de Dispositivo Externo
– Para Interação com Pessoas (Teclado, vídeo etc)
– Para Interação com Máquinas (Unidade de disco)
– Para Comunicações (Dispositivo remoto)
Entrada/Saída
• Modelo Genérico de um Dispositivo Externo
Controle do módulo I/O
Status para módulo I/O
Lógica
de
Controle
Dados de/para o módulo I/O
Buffer
Transdutor
Dados de/para o ambiente
Entrada/Saída
• Modelo Genérico do Módulo I/O
Dados
Interface
com
Disp.
Externos
Reg. de dados
Regs. Status e de Controle
Endereço
Controle
Lógica
de I/O
Interface
com
Disp.
Externos
Dados
Controle
Status
Dados
Controle
Status
Entrada/Saída
• Técnicas para Controle de I/O
– I/O programado
• Comandos
–
–
–
–
Controle - informa ao periférico o que fazer
Teste - testa condições
Leitura - ler dados do periférico
Escrita - escreve dados no periférico
Entrada/Saída
• Técnicas para Controle de I/O
– I/O programado
Envia Comando
de Leitura
para Módulo I/O
Condição de
erro
pronto
Lê status do
Módulo I/O
Ver.
status
Escreve
palavra na
Memória
Lê palavra do
Módulo I/O
Não está
pronto
não
Feito ?
sim
Próxima Instrução
Entrada/Saída
• Técnicas para Controle de I/O
– Baseado em Interrupção
Vai fazer qualquer coisa
Envia Comando
de Leitura
para Módulo I/O
Condição de
erro
pronto
Lê status do
Módulo I/O
Ver.
status
Escreve
palavra na
Memória
Lê palavra do
Módulo I/O
Interrupção
não
Feito ?
sim
Próxima Instrução
Entrada/Saída
•Técnicas para Controle de I/O - Baseado em Interrupção
Hardware
Software
INTERRUPT
SERVICE
PROCEDURE
Controlador ou
Periférico solicita
Interrupção
Processador Finaliza
Processamento
da Interrupção
Salva Estado
Execução de
Instrução Corrente
Processador
Reconhece
Interrupção
PUSH FLAGS
PUSH IP
FETCH ISR ADDRESS
Processa Interrupção
POP IP
POP FLAGS
Restaura Estado
Retorno
Entrada/Saída
• Técnicas para Controle de I/O
– Baseado em DMA
Quantidade
de Dados
Bus de Dados
Reg. de
Dados
Bus de Endereço
Reg. de
Endereço
DMA_Req
DMA_Ack
Int_req
Rd
Wr
Lógica
de
Controle
Diagrama Genérico
do Controlador de
DMA
Entrada/Saída
• Técnicas para Controle de I/O
– Baseado em DMA
Envia
Solicitação
de DMA
Aguarda
Reconh.
Solicitação
de DMA
Lê dados do
Dispositivo ou
da Memória
Escreve na
Memória ou
no Dispositivo
Reconhecimento
da solicitação DMA
Envia Comando
de Leitura/Escrita
DMA
para Módulo I/O
Controlador DMA
não
Feito ?
sim
Vai fazer
qualquer coisa
Processador
Solicitação
de DMA
Envia
Reconh. DMA
Suspensão
Próxima Instrução
Retira
Solicitação de DMA
Arquitetura de Computadores

Arquiteturas RISC X
CISC
– Complex Instruction Set Computer
– Reduced Instruction Set Computer
» RISC : SPARC
» CISC : Intel 386
Arquitetura de Computadores

Caracteristicas CISC
– Instruções complexas
– Modos de
endereçamento
complexos
– Controle
implementado por
ROM
– Micro-instruções

Problemas CISC
– Desempenho
– ROM interna
aumenta as
dimensões da pastilha
– Mau uso, pelos
programadores, das
instruções e modos de
endereçamento
disponíveis
Arquitetura de Computadores
CISC
•SE CARACTERIZA POR:
•CONJUNTO DE INSTRUÇOES E MODOS DE
ENDEREÇAMENTO SOFISTICADOS
•CONTROLE MICROPROGRAMADO
•UM NÚMERO REDUZIDO DE INSTRUÇÕES NO
CÓDIGO COMPILADO
•COMPILADOR DE CONSTRUÇÃO MAIS SIMPLES
Arquitetura de Computadores
CISC
MEMÓRIA DE
MICROPROGRAMA
CONTROLE
VIA DE
DADOS
PC
CONTADOR DE
MICROPROGRAMA
+1
LÓGICA DE
SELEÇÃO
DE
ENDEREÇO
REGISTRADOR
DE INSTRUÇÃO
UNIDADE DE CONTROLE
STATUS
MEMÓRIA
Arquitetura de Computadores
RISC

Objetivos das Maquinas RISC
– Melhoria de desempenho
– Reduzir acesso à memória principal (arq. load/store)
– Instruções e modos de endere₤amento simples (Controle
hardware wired)
– Bom uso dos registradores
– Pipelining (execução super-escalar)
– Uso extensivo do compilador
Arquitetura de Computadores
RISC
SE CARACTERIZA POR:
•CÓDIGOS DE INSTRUÇÃO MAIS SIMPLES
•COMPILADORES MAIS SOFISTICADOS
•PEQUENOS CICLOS DE CLOCK
•PEQUENOS NÚMEROS DE CICLOS POR
INSTRUÇÃO
•EFICIENTE PIPELINING DE FLUXO DE
INSTRUÇÕES
Arquitetura de Computadores
RISC
DATAPATH
HARDWIRED
OUTPUT AND
NEXT-STATE
CONTROL
REGISTE
R
LOGIC
FILE
STATE
REGISTER
ALU
STATUS
DATA
INSTRUCTIO
N REG.
INSTR.
CACHE
CACHE
MEMORY
CONTROL UNIT
Arquitetura de Computadores
Petium

8086
– 16 bits
– Espaço de endereçamento :

1 Mb
– Endereço da primeira
instrução executada:
FFFF0H

286
– 16 bits
– Espaço de endereçamento :
16 Mb (24 bits)
– Memória Virtual
386
– 32 bits
– Espaço de
endereçamento : 32
bits
– Registradores de 32
bits

486
– Cache interna de 8K
– Co-processador 80387
interno
Arquitetura de Computadores
Petium

Pentium é uma máquina CISC com características
de RISC
– Pipelines
- Superescalar
– Cache Interna - Dados, Instrução
– Registradores de uso geral - 32
– Previsão dinâmica de desvios
– Co-processador aritmético interno com 7
registradores de ponto flutuante de 80 bits
Modos de Operação
 Modo
Real
– 1 Mbyte
 Modo
–
–
–
–
Protegido
4 Gbytes
Multitarefa
Memória Virtual
Gerenciamento e Proteção de Memória
 Modo
Virtual
 Modo de Gerenciamento
Modelo de Software
Registradores de Uso Geral
Registradores de Segmento
EAX
AH
AX AL
Acumulador
EBX
BH
BX BL
Base
CS
Codigo
ECX
CH
CX CL
Contador
DS
Dados
EDX
DH
DX DL
Dados
EBP
ESI
EDI
Pilha
SS
BP
Base de Pilha
ES
SI
Índice Fonte
FS
DI
Índice Dest.
EIP
IP
Apont. Inst.
ESP
SP
Apont.Topo de Pilha
EFlags
Flags
Flags
GS
Extras
Modelo de Software
 Registrador
NT
IOPL
de Flags
OF
DF
IF
TF
» CF - Vai-um
» PF - Paridade
» AF - Vai-um auxiliar
» ZF - Zero
» SF - Sinal
» OF - Estouro
SF ZF
AF
PF
CF
» IF – Interrupção
»DF - Direção
»TF - Passo Simples
»IOPL - Nível de Prioridade
da Tarefa
»NT - Tarefa Aninhada
Modos de Endereçamento de
Dados
 Imediato
Op_Code
Dado
– Ex.: mov cx,1024H
 Registrador
Op_Code
Regist.
Regist.
– Ex.: mov al,ah
Dado
Modos de Endereçamento de
Dados

Direto
Op_Code
Ender.
Dado
– Ex.: mov al,[0300h]
mov ax,counter

Registrador Indireto
Op_Code
Regist.
BX,SI,DI
– Ex.: mov ch,[bx]
Ender.
Dado
Modos de Endereçamento de
Dados
 Indexado
Op_Code Regist. de Índice Desl.
SI,DI

Desl.
– Ex.: mov ch,[bx]
Ender.
Dado
Modos de Endereçamento de
Dados
 Base
Op_Code Regist. de Base
BX,BP
Desl.

Desl.
– Ex.: mov ch,[bx+02]
Ender.
Dado
Modos de Endereçamento de
Dados
 Base
Indexado
Op_Code Regist. de Base Regist. de Índice

BX,BP
Regist. de Índice
– Ex.: mov ch,[bx+si]
Ender.
Dado
Modos de Endereçamento de
Dados
 Base
Indexado com Deslocamento
Op_Code Regist. de Base Regist. de Índice
Desl.
Desl.

BX,BP
Regist. de Índice
– Ex.: mov ch,[bx+si+03]
Ender.
Dado
Modos de Endereçamento de
Dados
 Porta
Op_Code
Ender. ou DX
– Ex.: in al,80h
in al,dx
out 90h,al
out dx,al
;espaço de
; endereçamento = 256
; espaço de
; endereçamento = 65536
Modos de Endereçamento de
Dados
 Modo
de Endereçamento de 32 bits
Reg. de Seg. CS,DS,ES,FS,GS,SS

Reg. de Base EAX,EBX,ECX,EDX,EBP,ESI,EDI,ESP
*
Reg. de Índice
Fator de Escala
EAX,EBX,ECX,EDX,EBP,ESI,EDI
{1,2,4,8}

Deslocamento Nada, 8 bits, 32 bits
Ex.:
Endereço
MOV EAX,[EBX],[ECX*4+6]
Arquitetura do Pentium
Branch
target
buffer
Floating
point unit
Instruction pointer
Branch target address
32
Prefetch
address
8kb
instruction 256
cache
TLB
Floating
point registers
P b
r u
e f
f f
e e
t r
c
h
I d
n e
s c
t o
r d
u e
t.
C
o
n
t
r
o
l
Control
ROM
Page
Unit
u
n
i
t
Add.
generate
V pipe
Add.
generate
U pipe
ALU
V pipe
Integer
register
file
ALU
U pipe
8kb
data
cache
Shifter
32
Address bus - 32 bits
Add.
Control bus
Bus Unit
Add. Bus
32 bits
Data
Data bus - 64 bits
Data bus - 64 bits
TLB
Arquitetura do Pentium
 Dois
pipelines de 5 estágios: U e V
– Estágios
» PF - prefetch
» D1 - instruction decode
» D2 - address generate
» EX - execute, cache, ALU access
» WB - writeback
Arquitetura do Pentium
P b
r u
e f
f f
256 bits e e
t r
c
h
I d
n e
s c
t o
r d
u e
t.
Prefet.
Buffer
V
64 bytes
Decod.
D1
V
256 bits
Prefet.
Buffer
U
64 bytes
Decod.
D1
U
Arquitetura do Pentium
Para o
BTB
Decod.
D1
V
Decod.
D2
V
Ger.
End.
V
Ger.
End.
U
Decod.
D1
U
Decod.
D2
U
Para o BTB
Arquitetura do Pentium
Decod.
D1
V
Decod.
D2
V
ALU
V
Decod.
D1
U
Decod.
D2
U
Unidade de
Microcódigo
REG
ALU
U
Arquitetura do Pentium
FPU
Conrole
Decod.
D1
V
Decod.
D2
V
Reg. File
ADD
DIV
MUL
Dados
Decod.
D1
U
Decod.
D2
U
Unidade de
Microcódigo
Arquitetura do Pentium

Execução Super-Escalar
– Ambas as instruções devem
ser simples.
– Sem dependência de dados.
– As instruções não podem ter
modos de endereçamento
imediato e indireto.
– Instruções com prefixo só
podem ser executadas no
pipelin U.
Não requerem micro-código para serem
executadas. Normalmente levam 1
ciclo de clock para serem executadas.
ADD AX,BX (não podem ser executadas
ADD AX,CX em paralelo)
MOV TABLE[SI],7
MOV ES:[DI],AL
Arquitetura do Pentium
 Execução
Ciclos
de clock
PF
D1
D2
1
I1
Super-Escalar
2
I2
3
I3
I4
I1
I2
I5
I3
I1
4
5
I6
I7
I8
I9
I10
I4
I5
I6
I7
I8
I3
I4
I5
I6
I1
I2
I3
I4
I1
I2
I2
EX
WB
Previsão Dinâmica de Desvio
NT
T
H:11
P:T
Branch
target
buffer
TLB
T
Instruction pointer
T
H:01
P:T
H:00
P:NT
P b
r u
e f
f f
e e
t r
c
h
I d
n e
s c
t o
r d
u e
t.
NT
T
Branch target address
Prefetch
address
8kb
instruction 256
cache
H:10
P:T
NT
NT
Address Instruction Targ. Add.
.
.
.
History
Prediction
Memória Cache

Princípio da Localidade
– Instruções
Processador
Cache
– Dados

Operação
Next:
MOV CX,1000
SUB AX,AX
ADD AX,[SI]
MOV [SI],AX
INC SI
LOOP Next
Memória
Memória Cache

Princípio da Localidade
– Tacc=HitRate  Tcache+(1- HitRate) 
(Tcache+Tmem)
Processador
– Tcache=10 ns
– Tmem= 70 ns
– HitRate= 0,9
Cache
Memória
Tacc= 17 ns
Memória Cache

Política de Busca
– Demanda
Usada para decidir quando
e quais informações buscar
na CACHE
– Pré-busca
Memória Cache

Política de Busca
– Demanda
» Busca uma linha i
Usada para decidir quando
e quais informações buscar
na CACHE
quando esta se faz
necessário
– Pré-busca
» Busca a linha i+1
quando a linha i for
referida
Memória Cache

Política de Escrita
– Writethrough
» Garante consistência dos
O momento em que uma
palavra deve ser alterada
na memória principal, após
uma escrita, depende da
política de escrita.
dados
» Aumenta o tráfego no
barramento
– Writeback
» Reduz o tráfego no
barramento
» Necessita de mecanismos
para manutenção de
concist₨ncia
Memória Cache

Política de Substituição
– RAND - Aleatório
Define como uma linha da
memória CACHE deve ser
substituída.
– FIFO - First in First Out
– LRU - Least Recently Used
Memória Cache
Organização

Mapeamento Direto
Tag
Linha
20
7
Endereço de 32 bits
5
– Vantagem
Simplicidade do Hardware
Algoritmo de Substituição ₫
simples
– Desvantagem
Não é flexível
Diversos blocos de memória são
mapeados na mesma linha da
CACHE
TAG
Dado
0
TAG
Dado
1
.
.
.
.
.
.
TAG
Dado
25 = 32 bytes
Número de Linhas
27 = 128
127
Memória Cache
Organização

Completamente Associativa
Tag
Linha
27
Endere₤o de 32 bits
5
– Vantagem
Flexibilidade
– Desvantagem
Complexidade do Hardware
TAG
Dado
0
TAG
Dado
1
.
.
.
.
.
.
TAG
Dado
25 = 32 bytes
127
Memória Cache
Organização

Associativa por Conjunto
(Set Associative)
Tag
Linha
21
6
5
Endereço de 32 bits
TAG
Dado
TAG
Dado
0
TAG
Dado
TAG
Dado
1
.
.
.
.
.
.
.
.
.
.
.
.
TAG
Dado
TAG
Dado
25 = 32 bytes
25 = 32 bytes
63
Memória Cache
Organização do Pentium






Two-way-set - associative
128 Conjuntos - 256 linhas (entradas)
32 bytes por linha (64 por conjunto)
8Kb de CACHE de instrução
TAG
8Kb de CACHE de dados
TAG
Triple ported
– Pipeline U
– Pipeline V
– Opera₤ões de Bus snooping

Estrutura
Dado
TAG
Dado
Dado
TAG
Dado
.
.
.
.
.
.
.
.
.
.
.
.
TAG
Dado
TAG
Dado
25 = 32 bytes
25 = 32 bytes
Set 0
Set 1
Set 127
Arquitetura do Pentium
Branch
target
buffer
Floating
point unit
Instruction pointer
Branch target address
32
Prefetch
address
8kb
instruction 256
cache
TLB
Floating
point registers
P b
r u
e f
f f
e e
t r
c
h
I d
n e
s c
t o
r d
u e
t.
C
o
n
t
r
o
l
Control
ROM
Page
Unit
u
n
i
t
Add.
generate
V pipe
Add.
generate
U pipe
ALU
V pipe
Integer
register
file
ALU
U pipe
8kb
data
cache
Shifter
32
Address bus - 32 bits
Add.
Control bus
Bus Unit
Add. Bus
32 bits
Data
Data bus - 64 bits
Data bus - 64 bits
TLB
Memória Cache
Translation Lookaside Buffer
Endereço linear
TLB
Endereço Físico
para
Cache
T
Tag
Linha
16
4
0T
T
End
End
.
.
.
.
.
.
.
.
.
End
T
End
T
T
End
End
.
.
.
T
Endereço Físico
para Cache
12
20
Endereço Linear
End
End
T
T
End
End
.
.
.
.
.
.
.
.
.
.
.
.
T
End
T
End
T
1
12
0
1
15
Coerência de Cache em Sistemas
Multiprocessadores

Protocolo de coerência
de Cache MESI
– Modified - a linha corrente
foi modificada (diferente da
informação na memória
principal) e pertence a uma
única cache.
– Exclusive - linha não
modificada e exclusiva de uma
única cache. Escrevendo-se
nesta linha, esta passa para o
estado Modified.
– Shared - linha corrente
pertence a mais de uma cache.
Ao escrever-se nesta linha, um
writethrough é gerado e
invalia-se as outras cópias em
outras caches.
– Invalid - a linha corrente
está vazia. Uma leitura desta
linha gera um miss.
Coerência de Cache em Sistemas
Multiprocessadores
p3
P1
X=7
I
cache
I
cache
D
cache
D
cache
Barramento
P2
p4
I
cache
D
cache
X=10
I
cache
D
cache
X=30
Dimensões das Caches

Pentium
– Um nível de cache interno.
– Cache de dados : 8kb
– Cache de instruções: 8kb

Pentium MMX
– Um nível de cache interno
– Cache de dados: 16kb
– Cache de Instruções: 16kb

Pentium Pro
– Dois níveis de cache internos.
– Cache dados nível 1: 8kb
– Cache de instrução nível 1:
8kb
– Cache nível 2: 256kb, 512kb,
1MB
Dimensões das Caches

Petium II
– Dois níveis de cache internos.
– Cache de dados nível 1: 16kb
– Cache de instrução nível 1:
16kb
– Cache nível 2: 512kb

Petium III
– Dois níveis de cache internos.
– Cache de dados nível 1: 16kb
– Cache de instrução nível 1:
16kb
– Cache nível 2: 512kb
Unidade de Ponto Flutuante





PF - pré-busca
D1 - decodificação de instrução
D2 - geração de endereço
EX - leitura de memória e
registradores. Converção do
formato de ponto flutuante em
formato de memória. Escrita em
memória.
X1 - primeiro estágio de execução.
Dados da memória são convertidos
no formato ponto flutuante.
Escreve o operando para os
registradores de ponto flutuante.



X2 - segundo estágio de execução.
WF - arrendonda o resultado e
escreve nos registradores de ponto
flutuante.
ER - sinalização de erro e
atualização da palavra de status.
Unidade de Ponto Flutuante
Pipeline U
Fluxo de
instruções
e de dados
PF
D1
D2
EX
Bypass
Fluxo de
dados
ER
Registradores
de
Ponto Flutuante
WF
80 bits
X2
ST(0)
ST(1)
ST(2)
ST(3)
ST(4)
ST(5)
ST(6)
ST(7)
X1
Operações de Barramento
M/IO D/C W/R Cache KEN Descrição
0
0
0
1
x
Recon. Int.
0
0
1
1
x
Ciclo Especial
0
1
0
1
x
Leit. I/O
0
1
1
1
x
Escr. I/O
1
0
0
1
x
Leit. de Código ñ cache
1
0
0
x
1
Leit. de Código ñ cache
1
0 0
0
0
Leit. de Código em Rajada de 32 bytes
1
1 0
1
x
Leit. Mem. Acima de 8 bytes ñ cache
1
1 0
x
1
Leit. Mem. Acima de 8 bytes ñ cache
1
1 0
0
0
Leit. Mem em Rajada de 32 bytes
1
1 1
1
x
Escr. Mem. Acima de 8 bytes ñ cache
1
1 1
0
x
Escrita de 32 bytes - writeback
Opera₤ões de Barramento
Ciclos Especiais
BE7
BE6
BE5
BE4
BE3
BE2
BE1
BE0
Ciclo
1
1
1
1
1
1
1
0
shutdown
1
1
1
1
1
1
0
1
flush cache
1
1
1
1
1
1
1
1
1
1
1
0
1
1
0
1
1
0
1
1
0
1
1
1
1
1
1
1
1
1
1
1
halt
writeback
flush ack.
br. tr. mess
Ciclos de Leitura/Escrita
t1
t2
ti
t1
t2
ti
Clk
ADS
Válido
Válido
Address
W/R
BRDY
P/ CPU
da CPU
Data
Ciclos Burst
O
pentium suporta ciclos de leitura e escrita
em rajada de 32 bytes.
– Cada oito bytes são transferidos a cada ciclo de clock.
– O Processador passa o endere₤o inicial, os demais
endere₤o devem ser gerados pelo sistema de memória
1° end.
2 ° end.
3° end.
4° end.
0
8
10
18
8
0
18
10
10
18
0
8
18
10
8
0
Ciclos Burst
t1
t2
t2
t2
t2
ti
Clk
ADS
Válido
Address
W/R
BRDY
CACHE
KEN
P/ CPU
P/ CPU
P/ CPU
P/CPU
Data
Operações Locked e BOFF

Lock
– Operacões atômicas não podem
ser quebradas em operações
menores
– Semáforos
– Requerem leitura seguida de
escrita
– XCHG
– LOCK é ativado indicando que
o ciclo no ciclo corrente o
barramento está bloqueado e
não pode ser interrompido

BOFF
– Este sinal de entrada prover
uma forma para que em
sistemas multiprocessados
um Pentium possa “tomar
conta” do barramento.
– Este terminal(BOFF) ₫
verificado a cada ciclo de
clock. Caso o seu valor seja
baixo, o barramento ₫
colocado em alta
impedância.
Operações Bus Hold e
Reconhecimento de Interrupção

Bus Hold
– Uma segunda forma para
que o processador “tome
conta”do barramento.
– A entrada HOLDé
verificada a cada ciclo de
clock, caso seja alto, no
final do ciclo de
barramento, o barramento é
colocado em alta
impedância.
– A saída HLDA é ativada
para indicar que o Pentium
está neste estado.

Reconhecimento de
Interrupção.
– Dois destes ciclos são
gerados em reconhecimento
a solicitação de interrupção
(INTR).
– M/IO=D/C=W/R =0
– CACHE = 1
Reconhecimento de Interrupção
vcc
INT0
.
.
.
‘148
INT7
A2
A1
A0
‘374
.
.
.
D
0
GS
EI
vcc
DQ
clk
clr
D
7
Pentium
INTR
M/IO
D/C
W/R
ADS
Cache Flush e Shutdown

Cache Flush
– Como resposta a uma entrda
ativa no terminal FLUSH o
Pentium executa o writeback
nas linhas modificadas e as
torna inválidas
– BE1 =0
– Quando o writeback é
executado o processador
executa um cache ack. para
informar que na cache foi
realizado um flush.
– BE4 =0

Shutdown
– Se o processador
detecta um erro de
paridade um ciclo
shutdown é gerado.
– A execução é suspensa
até o processador que
ocorrar um NMI, INIT
ou RESET
– Cache internas
permancem inalteradas
– BE0=0
Halt e Inquire Cycles

Halt
– Ciclo realizado quando
da execução de uma
instrução HLT
– Similar ao shutdown
exceto que a execução
só será retomada pelo
sinal INTR
– BE2 = 0

Inquire Cycle
– Usado para manter a
coerência de cache
– Ao detectar-se (no
snooping cycle) um acesso,
por outro processador, a
uma posição de memória,
o processador gera um
inquire interno para
verificar se esta posição
esta na cache interna. Caso
esteja, a cache pode ser
modificada.
Tipo de Instruções

Transferência de dados

Aritmética

Manipulação de bit

Laços e saltos

Subrotinas e interrupções

Controle

String
Tipo de Instruções

Instruções Monádicas

Instruções Diádicas
– inst opr dest
– inst opr dest, opr fonte
opr dest - operando destino
opr dest - operando destino
opr fonte - operando fonte
Transferência de Dados
Instruções
– POP
–
–
–
–
–
–
–
MOV
MOVSX
MOVZX
PUSH
PUSHW/PUSHD
PUSHA/PUSHAD
PUSHF/PUSHFD
movimenta₤₧o
ext. sinal
ext. c/ zero
empilhamento
imedit./ 32 bits
todos reg/ 32 bits
16 bits flags/32 bits
desemp.
– POPA/POPAD
todos reg/32 bits
– POPF/POPFD 16 bits flags/32 bits
– IN
input
– OUT
output
– XCHG
permuta
– XLAT
translate-table
– LEA
carga de end. efetivo
– LDS e similares carga de ponteiro
– BSWAP
troca
– LAHF
carga de flags em AH
– SAHF
arm. de AH nos flags
Transferência de Dados
Sintaxe:
MOV OP_DEST,OP_DEST
EX.: MOV AL,01
MOV AX,[BX+2]
MOV AL,[0400H]
Transfer₨ncia de Dados
Sintaxe:
MOVSX OP_DEST,OP_DEST
EX.: MOVSX AX,AL
Transfer₨ncia de Dados
Sintaxe:
MOV OP_DEST,OP_FONT
EX.: MOVZX AX,AL
Transfer₨ncia de Dados
Sintaxe:
PUSH OP_FONTE
EX.: PUSH BX
Transfer₨ncia de Dados
Sintaxe:
PUSHW/PUSHD OP_FONTE (imedit./ 32 bits)
EX.: PUSHW 34ADh
PUSHD EAX
- PUSHD pode ser usado para
empilhar valor de um reg. de 32 bits
Transfer₨ncia de Dados
Sintaxe:
PUSHA/PUSHAD
EX.: PUSHA
PUSHAD
(todos reg/ 32 bits)
Transfer₨ncia de Dados
Sintaxe:
PUSHF/PUSHFD
EX.: PUSHF
PUSHFD
16 bits flags/32 bits
Transfer₨ncia de Dados
Sintaxe:
POP OP_DEST
EX.: POP BX
Transfer₨ncia de Dados
Sintaxe:
POPA/POPAD
EX.: POPA
POPAD
todos reg/32 bits
Transfer₨ncia de Dados
Sintaxe:
POPF/POPFD
EX.: POPF
POPFD
16 bits flags/32 bits
Transfer₨ncia de Dados
Sintaxe:
IN ACUMULADOR,END/DX
EX.: IN AL,60H
IN AL,DX
input
Transfer₨ncia de Dados
Sintaxe:
OUT END/DX,ACUMULADOR
EX.: OUT DX,AL
OUT 80H,AX
output
Transfer₨ncia de Dados
Sintaxe:
XCHG OP_DEST,OP_FONTE
EX.: XCHG AL,AH
XCHG AL[BX]
permuta
Transfer₨ncia de Dados
Sintaxe:
XLAT
translate-table
O registrador BX deve ter o endere₤o inicial da
lista.
O valor de AL ₫ o índice.
EX.: MOV AL,3
MOV BX,0400H
XLAT
Transfer₨ncia de Dados
Sintaxe:
LEA OP_DEST,LABEL
EX.: LEA BX,LISTA
carga de end.
Transfer₨ncia de Dados
Sintaxe:
LDS OP_DEST,OP_FONTE
OP_DEST
carga de ponteiro
- registrador
LES,LFS,LGS,LSS
-
EX.: LDS BX,[SI]
LES DX,end_lista
s₧o similares
Transfer₨ncia de Dados
Sintaxe:
BSWAP OP_DEST
- OP_DEST
- troca (swapping)
- registrador de 32 bits
EX.: MOV EAX,12345678H
BSWAP EAX
EAX = 78563412H
Transfer₨ncia de Dados
Sintaxe:
LAHF
EX.: POPF
LAHF
- Carrega AH com flags
Transfer₨ncia de Dados
Sintaxe:
SAHF
EX.: MOV AH,0FFH
SAHF
- Armazena AH nos flags
Aritmética
Instruções
– ADD
– ADC
– INC
–
–
–
–
–
SUB
SBB
DEC
CMP
MUL
– IMUL
– DIV
– IDIV
adição
incremento
subtração
– NEG
– CBW
complemento a 2
mudança de módulo
– CWD
– DAA
ajuste BCD
– DAS
decremento
comparação
multiplicação
divisão
– AAA
– AAS
– AAM
– AAD
ajuste ASCII
Aritm₫tica
Sintaxe:
ADD OP_DEST,OP_DEST
EX.:
ADD AL,CH
ADD CX,[SI]
ADD DX,4
- adi₤₧o
Aritm₫tica
Sintaxe:
ADC OP_DEST,OP_DEST
EX.:
ADC AL,CH
ADC [BX],DX
ADC DX,4
- adi₤₧o com vai um
Aritm₫tica
Sintaxe:
INC OP_DEST
EX.:
INC AL
INC [BX]
INC [0400H]
- Incremento
Aritm₫tica
Sintaxe:
SUB OP_DEST,OP_DEST
EX.:
SUB AL,CH
SUB CX,[0300H]
SUB DX,4
- Subtra₤₧o
Aritm₫tica
Sintaxe:
SBB OP_DEST,OP_DEST
EX.:
SBB AL,CH
SBB CX,[0300H]
SBB DX,4
- Subtra₤₧o com vem um
Aritm₫tica
Sintaxe:
DEC OP_DEST
EX.:
DEC AL
DEC [BX]
DEC [0400H]
- Decremento
Aritm₫tica
Sintaxe:
CMP OP_DEST,OP_DEST
EX.:
CMP AL,CH
CMP CX,[0300H]
CMP DX,4
- Compara₤₧o
Aritm₫tica
Sintaxe:
CMPXCHG OP_DEST, OP_FONTE - compara e permuta
Compara o operando destino com o acumulador e caso o acumulador seja
igual ao operando destino, o operando fonte ₫ copiado no destino. Caso
sejam diferentes, o valor do acumulador ₫ substituído pelo valor do
destino.
10
10
AL
BL
30
CL
EX.: CMPXCHG BL,CL
CMPXCHG CX,[0300H]
CMPXCHG EDX,EBX
10
30
30
AL
BL
CL
10
20
AL
BL
CL
20
20
30
AL
BL
30
CL
Aritmética
Sintaxe:
MUL OP_FONTE
EX.:
MUL BL
MUL DX
MUL ECX
- multiplicação
Aritmética
Sintaxe:
IMUL OP_FONTE
EX.:
IMUL BL
IMUL DX
IMUL ECX
- multiplicação sinalizada
Aritmética
Sintaxe:
DIV OP_FONTE
EX.:
DIV BL
DIV DX
DIV ECX
- divisão
Aritmética
Sintaxe:
IDIV OP_FONTE
EX.:
IDIV BL
IDIV DX
IDIV ECX
- divisão sinalizada
Aritm₫tica
Sintaxe:
NEG OP-DEST - complemento de dois
EX.:
NEG AL
NEG [0200H]
NEG DX
Aritm₫tica
Sintaxe:
CBW
- converte byte de AL em palavra
etendendo-se o sinal
CWD
- converte a palavra de AX em duplapalavra estendendo-se o sinal (DX:AX)
CWDE - converte a palavra de AX em duplapalavra estendendo-se o sinal (EAX)
CDQ
- converte a dupla-palavra de EAX em
quádrupla-palavra estendendo-se o sinal
(EDX:EAX)
EX.: CBW
CWDE
CWD
CDQ
Aritm₫tica
Sintaxe:
DAA
- ajuste decimal para adi₤₧o (BCD
compactado)
EX.:
MOV AL,15H
MOV BL,25H
ADD AL,BL
;AL=3AH
DAA
;AL=40H
Aritm₫tica
Sintaxe:
DAS
- ajuste decimal para subtra₤₧o (BCDcompactado)
EX.:
MOV AL,10H
MOV BL,02H
SUB AL,BL
;AL=0EH
DAS
;AL=08H
Aritm₫tica
Sintaxe:
AAA
- ajuste ASCII para adi₤₧o
EX.:
MOV AX,0033H
MOV BL,39H
ADD AL,BL
;AL=6CH
AAA
;AX=0102H
Aritm₫tica
Sintaxe:
AAS
- ajuste ASCII para subtra₤₧o
AAM
- ajuste ASCII para multiplica₤₧o
AAD
- ajuste ASCII para divis₧o
Lógica e Manipulação de Bit
Instruções Lógicas
– NOT
– AND
Algumas Instruções Manipulação de bit
– SHL/SAL
- desloc. esquerda
– SHR
- deslc. direita
– SAR
– OR
– XOR
– TEST
– ROL
– ROR
– RCL
– RCR
- rotação
Lógicas
Sintaxe:
NOT OP-DEST
- complemento de um
EX.:
NOT AL
NOT [0200H]
NOT DX
Lógicas
Sintaxe:
AND OP_DEST,OP_FONTE
EX.:
AND AL,CH
AND CX,[SI]
AND DX,FFFFH
- opera₤₧o lógica e
Lógicas
Sintaxe:
OR OP_DEST,OP_FONTE
EX.:
OR AL,00H
OR CX,[SI]
OR DX,FFFFH
- opera₤₧o lógica ou
Lógicas
Sintaxe:
XOR OP_DEST,OP_FONTE - opera₤₧o lógica ou exclusivo
EX.:
XOR AL,CH
XOR CX,[SI]
XOR DX,DX
Lógicas
Sintaxe:
TEST OP_DEST,OP_FONTE
EX.:
TEST AL,CH
TEST CX,[SI]
TEST DX,FFFFH
- opera₤₧o lógica e
Lógicas
Sintaxe:
SETcc OP_DEST
- atribui 01 a operando destino se a condi₤₧o
testada for verdadeira. Caso contrário,
atribui-se 00.
EX.:
SETZ AL
SETLE AX
SETNC DX
Lógicas
Sintaxe:
BSF/BSR OP_DEST,OP_FONTE - procura pelo 1°bit igual a um no
operando fonte a partir do LSB ou MSB. A posi₤₧o encontrada será informada
em operando destino.
OP_DEST deve ser REG. de 16 ou 32 bits
OP_FONTE deve ser REG. ou mem de 16
ou 32 bits
EX.:
BSF EAX,EBX
Lógicas
Sintaxe:
BT/BTC,BTS,BTR OP_DEST,OP_FONTE - testa, complementa,
seta ou reseta um bit do operando destino especificado no opernado fonte.
OP_DEST deve ser REG. de 16 ou 32 bits
OP_FONTE deve ser REG. ou mem de 16
ou 32 bits
EX.:
BT AX,BX
BTC AX,15
BTS AX,1
BTR AX,0
Laços, Desvios, Subrotinas e
Interrupções
Laços e Desvios
– JMP
– Jcc
-desvio incondicional
- desvio condicional
– JCXZ
– LOOP - laço
– LOOPE
– LOOPNE
Subrotinas e Interrupções
– CALL
- subrotinas
– INT
- interrupções
– INTO
– RET
– IRET
- retorno
Controle
– CLC
– STC
– CMC
– CLD
– STD
– CLI
– STI
- Limpa CF
- Faz CF=1
- Complementa CF
- Limpa DF
- Faz DF=1
- Limpa IF
- Faz IF=1
Controle
Sintaxe:
HLT
- Parada
Para o sistema. O processador fica neste estado at₫ ocorrer um reset ou uma
interrup₤₧o NMI ou INTR.
Controle
Sintaxe:
LOCK
- Instru₤₧o prefixo
Bloqueia o barramento
EX.: LOCK XCHG
Sintaxe:
NOP
N₧o executa nada.
- No operation
Strings
Sintaxe:
REP
- Instru₤₧o prefixo
Repete enquanto CX for diferente de zero. Deve ser usada antes das
instru₤ões MOVS, STOS, INS e OUTS
EX.: REP MOSVB
Strings
Sintaxe:
REPE/REPZ
- Instru₤₧o prefixo
Repete enquanto CX for diferente de zero e ZF = 1. Deve ser usada antes das
instru₤ões C,MPS e SCAS.
EX.: REPE CMPSB
Strings
Sintaxe:
REPNE/REPNZ
- Instru₤₧o prefixo
Repete enquanto CX for diferente de zero e ZF = 0. Deve ser usada antes das
instru₤ões C,MPS e SCAS.
EX.: REPNE SCASW
Strings
Sintaxe:
MOVS/ MOVSB/ MOVSW/ MOVSD
- move
Move o elemento apontado por SI no segmento de dados para área
apontada por dI no segmento de extra. DI e SI ser₧o
incrementados ou decrementados de 1, 2, 0u 4 dependendo do flag
DF e do tipo do dado.
EX.:
MOV AX,0300H
MOV ES,AX
XOR DI,DIH
MOV AX,0500H
MOV DS,AX
XOR SI,SIH
MOV CX,5H
CLD
MOV AL,4EH
REP MOVSB
Strings
Sintaxe:
CMPS/ CMPSB/ CMPSW/ CMPSD
- compara
Compara o elemento apontado por DI no segmento extra com o
elemento apontado por SI no segmento de dados. DI e SI ser₧o
incrementados ou decrementados de 1, 2, 0u 4 dependendo do flag
DF e do tipo do dado.
EX.:
MOV AX,0300H
MOV ES,AX
XOR DI,DIH
MOV AX,0500H
MOV DS,AX
XOR SI,SIH
MOV CX,5H
CLD
MOV AL,4EH
REPE CMPSB
Strings
Sintaxe:
SCAS/ SCASB/ SCASW/ SCASD
- scan
Compara o elemento apontado por DI no segmento extra com o
conteúdo do acumulador (AL,AX ou EAX). DI será incrementado
ou decrementado de 1, 2, 0u 4 dependendo do flag DF e do tipo do
dado.
EX.:
MOV AX,0300H
MOV ES,AX
MOV DI,6H
MOV CX,6H
STD
MOV
AL,4EH
REPNZ SCASB
Strings
Sintaxe:
LODS/ LODSB/ LODSW/ LODSD
- carrega
Carrega o elemento apontado por SI no segmento de dados no
acumulador (AL,AX ou EAX). SI será incrementado ou
decrementado de 1, 2, 0u 4 dependendo do flag DF e do tipo do
dado.
EX.:
MOV AX,0510H
MOV DS,AX
MOV SI,5H
STD
LODSW
Strings
Sintaxe:
STOS/ STOSB/ STOSW/ STOSD
- armazena
Armazena na área apontada por DI no segmento de extra o conteúdo
do acumulador (AL,AX ou EAX). DI será incrementado ou
decrementado de 1, 2, 0u 4 dependendo do flag DF e do tipo do
dado.
EX.:
MOV AX,04A8H
MOV ES,AX
MOV DI,8H
CLD
MOV AL,’M’
REP STOSB
Diretivas do Macro-Assembler
Programa .EXE
– Tamanho:
Programa .COM
memória total
– Ponto de Entrada: qualquer ponto
64 Kbytes
offset 100h
– Arquivo produzido
deve ser convertido
pelo link:
executável
pelo EXE2BIN
– PSP:
apontado por DS
nos 100h bytes iniciais
e ES
do segmento
Formato de um Programa .EXE
S1 SEGMENT STACK ‘STACK’
DW 100 DUP(?)
S1 ENDS
D1 SEGMENT
DEFINIÇÃO DE VARIÁVEIS
D1 ENDS
C1 SEGMENT
ASSUMECS:C1, DS:D1,ES:D1,SS:S1
P1
PROC FAR
MOV AX,D1
MOV DS,AX
MOV ES,AX
CoRPO DO PROGRAMA
MOV AH,4CH
INT 21H
P1
ENDP
R1
PROC NEAR
CORPO DA ROTINA
RET
R1 ENDP
C1 ENDS
END P1
Formato de um Programa .COM
C1 SEGMENT
ASSUMECS:C1, DS:C1,ES:C1,SS:C1
ORG 100H
I: JMP P1
DEFINIÇÃO DE VARIÁVEIS
P1 PROC NEAR
CORPO DO PROGRAMA
MOV AH,4CH
INT 21H
P1 ENDP
R1 PROC
CORPO DA ROTINA
RET
R1 ENDP
C1 ENDS
END
Diretivas do Macro-Assembler

COMMENT - INSERÇÃO DE COMENTÁRIO
– FORMATO: COMMENT * COMENTÁRIO *
– EXEMPLO: COMMENT * MEU PRIMEIRO PROGRAMA*

ASSUME - INFORMA AO MONTADOR A FUNÇÃO DE CADA
SEGMENTO.
– FORMATO: ASSUME REG_SEG:NOME_SEG, ..., REG_SEG:NOME_SEG
– EXEMPLO: ASSUME CS:C1,DS:D1,ES:D2,SS:S1

ORG - ESPECIFICA O ENDEREÇO PARA UMA INSTRUÇÃO OU DADO.
– FORMATO: ORG EXPRESSÃO
– EXEMPLO: ORG 100H
Diretivas do Macro-Assembler

SEGMENT - DEFINE SEGMENTO
– FORMATO:
NOME SEGMENT [ALINHM.][COMB.][CLASSE]
– ALINHAMENTO: Define onde inicia o segemento
BYTE - 1° byte livre
WORD - 1° endereço par livre
DWORD - 1° endereço divisível por 4 livre
PARA - 1° endereço divisível por 16 livre
PAGE - 1° endereço divisível por 256 livre
Diretivas do Macro-Assembler

SEGMENT - DEFINE SEGMENTO
– FORMATO:
NOME SEGMENT [ALINHM.][COMB.][CLASSE]
– COMBINAÇÃO: Define como combinar segmentos de mesmo nome
PUBLIC - concatena todos os segementos de mesmo nome
de forma a se obter um único segemento
STACK - O mesmo que o tipo PUBLIC. Para segementos
de pilha.
COMMOM - cria um segmento pela superposição de
segmentos com mesmo nome.
AT endereço - define o endereço inicial de um segemento.
Este segmento não contém inicialização de
dados o código. Usado para definir um
segmento em uma área de dados ou código
Diretivas do Macro-Assembler

SEGMENT - DEFINE SEGMENTO
– FORMATO:
–
NOME SEGMENT [ALINHM.][COMB.][CLASSE]
CLASSE: Define que os segmentos, embora de nomes diferente, mas de mesma
classe, devem ser agrupados na linkedição.
‘CODE’
‘DATA’
‘STACK’
Diretivas do Macro-Assembler

ENDS - FINALIZAÇÃO DE SEGMENTO
– FORMATO:
NOME ENDS
– EXEMPLO:
INICIO SEGMENT
P1
P1
PROC FAR
...
CALL ROT
...
RET
ENDP
ROT
ROT
PROC NEAR
....
RET
ENDP
INICIO ENDS
Diretivas do Macro-Assembler

END - Finalização do programa
– FORMATO:
END nome
nome é o ponto de entrada do programa.
Diretivas do Macro-Assembler
DEFINIÇÃO DE ÁREA DE ARMAZENAMENTO





DB - DEFINE COMO BYTE
DW - DEFINE COMO WORD
DD - DEFINE COMO DOUBLE WORD
DQ - DEFINE COMO QUADWORD
DT - DEFINE COMO DEZ BYTES
– FORMATO: NOME DB/DW/DD/DQ/DT VALOR/LISTA DEVALORES
– EXEMPLO:
X
DB
2AH
LISTA DB
30D,43D,74D
Y
DW
402BH
Z DB 01001110B
Diretivas do Macro-Assembler

EQU - DEFINE CONSTANTE
– FORMATO: NOME
EQU
VALOR
– EXEMPLO:
CONST1
EQU 0
CONST2
EQU 4
CONST3
EQU CONST2 + 3

BYTE/WORD/..../NEAR/FAR PTR - FORÇA EXPRESSÃO A SER DE
UM TIPO BYTE, WORD, ....OU GERAR UM CÓDIGO DO TIPO NEAR OU FAR.
– FORMATO:
BYTE/WORD/DWORD/QWORD/TBYTES/NEAR/FAR PTR EXPRESSÃO
EXEMPLO:
X DB 02H
ROT PROC NEAR
MOV AX,WORD PTR X
....
CALL FAR PTR ROT
RET
...
ROT ENDP
Diretivas do Macro-Assembler

SHORT - USANDO-SE EM UMA INSTRUÇÃO JMP FAZ COM QUE O
MONTADOR GERE UM CÓDIGO SEJA DE APENAS DOIS BYTES. O
DESVIO NÃO PODE SER SUPERIOR A -128 OU +127 BYTES.
– FORMATO:
JMP
SHORT
NOME

OFFSET - FORNECE O DESLOCAMENTO DE UMA VARIÁVEL OU
RÓTULO DENTRO DO SEGMENTO ONDE ESTÁ DEFINIDO.
–
FORMATO:
OFFSET EXPRESSÃO
–
EXEMPLO: MENS DB
MOV DX,OFFSET MENS

‘Bom Dia$
SEG - FORNECE O SEGMENTO DE UMA VARIÁVEL OU RÓTULO.
– FORMATO:
– EXEMPLO :
SEG EXPRESSÃO
MOV AX, SEG MENS
Diretivas do Macro-Assembler

ESTRUTURAS - É uma coleção de objetos (dados) os quais
podem ser lidos/escritos como um único objeto. Os dados de uma
estrutura podem ter diferentes tamanhos e podem acessados
simbolicamente.
–
–
FORMATO DA DECLARAÇÃO:
nome struc
declarações
nome ends
FORMATO DA DEFINIÇÃO DA VARIÁVEL
[nome] nome_da_estrutura <[valor_inicial [,valor_inicial]]>
Diretivas do Macro-Assembler

ESTRUTURAS -
date STRUC
month
db
?
day
db
?
year
dw
?
CODIGO
SEGMENT
PARA 'CODE'
ASSUME CS:CODIGO,DS:DADOS,SS:PILHA
INICIO PROC
FAR
date ENDS
DADOS
SEGMENT
date
<09,03,2000>
today
date
<09,04,2000>
tomorrow
date
<09,05,2000>
anotherday
date
<>
someotherdays date 20 DUP (<>)
ENDS
AX,DADOS
DS,AX
MOV
MOV
MOV
MOV
LEA
MOV
AL,yesterday.day
AH,today.day
DL,tomorrow.day
anotherday.day,DL
BX,someotherdays
[BX].day,dl
PARA 'DATA'
yesterday
DADOS
MOV
MOV
Diretivas do Macro-Assembler

MACRO - Possibilita atribuir um nome a um bloco de código e
utiliza-lo, através deste nome, no seu programa.
–
FORMATO DA DECLARAÇÃO:
nome macro [parâmetro[,parâmetro]]
statements
nome endm
–
FORMATO PARA CHAMAR A MACRO
nome [argumento [,argumento]]
Diretivas do Macro-Assembler

MACRO -
DADOS
SEGMENT
RenataN1
db
06
RenataN2
db
08
Renatatpontos
db
?
DADOS
SEGMENT PARA 'CODE'
PARA 'DATA' CODIGO
ASSUME CS:CODIGO,DS:DADOS,SS:PILHA
ENDS
totalpontos MACRO n1,n2
MOV AL,n1
MOV AH,n2
CLC
ADD AH,AL
ENDM
INICIO PROC
MOV
MOV
FAR
AX,DADOS
DS,AX
totalpontos RenataN1,RenataN2
MOV Renatatpontos,AH
MOV AH,4CH
INT 21H
INICIO ENDP
CODIGO ENDS
END
INICIO
Interrupções
O
que é uma interrupção?
– É um evento interno ou externo ao
processador provocado por um usuário
que solicita sua atenção.
 Quais
os tipos de interrupção?
– Interrupções por software
» Instruções INT
– Interrupções por hardware
» NMI
» IRQ’s conectadas ao pino INTR
– Exception Handlers (Int. Excepcionais)
Arquitetura de Computadores
 Interrupções
– Hardware
– Software
na Arquitetura x86
Internas
Externas
Mascarável
Não-Mascarável
Sistema Operacional
Usuário
Interrupções
 Exemplos
de Exception Handlers
– Erro irrecuperável de HW;
– Divisão por zero;
– Breakpoint;
– Passo a Passo;
– Overflow;
– Violação dos limites da memória.
Resposta do Processador
a uma Interrupção
PUSH FLAGS
CLEAR IF
CLEAR TF
PUSH CS
PUSH IP
FETCH ISR ADDRESS
INTERRUPT
SERVICE
PROCEDURE
PUSH REGISTERS
POP IP
POP CS
POP FLAGS
POP REGISTERS
IRET
Vetores de Interrupção
Processadores da Família 8086
INT (Hex)
00 - 01
02
03 - 07
08
09
0A
0B
0C
0D
0E
0F
10 - 6F
70
71
72
73
74
75
76
77
78-FF
IRQ
Exeption Handlers
Non-Maskable IRQ
Exeption Handlers
Hardware IRQ0
Hardware IRQ1
Hardware IRQ2
Hardware IRQ3
Hardware IRQ4
Hardware IRQ5
Hardware IRQ6
Hardware IRQ7
Software Interrups
Hardware IRQ8
Hardware IRQ9
Hardware IRQ10
Hardware IRQ11
Hardware IRQ12
Hardware IRQ13
Hardware IRQ14
Hardware IRQ15
Software Interrups
COMMON USES
Non-Maskable IRQ (Parity Errors)
System Timer
Keyboard
Redirected
Serial Comms. COM2/COM4
Serial Comms. COM1/COM3
Reserved / Sound Card
Floppy Disk Controller
Parallel Comms.
Real Time Clock
Redirected IRQ2
Reserved
Reserved
PS/2 Mouse
Math's Co-Processor
Hard Disk Drive
Reserved
-
Controlador de Interrupção
Programável - PIC 8259
 Foi
projetado para permitir
priorização e tratamento de
interrupções de dispositivos
periféricos, multiplexando vários
sinais de interrupção na entrada
de interrupção do processador.
Diagrama em Blocos - PIC 8259
Diagrama em Blocos - PIC 8259
 Interrupt
Request Register (IRR):
Monitora as entradas de interrupção
para verificar as que estão ativas. Se
uma
interrupção
estiver
não
mascarada e sua entrada ativa o bit
correspondente a esta entrada será
setado no IRR.
Diagrama em Blocos - PIC 8259
 Priority
Resolver:
Envia um novo sinal interrupção para
o processador após o reset do bit de
maior prioridade do ISR. Se a nova
interrupção tiver maior prioridade
que a interrupção que está sendo
atendida o respectivo bit no ISR será
setado e é ativado o circuito que envia
um novo sinal de INT para o
processador.
Diagrama em Blocos - PIC 8259
 Exemplo:
PROGRAMA
PRINCIPAL
INICIALIZA 8259A
IR2, IR4 UNMASK
STI
ocorrência de interrupções
ROTINA
IR4
STI ROTINA
IR2
STI
PROGRAMA
PRINCIPAL
INICIALIZA 8259A
IR2, IR4 UNMASK
STI
ROTINA IR4
EOI
RETI
ROTINA IR2
EOI
RETI
EOI
RETI
EOI
RETI
Diagrama em Blocos - PIC 8259
 In-Service
Register (ISR):
Sinaliza as instruções que estão
sendo atendidas pelo processador.
Para cada interrupção que estiver
sendo atendida um bit correspondente será setado neste registrador.
Diagrama em Blocos - PIC 8259
 Interrupt
Mask Register (MR):
Desabilita
(mask)
ou
habilita
(unmask) individualmente entradas de
interrupção. Cada bit do registrador
corresponde a uma entrada de
interrupção, e quando em 1 indica que
a interrupção está desabilitada.
Diagrama em Blocos - PIC 8259
 Control
Logic:
– INT: envia o pedido de interrupção para
a entrada INTR do processador;
– INTA:
recebe
dois
pulsos
de
reconhecimento de interrupção vindos da
saída INTA do processador. O primeiro
pulso é utilizado no modo cascata e o
segundo pulso solicita o byte que indica
que tipo de interrupção foi requisitada
ao processador.
Etapas de uma Interrupção
– É requisitada uma interrupção via uma das
entradas IR’s do PIC, sendo setado o bit
correspondente no IRR;
– O PIC ativa a linha INT, que está conectada
ao pino INTR do processador;
– Se INTR estiver habilitado o processador
conclui a instrução corrente e envia um
pulso no pino INTA para o PIC;
– O PIC seta no ISR o bit correspondente à
IR ativa de maior prioridade e reseta o
respectivo bit no IRR.
Etapas de uma Interrupção
– É enviado um segundo pulso no pino INTA
para o PIC, durante o qual é enviado, pelo
bus de dados, o número do tipo de
interrupção solicitada;
– A CPU determina o endereço associado à
ISR (rotina de serviço de interrupção),
buscando e executando esta ISR;
– Caso esteja configurado o modo automático
de fim de interrupção (AEOI) o bit ISR
correspondente será resetado ao final do
segundo pulso INTA, caso contrário este
bit será resetado pelo comando EOI
presente na rotina de interrupção.
Configuração em Cascata
PIC 8259
Configuração em Cascata
PIC 8259
 Sistema
Mestre/Escravo: quando em
cascata o PIC 8259 de cujo pino INT
está ligado à entrada INTR do
processador é chamado de mestre,
enquanto os PIC’s cuja saída INT
estiver ligada às entradas IR’s do
mestre são chamados de escravos.
Configuração em Cascata
PIC 8259
 Conexões
do modo cascata
– CAS0/CAS1/CAS2: estes três bits são
utilizados para identificação (ID) dos
escravos. Os pinos do mestre são
conectados aos correspondentes pinos dos
escravos. Para o mestre estes pinos
funcionam como saídas e para os escravos
como entradas.
– SP/EN: diferencia o mestre dos escravos,
sendo mantido em nível 0 para os escravos
e em nível 1 para os mestres.
Configuração em Cascata
PIC 8259
 Etapas
de uma interrupção do escravo
– Ocorre um pedido de interrupção em uma
das entradas IR do escravo;
– Dependendo da prioridade e da habilitação
da interrupção, o escravo envia um sinal
INT para a entrada IR do mestre;
– De
mesma
forma,
dependendo
da
prioridade e da habilitação da interrupção,
o mestre envia um sinal INT para a entrada
INTR do processador;
Configuração em Cascata
PIC 8259
 Etapas
de uma interrupção do escravo
– Estando INTR habilitada, o processador irá
executar a rotina de interrupção e enviará
dois pulsos INTA para ambos os PIC’s;
– No primeiro pulso o mestre seleciona o
escravo solicitante através dos pinos CAS.
– No segundo pulso o escravo selecionado
enviará através das linhas de dados o
número do tipo de interrupção solicitada.
Configuração em Cascata
PIC 8259
 Cuidado
ao se trabalhar em cascata!
– Quando no mestre se trabalha ao mesmo
tempo com IR’s para escravos e entradas
comuns não deve-se usar a IR0 para um
escravo, pois quando uma entrada comum
for ativada os pinos de CAS ficarão em
nível lógico baixo e o escravo que estiver
em IR0 será selecionado, causando um
erro no sistema.
Configuração em Cascata
PIC 8259
 Modo
totalmente aninhado
– Permite que uma interrupção de maior
prioridade de um escravo seja atendida,
mesmo que o processador esteja atendendo
uma interrupção deste mesmo escravo (ISR
em nível alto).
– Para verificar a existência de outra
interrupção no mesmo escravo é ressetado
o bit ISR do escravo através de um EOI,
que é lido em seguida. Caso seja zero é
enviado um EOI para o mestre.
Palavra de Controle de
Inicialização - ICW1
A0
D7
D6
D5
D4
D3
D2
D1
D0
0
A7
A6
A5
1
LTIM
ADI
SNGL
IC4
1 = ICW4 NEEDED
O = NO ICW4 NEEDED
A7 - A5 OF INTERRUPT
VECTOR ADDRESS
(MCS-80/85 MODE ONLY )
1 = SINGLE
O = CASCADE MODE
CALL ADDRESS INTERVAL
1 = INTERVAL OF 4
O = INTERVAL OF 8
1 = LEVEL TRIGGERED MODE
0 = EDGE TRIGGERED MODE
Palavra de Controle de
Inicialização - ICW2/3
 ICW2
A0
D7
D6
D5
D4
D3
D2
1
T7
T6
T5
T4
T3
A10
 ICW3
A9
D0
A8
T7 - T3 OF INTERRUPT
VECTOR ADDRESS
(8086 / 8088 MODE)
(MESTRE)
A0
D7
D6
D5
D4
D3
D2
1
S7
S6
S5
S4
S3
S2
 ICW3
D1
D1
S1
D0
S0
1 = IR INPUT SLAVE
0 = NO IR INPUT SLAVE
(ESCRAVO)
A0
D7
D6
D5
D4
D3
D2
1
0
0
0
0
0
ID2
D1
ID1
D0
ID0
SLAVE ID (000 - 111)
Palavra de Controle de
Inicialização - ICW4
A0
D7
1
0
D6
0
D5
D4
D3
D2
0
SFNM
BUF
M/S
D1
AEOI
D0
PM
1 = 8086/8086 MODE
O = MCS-80/85 MODE
1 = AUTO EOI
O = NORMAL EOI
0
1
1
X
0
1



NON BUFFERED MODE
BUFFERED MODE / SLAVE
BUFFERED MODE / MASTER
1 = SPECIAL FULLY NESTED MODE
0 = NOT SPECIAL FULLY NESTED MODE
Diagrama de Fluxo da
Inicialização do PIC 8259
ICW1
ICW2
NO (SNGL=1)
IN CASCADE
MODE
YES (SNGL=0)
ICW3
NO (IC4=0)
IS ICW4 NEEDED
YES (IC4=1)
ICW4
READY TO ACCEPT
INTERRUPT REQUESTS
Palavra de Controle de
Operação - OCW1/2
 OCW1
A0
D7
D6
D5
D4
D3
D2
1
M7
M6
M5
M4
M3
M3
D1
D0
M2
M0
INTERRUPT MASK
1 = MASK SET
0 = MASK RESET
 OCW2
A0
D7
0
R
D6
SL
D5
D4
D3
D2
D1
D0
EOI
0
0
L2
L1
L0
IR LEVEL TO BE ACTED UPON
(000 - 111)
0
0
1
1
0
1
1
0
1
0
0
0
1
1
1
1
1
0
0
1
0
 NON-SPECIFIC EOI COMMAND
 SPECIFIC EOI COMMAND
 ROTATE ON NOM-SPECIFIC EOI COMMAND
 ROTATE IN AUTO EOI MODE (SET)
 ROTATE IN AUTO EOI MODE (CLEAR)
 ROTATE ON SPECIFIC EOI COMMAND **
 SET PRIORITY COMMAND **
** L0 - L2 ARE USED
END OF INTERRUPT
AUTO ROTATION
SPECIFIC ROTATION
Palavra de Controle de
Operação - OCW3
A0
D7
0
0
D6
ESMM
D5
D4
D3
SMM
0
1
D2
P
D1
D0
RR
RIS
1
0
1
1
 READ IRR ON NEXT RD
PULSE
 READ ISR ON NEXT RD
PULSE
1 = POLL COMMAND
0 = NO POLL COMMAND
1
1
0
1
 RESET SPECIAL MASK
 SET SPECIAL MASK
Programa de Inicialização
do PIC 8259
;initialize 8259A
MOV AL, 00010011B ;Edge triggered, single, ICW4
MOV DX, 0FF00H
OUT DX, AL
;point at 8259A control
;send ICW1
MOV AL, 01000000B ;type 64 is first 8259A type
MOV DX, 0FF02H
OUT DX, AL
;point at ICW2 address
;send ICW2
MOV AL, 00000001B ;ICW4, 8086 mode
OUT DX, AL
;send ICW4
MOV AL, 11111010B
OUT DX, AL
;OCW1 to unmask IR0 & IR2
;send OCW1
Arquitetura de Computadores
 Interrupções
do BIOS
– INT 5h - Print screen
» Imprime conteúdo da tela
– INT 10h - Vídeo
» Interrupção do BIOS que trata o vídeo
» Os serviços são passados através do registrador
AH
Arquitetura de Computadores
Modo Resolução Caract.
– INT 10h - Vídeo
0h
» Especificação do modo 1h
2h
• Chama-se com:
3h
AH = 0
4h
AL = Modo
5h
6h
40×25
tx, preto/branco
40×25
tx, 16 cores
80×25
tx, preto/branco
80×25
tx, 16 cores
320×200 gr, 4 cores
320×200 gr, preto/branco
640×200 gr, 2 cores
..........
12h 640×480 gr, 16 cores
..........
Arquitetura de Computadores
– INT 10h - Vídeo
» Ajusta formato do cursor
• Chama-se com:
AH = 1
CH = linha inicial
CL = linha final
- número de linhas = 7
» Posiciona o cursor
• Chama-se com:
AH = 2
DH = linha
DL = coluna
BH = número da
página
Arquitetura de Computadores
– INT 10h - Vídeo
» Ler posição do cursor
• Chama-se com:
AH = 3
BH = número da
página
• Recebe-se em:
DH = linha inicial
DL = linha final
CX = tipo do cursor
» Selecionar página
• Chama-se com:
AH = 5
AL = página
Páginas
0-7
*
Modos
0-3 (placas SVGA)
Modos gráficos
* - depende dos modos suportados por cada
placa.
Arquitetura de Computadores
– INT 10h - Vídeo
» Rolar para cima a janela de vídeo
• Chama-se com:
AH = 6
AL = número de linhas a serem
roladas (Zero (0) rola todas)
CH = linha do canto superior
esquerdo
CL = coluna do canto superior
esquerdo
DH = linha do canto inferior
direito
DL = coluna do canto inferior
direito
BH = atributo a ser usado nas
novas linhas
» Rolar para baixo a janela de vídeo
• Chama-se com:
AH = 7
AL = número de linhas a serem
roladas (Zero (0) rola todas)
CH = linha do canto superior
esquerdo
CL = coluna do canto superior
esquerdo
DH = linha do canto inferior
direito
DL = coluna do canto inferior
direito
BH = atributo a ser usado nas
novas linhas
Arquitetura de Computadores
– INT 10h - Vídeo
» Escreve caracter e atributo
» Ler o caracter e o atributo da • Chama-se com:
posição do cursor
AH = 9
• Chama-se com:
BH = número da
página
AH = 8
AL = caracter
BH = número da
BL = atributo do
página
• Recebe-se em:
caracter
AL = caracter
CX = número de
AH = atributo do
repetições
Arquitetura de Computadores
– INT 10h - Vídeo
» Escreve um ponto (pixel)
• Chama-se com:
» Escreve caracter
AH = 12
• Chama-se com:
AL = cor do pixel. Caso o bit
AH = 10
7 de AL seja 1, a cor do pixel
BH = número da
será o ou-exclusivo com a cor
página
atual.
AL = caracter
BH = página
CX = número de
repetições
CX = coordenada X
(coluna)
DX = coordenada Y (linha)
Arquitetura de Computadores
– INT 10h - Vídeo
» Ler um ponto (pixel)
• Chama-se com:
AH = 13
BH = página
CX = coordenada X
(coluna)
DX = coordenada Y
(linha)
• Recebe-se em:
AL = cor do pixel
» Escreve caracter em modo TTY
• Chama-se com:
AH = 14
BH = número da
página
AL = caracter
BL = cor do 2º plano
* Avança posição do cursor automaticamente.
** Aceita caracteres de controle como bell, avanço
de linha, carriage return e backspace.
Arquitetura de Computadores
– INT 10h - Vídeo
» Obtém o modo do vídeo
• Chama-se com:
AH = 15
• Recebe-se em:
AH = número de
colunas da tela
AL = modo
BH = página ativa
» Escreve caracter em modo TTY
• Chama-se com:
AH = 14
BH = número da
página
AL = caracter
BL = cor do 2º plano
* Avança posição do cursor automaticamente.
** Aceita caracteres de controle como bell, avanço
de linha, carriage return e backspace.
Arquitetura de Computadores
– INT 13h - DISCO
» Reseta sistema de dico
• Chama-se com:
AH = 00h
AL = número do driver
00 - 7Fh floppy disk
80 - FFh hard disk
• Recebe-se em:
CF = 0
sem erro
1
erro
AH = código do erro
» Código do Erro
• 00h - sem erro
• 01h - comando inválido
• 02h - “address mark” não
encontrado
• 03h - disco protegido
• 04h - setor não encontrado
• 05h - falha de reset
• 06h - disco removido
• 08h - erro de DMA
• 09h - erro de limite de DMA
• 10h - setor com erro
• 20h - falha do controlador
• 40h - trilha não encontrada
• 80h - time-out
Arquitetura de Computadores
– INT 13h - DISCO
» Obtém status
• Chama-se com:
AH = 01h
• Recebe-se em:
AL = código do erro
» Ler/Escreve/Verifica/Formata
• Chama-se com:
AH=02h/03h/04h/05h
AL= número de setores
CH= número do cilindro
CL= número do setor
(1, se AH=5)
DH= número da cabeça
DL= número da unidade
ES:BX= buffer
• Recebe-se em:
CF= 0 sem erro
1 erro
AH= código do erro
Arquitetura de Computadores
– INT 13h - DISCO
» Se AH=05h (Formatar)
ES:BX = 4 campos de
entrada para cada
setor
byte 0 - número do cilindro
byte 1 - número da cabeça
byte 2 - número do setor
byte 3 - código do tamanho do
setor
00h - 128 b/s
01h - 256 b/s
02h - 512 b/s
03h - 1024 b/s
Arquitetura de Computadores
– INT 16h - Teclado
» Aguarda a diigitação de um
caracter e o lê
• Chama-se com:
AH = 10h
» Verifica se um caracter está
pronto
• Chama-se com:
AH = 11h
Se um caractere ASCII foi digitado
ZF=0 e
AH = código de varredura
• Recebe-se em
AL = código ASCII
AH = código de varredura
Se um caractere ASCII foi
digitado
AL = código ASCII
Se um caractere especial foi
digitado
• Recebe-se em
AH = código ASCII
estendido
AL = 00h
Caso contrário, ZF=1
Obs.: Não remove do buffer
Arquitetura de Computadores
– INT 16h - Teclado
» Obtêm status do teclado
• Chama-se com:
AH = 12h
• Recebe-se em
AL = status
01h - shift direito ativo
02h - shift esquerdo ativo
04h - crtl ativo
08h - alt ativo
10h - num lock ativo
20h - scroll lock ativo
40h - caps lock ativo
80h - inserção ativa
Arquitetura de Computadores
– INT 17h - Impressora
» Imprime caractere
• Chama-se com:
AH = 00h
AL = caractere
DX = número da
impressora
• Recebe-se em
AH = status
» Inicializa impressora
• Chama-se com:
AH = 01h
DX = número da
impressora
» Obtêm status da impressora
• Chama-se com:
AH = 02h
DX = número da impressora
• Recebe-se em
AH = status
01h - time-out
08h - erro de I/O
10h - impressora selecionada
20h - sem papel
40h - reconhecimento
80h - impressora desocupada
Arquitetura de Computadores
– INT 19h - Warm Start
» Atualiza contador do relógio
• Chama-se com:
AH = 01h
– INT 1Ah - Obtém / atualiza
CX = parte de alta-ordem do
tempo / data
contador
» Ler contador do relógio
DX = parte de baixa-ordem
do contador
• Chama-se com:
» Ler relógio
AH = 00h
• Chama-se com:
• Recebe-se em:
AH = 02h
AL = 0, se não se
passaram 24h da última
• Recebe-se em:
leitura
CH = horas em BCD
CX = parte de altaCL = minutos em BCD
ordem do contador
DH = segundos em BCD
DX = parte de baixaDL = milesegundos em
ordem do contador
BCD
Arquitetura de Computadores
– INT 1Ah - Obtém / atualiza » Ler data
• Chama-se com:
tempo / data
AH = 04h
» Atualiza relógio
• Chama-se com:
AH = 03h
CH = horas em BCD
CL = minutos em BCD
DH = segundos em BCD
DL = milesegundos em
BCD
• Recebe-se em:
CH = século (19 ou 20) em
BCD
CL = ano em BCD
DH = mês em BCD
DL = dia em BCD
» Atualiza data
• Chama-se com:
AH = 05h
CH = século (19 ou 20) em
BCD
CL = ano em BCD
DH = mês em BCD
DL = dia em BCD
Conexao Prot Board
Vamos aqui mostar como foi implementada a
conecção entre o porta Paralela e o Prot Board.
O computador geralmente possui 3 portas: LPT1,
LPT2 e LPT3 (alguns possuem LPT4). Cada porta dessas
possui 3 endereços: data, status e control. Esses endereços
estão numa ordem sequencial. Isso quer dizer que se a porta
data tem o endereço 0x038, então o endereço correspondente
de status é 0x0379 e o control é 0x037a.
Conexao entre a Porta Paralela e
o Prot Board
Endereços de Acesso a Porta Poralela
Hoje em dia, os computadores estão basicamente
configurados da seguinte maneira:
Printer
LPT1
LPT2
LPT3
Data Port
0x0378
0x0278
0x03bc
Status
0x0379
0x0279
0x03bd
Obs: A porta normalmente utilizada e a LPT1
Control
0x037a
0x027a
0x03be
Conexao entre a Porta Paralela e
o Prot Board
Abaixo temos a a função dos pinos no conector DB25:
Conexao entre a Porta Paralela e
o Prot Board
Na figura temos a direção dos pinos de acordo com função
Conexao entre a Porta Paralela e
o Prot Board
Desta forma utilizamos para a montagem os bits de
dados D0 ~ D4 como saída, e como entrada Ack no pino 10,
Busy no pino 11, Paper end no pino 12, Slct out no pino 13 e
Error no pino 15.
A saídas foram conectadas nas 4 entrada do 2º display
de sete segmentos da Placa (que possui decodificador), de
acordo com a sequência;
D0 -> I0 ; D1 -> I1 etc... A saída D4 não esta sendo utilizada
e de D5~D7 não foram conectadas.
Conexao entre a Porta Paralela e
o Prot Board
As Entradas estão conectadas as primeiras chaves da
placa e ligada também ao 1º display de sete segmentos, não
lembro qual foi bit foi utilizado como mais significativo e
qual como menos significativo.
Desta forma quando se comuta as chaves de entrada,
verifica-se a alteração no valor do 1º display na placa.
O pino 25 do conector estar servindo de com sinal de
referência(GND) para a Placa.
Obs: o Lembrando que o sinal de Controle BUSY invertido
pelo hardware da Porta Paralela
Arquitetura de Computadores
– Endereços da Porta Paralela
» Porta
2
3
4
5
6
7
8
9
LPT1
LPT2
D7
D6
D5
D4
D3
D2
D1
D0
Lógica Invertida:
escrevendo-se 0,
tem-se 1 na saída
Reg de Dados Reg de Status Reg de Controle
378h
278h
11
10
12
13
15
379h
279h
Busy (LI)
#Ack
PE
SELECT
#ERROR
#IRQ
Reservado
Reservado
17
16
14
1
37Ah
27Ah
Reservado (Todos são LI)
Reservado
Direção (não conctado)
IRQ ENABLE (não conctado)
# SELECT INPUT
INIT
#AUTOFEED
#STROBE
Arquitetura de Computadores
– Teste de Presença de Porta
MOV AH,3
MOV AL,AH
MOV DX,378H
OUT DX,AL
XOR AL,AL
IN AL,DX
CMP AH,AL
JNZ PortNotPresent
(Verificar o endereço 0040:0008h)
Arquitetura de Computadores
+5V
330
(378h)D0
2
(379H)
BUSY 11
+5V
10K
Arquitetura de Computadores
– Controle sobre a Porta Paralela
..................
T1:MOV AL,01h; apaga-se o LED
MOV AL,01h ;apaga LED
OUT DX,AL
MOV DX,378h
MOV
AH,01h
; verifica-se
OUT DX,AL
INT 16h; se uma tecla foi presT: MOV DX,379h
JNZ T2; sionada
IN AL,DX
; lê reg de status
JMP
T
TEST AL,80h ; e verifica se tecla foi
T2:MOV AH,4CH
JNZ T1
; pressionada
INT
21h
; fim
MOV AL,00h ; se foi, acende-se o LED
OUT DX,AL
CALL DELAY
Arquitetura de Computadores
– INT 14h - serial (BIOS)
– INT 21h
» CONSOLE:SERVIÇOS 01 - 0Ch
» AJUSTE DE INTERRUPÇÃO: 25h,35h
» DATA E HORA: 2Ah-2Dh
» FINALIZAÇÃO DE PROGRAMA: 4Ch,31h
» DIRETÓRIO E ARQUIVO:39h-43h
C com Assembly
/* C com Assembly - Inline Teste de Presenca de Paralela */
#include <stdio.h>
int main()
{
printf("Teste da Paralela \n");
asm mov dx,0x378
}
asm mov al,0xf0
asm mov ah,al
asm out dx,al
asm xor al,al
asm mov dx,0x378
asm in al,dx
asm xor al,ah
asm jnz t
printf("LPT1 presente!\n");
t:
return 0;
C com Assembly
/* C com Assembly - Inline Teste de Presenca de Paralela - */
#include <stdio.h>
extern int xplusy(int x, int y);
int main()
{
int a,b
a=5;
b=7;
printf(“A soma é %d”,xplusy(a,b));
return 0;
.MODEL SMALL
.CODE
PUBLIC xplusy
xplus PROC NEAR
PUSH BP
MOV BP,SP
SUB SP,02
MOV AX,[BP+04]
ADD AX,[BP+06]
MOV [BP-02],AX
MOV SP,BP
POP BP
RET
xplusy ENDP
C com Assembly
.MODEL SMALL
.CODE
PUBLIC xplusy
xplus PROC NEAR
PUSH BP
MOV BP,SP
SUB SP,02
MOV AX,[BP+04]
ADD AX,[BP+06]
MOV [BP-02],AX
MOV SP,BP
POP BP
RET
xplusy ENDP
END
.
1004
1006
1008
100A
100C
12
z
valor de BP
endereço de retorno
5
a
7
b
Topo da Pilha
do Main
C com Assembly
/* C com Assembly - Inline Teste de Presenca de Paralela - */
#include <stdio.h>
extern int xplusy(int x, int y);
int main()
{
int a,b
a=5;
b=7;
printf(“A soma é %d”,xplusy(a,b));
return 0;
.MODEL SMALL,C
.CODE
PUBLIC xplusy
xplus PROC NEAR C, x:word,
y:word
LOCAL z:word
MOV AX,x
ADD AX,y
MOV z,AX
RET
xplusy ENDP
END
C com Assembly
/* C com Assembly - Inline Teste de Presenca de Paralela - */
#include <stdio.h>
extern int xplusy(int x, int y);
int main()
{
int a,b
a=5;
b=7;
printf(“A soma é %d”,xplusy(a,b));
return 0;
Código gerado para xplusy:
PUSH BP
MOV BP,SP
SUB SP,02
MOV AX,[BP+04]
ADD AX,[BP+06]
MOV [BP-02],AX
MOV SP,BP
POP BP
RET
C com Assembly
• bcc -S nome.asm nome.c
- converte arquivo C em
assembly
• bc - BorlandC
• tasm - TurboAssembler
• td - TurboDebugger
Download

slides