Sunteți pe pagina 1din 167

Centro Federal de Educao Tecnolgica do Rio

Grande do Norte
Unidade de Ensino de Natal
Gerncia de Tecnologia da Informao e Educacional de
Telemtica

Apostila de Curso
Verso 01.2000

Professora:
Anna Catharina
Material adaptado da apostila da disciplina de
Microprocessadores do prof. MSc. Jos Alberto Nicolau de Oliveira, DEE,
UFRN

Fevereiro/2000

Sumrio

Sumrio
1 Introduo a Microprocessadores

1.1
1.2
1.3

1
3
5

Arquitetura de Computadores
Arquitetura Bsica de Microprocessadores
Evoluo dos Microprocessadores

2 Anlise de um Microprocessador Genrico

2.1 Arquitetura Interna


2.1.1
Unidades Funcionais
2.1.2
Estrutura Pipelined
2.2 Funo dos Pinos
2.3 Sistema de Clock e Ciclos de Barramento

7
7
8
10
13

3 Sistema de Memria de Computadores

14

3.1 Estrutura de Memria


3.1.1
Terminologia
3.1.2
Armazenamento de Informaes na Memria
3.2 Organizao da Memria Principal
3.2.1
Organizao Modular da Memria
3.2.2
Organizao Lgica
3.2.3
Organizao Fsica
3.2.4
Acesso Memria
3.3 Memria Cache
3.3.1
Arquitetura de um Sistema Cache
3.3.2
Taxa de Acerto

14
14
17
19
19
20
21
22
23
23
24

4 Arquitetura de Software de um Microprocessador

25

4.1 Modelo de Software


25
4.2 Registradores
26
4.2.1
Registradores de Dados (Registradores de Uso Geral)
26
4.2.2
Registradores de Segmento
27
4.2.3
Registradores Ponteiros e de ndice (Registradores de Deslocamento)
29
4.2.4
Registrador de Flags
29
4.3 Pilha
31
4.4 Modos de Endereamento de Memria
32
4.4.1
Modo de Endereamento por Registro
33
4.4.2
Modo de Endereamento Imediato
34
4.4.3
Modo de Endereamento Direto
35
4.4.4
Modo de Endereamento Indireto por Registro
36
4.4.5
Modo de Endereamento por Base
37
4.4.6
Modo de Endereamento Direto Indexado
38
Anna Catharina/CEFET-RN/2000

Sumrio

4.4.7

Modo de Endereamento por Base Indexada

Anna Catharina/CEFET-RN/2000

39

ii

Sumrio

5 Programao em Linguagem Assembly

41

5.1 Segmentao e Estrutura de Programao (Programa Bsico)


41
5.1.1
Sintaxe dos Comentrios
41
5.1.2
Sintaxe das Instrues e Diretivas do Assembly
42
5.1.3
Modelo de Programa Assembler Simplificado (.EXE)
42
5.1.4
Diretivas Simplificadas de Definio de Segmentos
43
5.1.5
Operadores de Referncia a Segmentos no Modo Simplificado
44
5.2 Ferramentas para Montagem, Ligao e Depurao de Programas44
5.2.1
Montador Assembler (TASM)
44
5.2.2
Ligador (TLINK)
44
5.2.3
Depurador Turbo Debugger (TD)
45
5.3 Diretivas do Assembler
46
5.3.1
Diretivas de Equivalncia para o Programa (Definio de Constantes) 46
5.3.2
Diretiva de Definio de Base Numrica
46
5.3.3
Diretivas de Definio de rea de Armazenamento de Dados (Variveis)
46
5.3.4
Diretivas de Definio de Procedimentos
48
5.3.5
Diretivas de Controle do Assembly
48
5.4 Operadores do Assembler
48
5.4.1
Operadores para Dados
48
5.4.2
Operadores de Especificao de Tamanho
49
5.5 Conjunto de Instrues Assembly
50
5.5.1
Instrues para Transferncia
50
5.5.2
Instrues Aritmticas
51
5.5.3
Instrues Lgicas
53
5.5.4
Instrues que Modificam Flags
54
5.5.5
Instrues de Chamada e Retorno de Subrotinas
54
5.5.6
Instrues para Manipulao de Pilha
55
5.5.7
Instruo NOP
55
5.5.8
Instrues de Entrada e Sada
55
5.5.9
Instruo de Comparao
56
5.5.10
Instrues de Desvio
56
5.5.11
Instrues de Repetio
58
5.6 Programao Estruturada em Assembly
59
5.6.1
Ferramentas Utilizadas em Controle de Fluxo
59
5.6.2
Estrutura Se-Ento-Seno
59
5.6.3
Estrutura Repita-At que
60
5.6.4
Estrutura Repita-Enquanto
60
5.6.5
Estrutura Enquanto-Repita
60
5.6.6
Estrutura For (Para)
61
5.6.7
Estrutura Case
61
6 Interrupes e Excees

62

6.1
6.2
6.3
6.4
6.5

63
65
67
68
69

Vetores e Descritores de Interrupo


Interrupo por Software: Comandos INT e IRET
Interrupo por Hardware: Controlador de Interrupes 8259
Habilitao, Desativao ou Mascaramento de Interrupes
Interrupes Internas e Excees

Anna Catharina/CEFET-RN/2000

iii

Sumrio

Anexo A Tabela ASCII

70

Anexo B Cdigo Estendido do Teclado

72

Anexo C Interrupes BIOS e DOS

72

Interrupes do BIOS
Interrupes do DOS

72
72

Anna Catharina/CEFET-RN/2000

iv

Introduo a Microprocessadores

1 Introduo a Microprocessadores
1.1 Arquitetura de Computadores
Embora tenham ocorrido revolucionrias transformaes na rea de
Eletrnica, os microcomputadores de hoje ainda mantm a mesma
concepo funcional dos primeiros computadores eletrnicos. Tal
concepo, conhecida como Arquitetura de Von Neumann, definida
da seguinte forma:
Uma unidade central de processamento recebe informaes atravs
de uma unidade de entrada de dados, processa estas informaes
segundo as especificaes de um programa armazenado em uma
unidade de memria, e devolve os resultados atravs de uma
unidade de sada de dados.
A Figura 1 mostra, por diagrama de blocos, a organizao de um
sistema com estas caractersticas. O sistema de computador envolve,
como pode ser visto, o computador e os elementos geradores e receptores
de informaes.
Sistema de Computador

Elemento Gerador
das Informaes
Unidade de
Memria

Unidade de
Entrada de Dados

Unidade Central
de Processamento

Computador

Unidade de Sada
de Dados

Elemento Receptor
das Informaes

Figura 1

Organizao de um sistema de computador

Unidade Central de Processamento (CPU) a unidade gestora do


computador capaz de administrar todas as operaes de leitura/escrita da
memria ou de uma unidade de entrada/sada de dados, de executar
operaes aritmticas ou lgicas e de interpretar todas as instrues
recebidas de um programa que est em execuo.
Microprocessador dispositivo LSI (large scale integration alto grau
de integrao) que condensa em um nico chip a maioria das funes
associadas a uma unidade central de processamento.
Anna Catharina/CEFET-RN/2000

Introduo a Microprocessadores

Microcomputador ou sistema a microprocessador computador


que se caracteriza por apresentar blocos lgicos de CPU, memria e E/S
bem definidos e onde todas as funes de processamento da unidade
central so desempenhadas por um processador (Figura 2).

Anna Catharina/CEFET-RN/2000

Introduo a Microprocessadores

Sistema de Microcomputador
CPU

Unidade de
Memria

Microprocessador

Microcomputador ou
Sistema de Microprocessador

Sistema internodevias
Unidade de E/ S
de Dados
Sistema externodevias
Elementos
Receptores/ Transmissores
das Informaes

Figura 2

Sistema de microcomputador

Perifrico qualquer elemento gerador ou receptor de informao em


sistemas de computadores (Figura 3).

Perifricos para
Entrada de Dados
Teclado
Joystick
Scanner
Sensores
Mouse
Scanner

Figura 3

Microcomputador

Perifricos para
Entrada/ Sada de Dados

Perifricos para
Sada de Dados
Impressora
Monitor devdeo
Altofalante
Displays
Plotter

Unidadedediscorgido
Unidadedediscoflexvel
UnidadedeCD-ROM
Unidadedefita magntica

Perifricos de um microcomputador

Unidades de Entrada/Sada blocos internos responsveis pelas


transferncias de dados entre o microcomputador e qualquer dispositivo
perifrico. atravs de uma unidade de entrada de dados que as
informaes de perifrico de entrada so levadas CPU ou memria.
De forma similar, atravs de uma porta de sada de dados que as
informaes so levadas da CPU ou da memria para um perifrico de
sada.
Hardware e Software
Hardware o conjunto de dispositivos eltricos/eletrnicos que
englobam a CPU, a memria e os dispositivos de entrada/sada de um
sistema de computador. O hardware composto de objetos tangveis
(circuitos integrados, placas de circuito impresso, cabos, fontes de
alimentao, memrias, impressoras, terminais de vdeo e teclados).
O software, ao contrrio, consiste em algoritmos (instrues
detalhadas que dizem como fazer algo) e suas representaes para o
computador ou seja, os programas.
Anna Catharina/CEFET-RN/2000

Introduo a Microprocessadores

Qualquer instruo efetuada pelo software pode ser implementada


diretamente em hardware e qualquer operao executada pelo hardware
pode tambm ser simulada pelo software.
A deciso de se colocar certas funes em hardware e outras em
software se baseia em fatores, tais como: custo, velocidade,
confiabilidade e possibilidade/facilidade de modificao.

1.2 Arquitetura Bsica de Microprocessadores


Para se compreender bem a arquitetura bsica de um microprocessador (Figura 4) basta associar as operaes que caracterizam
uma unidade central de processamento com os elementos funcionais que
permitem a sua realizao.

Microprocessador

Businterno
Registrador
de Instruo

Decodificador
de Instruo

Busdedados
Registros de
Uso Geral
FPU

Busdeendereo
ALU
Busdecontrole

Unidade de
Controle
Cache
Interna (L1)

Figura 4

Arquitetura bsica de um microprocessador com FPU e cache interna

1 Para administrar operaes de leitura/escrita da memria ou de uma


E/S de dados so necessrias:
uma unidade de controle, que oriente a busca ou o envio das
informaes;
uma pequena capacidade de memria onde estas informaes
possam ficar temporariamente armazenadas (registrador de uso
geral); e
alguns barramentos (ou vias) onde possam ser manipulados os
dados, os endereos e os sinais de controle.

Anna Catharina/CEFET-RN/2000

Introduo a Microprocessadores

2 Para executar operaes aritmticas e lgicas necessria a


presena de uma ALU (arithmetic and logic unit unidade
lgica/aritmtica) e, nos processsadores mais avanados, uma FPU (float
point unit unidade de ponto flutuante) para operaes com nmeros
reais. A incluso da FPU veio permitir a execuo de operaes antes s
possveis com o auxlio de um coprocessador aritmtico (operaes em
ponto flutuante).
3 Para interpretar as instrues estabelecidas por um programa devem
existir:
um decodificador de instruo (microcdigo) e;
um registrador de instruo, no qual a instruo recebida fica
temporariamente armazenada.

Anna Catharina/CEFET-RN/2000

Introduo a Microprocessadores

Barramentos
Um barramento ou via ou bus um conjunto de pinos do
microprocessador por onde trafegam um ou mais sinais de hardware. Um
microprocessador possui trs tipos de barramentos utilizados para
transporte: bus de dados, bus de endereos e bus de controle.
Barramento de dados: Barramento bidirecional, utilizado para realizar
o intercmbio de dados e instrues com o exterior. Uma das principais
caractersticas de um microprocessador o nmero de bits que o
barramento de dados pode transferir, que determina se o processador
de 8, 16, 32 ou 64 bits. Determina o nmero de bits da palavra de dados
que pode ser transferida de/para o microprocessador e, tambm (quase
sempre) o tamanho da palavra de dados que pode ser operada pela ALU.
Barramento de endereos: Barramento unidirecional, constitudo de
um conjunto de linhas de endereo que indicam a posio de memria
onde se encontra o dado requisitado. Uma vez dada a posio, a
informao armazenada na memria passar CPU atravs do
barramento de dados. Define a quantidade de posies de memria e/ou
de portas de entrada/sada que podem ser acessadas pelo
microprocessador (para n bits do barramento de endereos, 2 n bytes de
memria podem ser endereados, ou seja, 2n endereos fsicos podem ser
acessados capacidade de endereamento).
Barramento de controle: Barramento bidirecional, formado por um
nmero varivel de linhas, atravs das quais se controlam as unidades
complementares (habilitao e desabilitao das memrias para leitura e
escrita, permisso para perifricos ou coprocessadores acessarem as vias
de dados e endereos). Transfere, para as diversas partes do sistema,
sinais que definem e orientam toda a sua operao.
Sinais de controle tpicos de um microprocessador so:
leia de uma posio de memria (memory read);
leia de uma porta de E/S (I/O read);
escreva em uma posio de memria (memory write);
escreva em uma porta de E/S (I/O write);
pedido de interrupo de programa (interruption request);
pedido de uso de vias (bus request ou hold request);
pedido de espera (wait ou ready);
sinal de relgio (clock); e
sinal de partida/reincio (reset).

Anna Catharina/CEFET-RN/2000

1.3 Evoluo dos Microprocessadores


Bits do
Bits do
Bits
Cach
Microprocessado
bus
bus de
Interno
e
Observaes
r
de dados endereo
s
L1
s
1a Gerao
Intel 4004
4
4
4
Primeiro microprocessador (1971)
Intel 8008
8
8
8
Calculadoras ou sistemas de controle dedicados
Intel 8080/8085
8
8
16
Arquitetura escalar com estrutura seqencial; Outros fabricantes: Motorola
(6800) e Zilog (Z80)
2a Gerao
Intel 8086/8088
16/8
16/8
20
IBM PC/XT; Arquitetura escalar e estrutura pipelined; Outros fabricantes: Zilog
(Z8000) e Motorola (68000)
Intel 80286
16
16
24
IBM PC/AT 286; Arquitetura escalar e estrutura pipelined; Outro fabricante:
Motorola (68010)
3a Gerao
Intel 386DX
32
32
32
Primeira CPU de 32 bits a incluir gerenciamento de memria; Ambiente multiusurio; Arquitetura escalar e estrutura pipelined melhorada; Possibilidade de
cache L2; Outro fabricante: Motorola (68020/68030)
Intel 386SX
32
16
24
Idntico ao 386DX, exceto pelos barramentos
4a Gerao
Intel 486DX
32
32
32
8KB Arquitetura escalar e estrutura pipelined otimizada; Possui FPU
Intel 486DX2
32
32
32
8KB Possui FPU; Utiliza duplicao do clock
Intel 486DX4
32
32
32
16KB Possui FPU; Utiliza triplicao do clock
Intel 486SX
32
32
32
8KB No possui FPU (coprocessador interno)
Cyrix 486DLC
32
32
32
1KB Semelhante ao Cyrix 486SLC, com 32 bits
AMD 5x86
32
32
32
16KB Semelhante a um 486 de 133MHz, com desempenho de um Pentium-75
Cyrix 5x86 (M I)
32
32
32
16KB Possui FPU; Caractersticas do Pentium e pinagem do 486DX4
5a Gerao
Intel Pentium
32
64
32
16KB Cache L1 = 8KB instrues + 8KB dados; Projeto hbrido CISC/RISC
AMD K5
32
64
32
24KB Semelhante ao Pentium; Projeto hbrido CISC/RISC; Cache L1 = 16KB instrues
+ 8KB dados
Cyrix 6x86 (M II)
32
64
32
64KB Caractersticas do Pentium Pro e pinagem do Pentium; FPU (64 bits); Tecnologia
MMX; Arquitetura superescalar; Execuo dinmica
a
6 Gerao
Intel Pentium Pro
32
64
32
16KB Execuo dinmica; Tecnologia DIB; Cache L2 de 256 e 512KB
Intel
Pentium
32
64
32
16KB Pentium com tecnologia MMX; Esquema duplo de tenso nos circuitos interno
MMX
(core) e externo
AMD K6
32
64
32
64KB Tecnologia MMX; Arquitetura superescalar; FPU (64 bits); Cache L1 = 32KB

AMD K6-2 (K6 3D)


AMD K6-3 (K6+)

32
32

64
64

32
32

64KB
64KB

Intel
Celeron

32

64

32

32KB

Intel Pentium II

32

64

32

32KB

Intel Pentium II
Xeon
Intel Pentium III

32

64

32

32KB

32

64

32

32KB

Intel Pentium
Xeon

32

64

32

32KB

Pentium

III

Anna Catharina/CEFET-RN/2000

Introduo a Microprocessadores
instrues + 32KB dados
Semelhante ao K6. Mais velocidade (barramento externo de 100MHz)
Semelhante ao K6-2. Cache L2 (256KB) integrado ao processador. Cache L3 na
placa-me.
Cache L1 = 16KB instrues + 16KB dados; Cache L2 de 128KB integrada;
Tecnologia MMX;
FPU (32 e 64 bits); Execuo dinmica; Arquitetura superescalar
Cache L1 = 16KB instrues + 16KB dados; Tecnologia DIB; Tecnologia MMX;
Execuo dinmica; Cache L2 de 512KB; Suporte memria expandida de 36 bits
(endereamento de memria > 4GB)
Cache L2 de 1MB ou 2MB; Pentium II projetado para servidores e estaes de
trabalho
Cache L2 de 512KB; FPU (32, 64 e 80 bits); Tecnologia MMX; Tecnologia DIB;
Execuo dinmica; Suporte memria expandida de 36 bits; Internet Streaming
SIMD Extensions; Intel Processor Serial Number
Cache L2 de 512KB, 1MB ou 2MB; Pentium III projetado para servidores e
estaes de trabalho

Introduo a Microprocessadores

Durante muito tempo uma disputa desleal vinha sendo travada


entre empresas dedicadas produo e comercializao de
microprocessadores: de um lado a poderosa Intel, lder de mercado,
dominadora de avanadas tecnologias e manipuladora de tcnicas e
estratgias que no deixavam folga para concorrncia; de outro lado,
todas as outras empresas que sempre tiveram de se contentar em receber
migalhas da fatia do mercado restante, sempre com produtos de
tecnologia licenciada e atrasados em relao aos produtos da Intel.
Entretanto, esta situao comea a mudar. Competidores como AMD,
Cyrix, NexGen, Sun Microsystems e algumas outras empresas associadas
comeam a introduzir no mercado novos processadores com significativas
diferenas dos integrados Intel. Estes projetos originais e altamente
otimizados prometem melhor desempenho do que os Pentiums da Intel,
ao mesmo tempo mantendo total compatibilidade com os softwares DOS e
Windows. O Pentium marca uma bifurcao entre a era exclusiva da Intel
e uma nova era, quando diferentes tecnologias esto surgindo, com o
desenvolvimento de novas microarquiteturas, capazes, dizem os
fabricantes, de superar o desempenho do Pentium.
Percebe-se, com a evoluo tecnolgica e a reduo nos custos de
desenvolvimento dos componentes eletrnicos, que:
1. as mquinas CISC (complex instruction set computer) aos
poucos absorvem caractersticas tpicas de RISC (reduced
instruction set computer), como estrutura superescalar e cache
otimizados de memria interna; e
2. as mquinas RISC, em contrapartida, aos poucos vo
barateando seus custos, mantendo excelente rapidez na
execuo de programas, e passando a competir de igual para
igual com as mquinas CISC de ltima gerao.
Dentre as novas tecnologias adotadas, podemos comentar:
MMX (multimedia extensions): Tecnologia projetada para
acelerar aplicaes de multimdia e comunicao, adicionando
novos conjuntos de instrues e diferentes tipos de dados, alm
de explorar o paralelismo (SIMD single instruction multiple
data).
DIB (dual independent bus): Arquitetura composta pelo
barramento de cache L2 e o barramento de sistema (entre o
processador e a memria principal), ambos podendo ser usados
simultaneamente.
Cache L2 acoplada (integrada) ao processador dentro de um
nico encapsulamento.
Execuo dinmica (Microarquitetura P6): Previso de mltiplos
desvios nos programas em execuo, acelerando o fluxo de
trabalho do processador; Anlise de fluxo de dados,
reordenando o escalonamento das instrues; e Execuo
especulativa, antecipando as instrues do programa e
executando as que provavelmente sero necessrias.
Anna Catharina/CEFET-RN/2000

Introduo a Microprocessadores

Internet Streaming SIMD Extensions: Conjunto de novas


instrues, incluindo SIMD para ponto flutuante e instrues
SIMD adicionais e de controle de cache.
Intel Processor Serial Number: nmero de srie eletrnico do
processador que permite sua identificao por redes e
aplicaes.
Tenso dupla de operao Intel: 2,0 ou 2,8V para os circuitos
internos (core) e 3,3V para os circuitos que fazem ligao
externa.
Encapsulamento S.E.C. (single edge contact): integra todas as
tecnologias de alto desempenho do processador.

Anna Catharina/CEFET-RN/2000

1
0

Anlise de um Microprocessador Genrico

2 Anlise de um Microprocessador Genrico


Por questes didticas, ser feita, nesse captulo, a anlise de um
processador genrico com muitas caractersticas comuns aos
microprocessadores da famlia 80x86 da Intel.
Para trabalhar com um novo microprocessador, o programador ou
projetista deve conhecer detalhes sobre: a arquitetura interna; a funo
dos pinos e o timing (temporizao) durante os ciclos de barramento; e a
estrutura de software.
Pela anlise da arquitetura interna ser possvel saber quais so e
como esto organizados os seus registradores, qual o nmero de bits nos
barramentos de dados, de controle e de endereos, quais as
caractersticas da ALU, e quais as suas lgicas de decodificao e de
controle.
Conhecendo as funes dos pinos e o timing durante os ciclos de
barramento, ser possvel ao usurio definir, com exatido, dentre outras
coisas, qual a relao pino/tarefa, como e quando uma dada ao do
processador se realizar ou, at mesmo, se determinado pedido de
servio ser (e quando) ou no atendido pelo processador.
Conhecendo a estrutura de software de ser possvel desenvolver
programas sem ter que entrar em detalhes de implementao do chip.
Caractersticas do processador genrico proposto para anlise:
alimentao por fonte nica, baixa potncia de dissipao,
sadas bufferizadas;
vias independentes para dados, endereo e controle;
capacidade de endereamento de 1 Mbyte de memria e 64
kbytes de portas de E/S;
grupo de aproximadamente 150 instrues;
instrues diferenciadas para acesso a memria ou a E/S;
lgica interna para controle de pedidos de interrupo de
programa e de DMA;
lgica de controle para operao com coprocessador aritmtico;
e
arquitetura escalar pipelined implementada por 4 unidades
funcionais bsicas: unidades de barramentos, decodificao,
execuo e gerao de endereos (UB, UI, UE e UA).

2.1 Arquitetura Interna


2.1.1 Unidades Funcionais

Anna Catharina/CEFET-RN/2000

1
1

Anlise de um Microprocessador Genrico

A arquitetura interna do microprocessador caracterizada pela


existncia de quatro unidades funcionais bsicas: UB, UI, UE e UA.
A unidade de interfaceamento de barramentos (UB), atravs das
interfaces de controle de vias, da interface do bus de endereos e da
interface do bus de dados, manipula todos os sinais de controle,
endereos e dados necessrios para que ocorram os acessos memria e
E/S requeridos pela CPU. Ela tambm responsvel pelo tratamento dos
sinais necessrios interface de unidades coprocessadoras e outros
barramentos mestres. Alm disso, incorpora uma pequena memria de 8
bytes: a fila de pr-busca (prefetch), onde so armazenados os ltimos
dados buscados da memria ou de uma E/S. A UB opera tipicamente por
looking ahead, buscando instrues na memria e colocando-as na fila de
pr-busca.
A unidade de decodificao de instrues (UI) recebe possveis
instrues da fila de pr-busca, decodifica-as (atravs do decodificador de
instrues), e gera uma nova fila de instrues pr-decodificadas para a
unidade de execuo.
A unidade de execuo (UE) executa as instrues prdecodificadas pela UI. Caso a instruo exija acessos a memria ou a
alguma E/S, as pr-buscas so suspensas e a instruo em curso na UE
ter acesso aos barramentos, atravs da UB. UE esto relacionados
todos os registradores de uso geral e de controle da ALU.
A unidade de gerao de endereos (UA) responsvel pela
gerao dos endereos fsicos necessrios operao da CPU.
UA
UB
Registrador
de Base
Registrador
de Segmento

Interface do
Busde Endereo

Bus deEndereo

Interface de
Controle de Vias

Bus deControle

Interface do
Busde Dados
UE

ALU
Registradores de
Uso Geral

Controle
da UE

Figura 5

Anna Catharina/CEFET-RN/2000

Bus deDados

Fila de
Pr-busca
UI
Fila de Instrues Decodificador
Decodificadas
de Instruo

Arquitetura interna do processador

1
2

Anlise de um Microprocessador Genrico

2.1.2 Estrutura Pipelined


Os processadores da 1a gerao possuiam uma arquitetura escalar
com estrutura seqencial. Dessa forma, a quantidade de ciclos
necessrios para executar um conjunto de instrues era sempre igual
quantidade total de ciclos alocados para as unidades, uma vez que apenas
uma das unidades poderia estar sendo utilizada a cada ciclo.
A partir da 2a gerao, uma estrutura pipelined comeou a ser
adotada pelos processadores. Nesse caso, em um determinado ciclo, pode
haver mais de uma unidade sendo utilizada, dependendo da alocao de
recursos (unidades) das instrues a serem executadas.
A execuo de uma instruo pode ser distribuda nas seguintes
fases lgicas para um pipeline de instrues (Figura 6):
1. Determinao do endereo da instruo e busca na memria [IF
= instruction fetch]
2. Decodificao da instruo a ser executada [ID = instruction
decode]
3. Gerao dos endereos e busca dos operandos [OF = operand
fetch]
4. Execuo da instruo [EX = execution]
5. Armazenamento do resultado [WB = write back]

Anna Catharina/CEFET-RN/2000

1
3

Anlise de um Microprocessador Genrico

IF

ID

OF

EX

WB

UB
Busde Endereo
Busde Dados
Fila de pr-busca

UI
Fila de ID

UA UB
Busde Endereo
Busde Dados

UE

UA UB
Busde Endereo
Busde Dados

Figura 6

Fases lgicas e recursos fsicos necessrios execuo de instrues em


um pipeline

Aps a execuo das instrues possvel determinar a quantidade


total de ciclos gastos e calcular a taxa mdia de ciclos por instruo
Total de
iclos
C

(CPI), dada por: CPI N de Instru


. O CPI significa a quantidade mdia
es
de ciclos necessrios para executar uma instruo.
Uma outra medida que pode ser determinada o ganho da
estrutura pipelined sobre a estrutura seqencial. O ganho, tambm
CPIouciclos
seqencial

conhecido como Speedup, dado por: Speedup


ou
CPIouciclos
pipelined

S( n)

T(1)
. S(n) 1, significa que o desempenho da estrutura pipelined
T(n)

melhor que ou igual ao da seqencial; caso contrrio, teremos 0 < S(n) <
1.
Exemplo: Dado o seguinte conjunto de instrues e os recursos
necessrios para sua execuo, calcule o CPI, considerando que as filas
presentes nas unidades comportam apenas uma instruo.
I1 = {UB, UI, UE, UA, UB}
I2 = {UB, UI, UE, UE}
I3 = {UB, UI, UE}
I4 = {UB, UI, UA, UB, UE,
UA, UB}
I5 = {UB, UI, UE, UA, UB}
I6 = {UB, UI, UE}
A Figura 7 ilustra como instrues so executadas na arquitetura escalar
com estrutura pipelined do processador. Observe que, no exemplo, as
execues das instrues 1, 4 e 5 exigem acesso aos barramentos
externos, enquanto as execues das demais instrues so feitas
internamente. Um dado importante para a execuo no pipeline a
capacidade das filas presentes na UI e na UB (de instrues decodificadas
e de pr-busca), que determina a quantidade mxima de instrues que
podero estar presentes nessas unidades. Uma observao deve ser feita
quanto UB: a fila de pr-busca armazena instrues a serem
decodificadas, no impedindo que outra instruo esteja acessando
barramentos para leitura ou escrita de dados na memria. Portanto, a
exigncia na UB que apenas uma instruo pode acessar os
Anna Catharina/CEFET-RN/2000

1
4

Anlise de um Microprocessador Genrico

barramentos em um determinado ciclo. A existncia de uma unidade


ociosa configura uma bolha () no pipeline.
I
UB I1 I2 I3 I4 I 1 I5 I6 I4
4

I5

I4

UI

I1

I2

I3

I3

I4

I5

I6

I6

UE

I1

I2

I2

I3

I5

I4

I6

UA

I1

I4

I5

I4

10

11

Ciclo
s
Figura 7

Execuo das instrues do exemplo numa estrutura pipeline

Clculos para o Exemplo:


Estrutura pipelined:
Total de Ciclos = 11
N de Instrues = 6
CPI

ciclos/instruo

11
=
6

1,83

Estrutura seqencial:
Total
de
Ciclos
5+4+3+7+5+3 = 27
N de Instrues = 6
CPI

27
=
6

ciclos/instruo
27

4,5

4,5

Ganho da estrutura pipelined sobre a seqencial: S(n) = 11ou1,83= 2,45

2.2 Funo dos Pinos


Pela Figura 8, o processador apresenta: um barramento de dados
de 16 bits; um barramento de endereos de 20 bits; e um barramento de
controle. O barramento de controle, por sua vez, encontra-se dividido nos
grupos de:
controle de memria e I/O;
controle de interrupo;
controle de DMA (direct memory access acesso direto
memria); e
controle de operao com coprocessador (somente em alguns
processadores).

Anna Catharina/CEFET-RN/2000

1
5

Anlise de um Microprocessador Genrico

CLK

Sinaisde
Controle
deDMA

A0 A19
D0 D15

HOLD
HLDA

Bus deEndereos
Bus deDados

BLE
BHE

Sinaisde
Controlede
Interrupo

INTA
INTR

Processador
80x86

NMI

W/ R
D/ C

RESET

M/ IO
Sinaisde
Controledo
Coprocessador

PEREQ

ADS

BUSY

READY

ERROR

LOCK

Figura 8

SinaisdeControle
deMemria eE/ S

Funo dos pinos do processador genrico

A Tabela 1 lista cada um destes sinais, especificando o nome do


pino, sua funo, tipo e nvel ativo.

Anna Catharina/CEFET-RN/2000

1
6

Anlise de um Microprocessador Genrico

Tabela 1

Tabela descritiva dos pinos do processador genrico

Nome
CLK
A0-A19
D0-D15

Funo

Clock do sistema
Bus de endereo (20 bits)
Bus de dados (16 bits)
Byte enables Selecionam parte alta (BHE) e baixa
BHE, BLE
(BLE) do bus de dados
HOLD
Pedido de uso do bus de dados (pedido de DMA)
HLDA
Reconhecimento HOLD (reconhecimento de DMA)
INTR
Pedido de interrupo mascarvel
NMI
Pedido de interrupo no-mascarvel
RESET Reinicializao do sistema
PEREQ Requisio de dados pelo coprocessador
BUSY
Coprocessador ocupado
ERROR Erro no coprocessador
W/R
Referente a escrita (W) ou leitura (R)
D/C
Referente a dados (D) ou controle/cdigo (C)
M/IO
Referente a memria (M) ou E/S (IO)
ADS
Status de endereo (indicador de ciclo de barramento
vlido)
READY Pedido de espera (por um perifrico)
LOCK
Indicador de barramento ocupado

Nvel
Tipo Lgic
o
E

S
1
E/S
1
S

E
S
E
E
E
E
E
E
S
S
S
S

1
1
1
1
1
1
0
0
1/0
1/0
1/0
0

E
S

0
0

Atravs do barramento de dados de 16 bits do processador ,


possvel se transferir informaes da largura de um byte (8 bits) ou de
uma word (16 bits). Os sinais BHE e BLE so usados para indicar se a
transferncia de um byte est ocorrendo pela parte menos significativa
do barramento de dados (parte baixa: BHE=1 e BLE=0), pela parte mais
significativa (parte alta: BHE=0 e BLE=1), ou se est ocorrendo a
transferncia de uma word (parte alta + parte baixa: BHE=0 e BLE=0).
Enquanto todos os 20 bits do bus de endereos podem ser usados para
acessar uma posio de memria, apenas os 16 menos significativos
podem ser usados para acessar uma E/S. Desta forma, embora o espao
enderevel de memria seja de 1 Mbyte (2 20), o de E/S de apenas 64
kbytes (216).
Dos trs sinais disponveis para controle de interrupo, o INTR
pode ser mascarado por software, o NMI sempre atendido,
independentemente da programao, e o de RESET reinicializa o
sistema.
Para controle de DMA so disponveis os sinais HOLD e HLDA, os
quais permitem que o processador tome conhecimento e sinalize o
atendimento de um pedido de uso de vias feito por um outro dispositivo
mestre (controlador de DMA). Enquanto durar a concesso do uso de vias
(sinal HOLD permanece ativo aps o HLDA), o processador mantm seus
pinos de sada em estado de alta impedncia (estado indefinido entre 0 e
1). Durante o DMA, transferncias diretas de dados podem ser feitas
entre a memria e o dispoditivo de E/S.
Anna Catharina/CEFET-RN/2000

1
7

Anlise de um Microprocessador Genrico

Seguindo o padro das mquinas anteriores ao 486DX, o


processador s executa operaes aritmticas com nmeros inteiros.
Operaes com nmeros reais s so possveis atravs de bibliotecas
matemticas em ponto flutuante ou atravs do uso de um coprocessador
aritmtico, o qual partilha com o processador a execuo do programa,
tomando para si a execuo das tarefas com nmeros reais. Para
viabilizar o uso de um coprocessador aritmtico, so disponibilizados os
sinais PEREQ, BUSY e ERROR, os quais permitem que o processador
tome conhecimento de um pedido de dados pelo coprocessador, do seu
tempo de ocupao e da ocorrncia de erros no tratamento matemtico.

Anna Catharina/CEFET-RN/2000

1
8

Anlise de um Microprocessador Genrico

2.3 Sistema de Clock e Ciclos de Barramento


Toda sincronizao de barramento feita a partir do sinal de clock
denominado de clock do processador (PCLK). Este sinal, gerado
internamente, tem como base de tempo o sinal fornecido na entrada CLK
(clock do sistema/externo). Para o processador 8086, o PCLK compreende
um perodo igual a duas vezes o do CLK (freqncia de PCLK =
freqncia de CLK), com ciclo de trabalho (duty cycle) de 50% (Figura 9).

CLK
PCLK
T

Figura 9

Temporizao genrica

Qualquer operao externa de leitura ou escrita feita pelo


processador ocorrer em um ciclo de barramento e ter uma durao
mnima de dois perodos de PCLK (T1 e T2). Os ciclos de barramento
possveis so mostrados na Tabela 3 e o seu reconhecimento feito
atravs da decodificao dos sinais de sada M/ IO (memria/IO), D/ C
(dados/cdigo) e W/ R (escrita/leitura).

Tabela 2
M/

D/ C

W/ R

0
0

0
0

0
1

0
0
1
1
1
1

1
1
0
0
1
1

0
1
0
1
0
1

Sinais M/IO, D/C, W/R


Tipo de ciclo de barramento

IO

Reconhecimento de interrupo
Processador
ocioso
(nenhum
ciclo
barramento est sendo processado)
Leitura de dados numa interface de E/S
Escrita de dados numa interface de E/S
Leitura de cdigo na memria
Parado (halt/shutdown)
Leitura de dados na memria
Escrita de dados na memria

de

A sada ADS indica que o os sinais de definio de ciclo de


barramento (M/IO, R/W, D/C), cdigo de byte enable (BHE, BLE) e os
sinais de endereo (A0 a A15) esto estveis. Esse sinal geralmente
aplicado a um circuito de lgica de controle de barramento externo para
indicar que uma definio de ciclo de barramento vlido e um endereo
esto disponveis. Atravs da entrada READY, possvel estender o ciclo
de barramento corrente pela incluso de estados de espera, permitindo
Anna Catharina/CEFET-RN/2000

1
9

Anlise de um Microprocessador Genrico

que uma memria ou um dispositivo de E/S lento possa ser atendido pelo
processador.
Em sistemas multiprocessados, comum o partilhamento de vias de
dados, endereos e controle. Para suprir o uso exclusivo de vias durante a
execuo de tarefas prioritrias, o processador dispe do sinal de sada
LOCK (ativado por software), durante o qual qualquer outro sistema ou
dispositivo ficar devidamente informado que nenhuma concesso de vias
poder ocorrer naquele momento.

Anna Catharina/CEFET-RN/2000

2
0

Anlise de um Microprocessador Genrico

A Figura 10 mostra um timing genrico no qual os seguintes ciclos


de barramento possveis esto representados:
C1: leitura de cdigo na memria (W/ R =0, D/ C =0 e M/ IO =1);
C2: leitura de dados na memria (W/ R =0, D/ C =1 e M/ IO =1);
C3: ocioso (W/ R =1, D/ C =0 e M/ IO =0); e
C4: escrita de dados numa interface de E/S (W/ R =1, D/ C =1 e
M/ IO =0) com pedido de espera (feito atravs da linha READY).

C1
T1

C2
T2

T1

C3
T2

C4
T1

tw

T2

PCLK
Bus de
Endereo

n+1

n+2
n+2

W/ R
M/ IO
D/ C
Bus de
Dados

ta

ta
n

taw
n+1

n+2

READY
ta: tempo de endereamento
taw: tempo de endereamento com pedido de espera
tw: tempo de espera
Figura 10

Anna Catharina/CEFET-RN/2000

Temporizao genrica

2
1

Sistema de Memria de Computadores

3 Sistema de Memria de Computadores


3.1 Estrutura de Memria
Segundo a Arquitetura de Von Newmann, uma unidade central
recebe dados dos dispositivos de entrada, processa-os segundo as
especificaes de um programa, e devolve-os atravs de um dispositivo de
sada. As instrues do programa e os dados processados residem na
memria do computador. Esta memria dividida em uma srie de
locaes, cada qual com um endereo associado. Cada locao
denominada de byte, o qual formado por 8 bits (unidade binria).
3.1.1 Terminologia
Endereo e locao de memria: O endereo um nmero que
identifica a posio (locao) de uma palavra na memria. Cada palavra
armazenada em qualquer dispositivo ou sistema de memria possui um
nico endereo, expresso como nmeros binrios ou, por convenincia,
hexadecimais. Cada locao de memria possui um endereo associado,
onde esto presentes os dados a serem acessados.
Operao de leitura: Ao ler o contedo de um endereo, o computador
faz uma cpia do contedo. Dessa forma, a operao de leitura
chamada de no destrutiva (operao de busca).
Operao de escrita: Quando o computador acessa uma posio de
memria e escreve um dado, o contedo anterior completamente
perdido. Assim, toda operao de escrita pode ser chamada de destrutiva
(operao de armazenamento).
Tempo de acesso: Medida da velocidade do dispositivo de memria.
Quantidade de tempo necessria efetivao de uma operao de leitura
(tempo decorrido entre o momento da recepo pela memria de um novo
endereo e o instante em que a informao daquele endereo fica
disponvel).
Memria voltil: Memria que necessita de energia eltrica para reter a
informao armazenada. Se a energia for retirada, toda a informao
armazenada ser perdida.
Memria no-voltil: Memria que no necessita de energia eltrica
para reter a informao armazenada.
ROM (read only memory) memria apenas para leitura: So
memrias a semicondutor usadas para armazenar dados e instrues
permanentes, que o computador deve executar freqentemente ou

Sistema de Memria de Computadores

durante a inicializao do sistema. Normalmente o contedo de uma


ROM gravado no circuito integrado, no podendo ser alterado (no
volteis). Aplicaes: firmware, memria de partida fria (bootstrap),
tabelas de dados, conversores de dados, geradores de caracteres e de
funes.
A principal caracterstica da memria ROM o fato de que suas
informaes vm geralmente gravadas de fbrica e so, portanto
utilizadas durante toda sua vida til para as mesmas atividades.

Sistema de Memria de Computadores

Os diversos tipos de ROMs existentes no mercado diferem no modo


de programao e na possibilidade de apagamento e de reprogramao.
Algumas variaes da ROM so:
EPROM (erasable programmable read-only memory) ROM
apagvel programvel: Basicamente uma memria ROM na
qual informaes podem ser apagadas atravs de exposio a
luz ultravioleta de alta intensidade e reprogramadas
eletricamente.
EEPROM (electrically erasable programmable read-only
memory) ROM apagvel programvel eletricamente:
verso mais barata e prtica da EPROM, a qual utiliza sinais
eltricos tanto para sua microprogramao quanto para que
suas informaes sejam apagadas. As chamadas memrias flash
ou EEPROM flash possibilitam a atualizao do BIOS, por
exemplo, sem a necessidade de substituio do chip. Uma
vantagem das EEPROMs sobre as EPROMs a possibilidade de
apagamento e reprogramao de palavras individuais, em vez da
memria inteira.
RAM (random access memory) memria de acesso aleatrio: So
memrias de leitura e escrita, usadas para o armazenamento temporrio
de dados. As memrias RAM so volteis. Nas memrias RAM, a
localizao fsica real de uma palavra no tem efeito sobre o tempo de
leitura ou escrita (o tempo de acesso constante para qualquer
endereo). Aplicao: memria principal e caches.
Entre os principais tipos de RAM temos:

DRAM (dinamic random access memory) RAM dinmica:


Memrias RAM a semicondutor nas quais a informao
armazenada no permanecer armazenada, mesmo em presena
de alimentao do circuito, a no ser que a informao seja
reescrita na memria com determinada freqncia (operao de
recarga ou refresh da memria). Caractersticas: alta
capacidade de armazenamento, baixo consumo de potncia,
velocidade de operao moderada e custo/byte relativamente
baixo. Principal tecnologia de implementao de memrias
RAM, constituindo-se na representao de nmeros binrios 0 e
1 a partir do carregamento de milhares ou milhes de
microcapacitores reenergizados pela passagem de correntes
pelas clulas a cada dezena de milissegundos.

SRAM (static random access memory) RAM esttica:


Memrias RAM nas quais a informao permanecer
armazenada enquanto houver energia eltrica aplicada
memria, sem que haja necessidade da informao ser
permanentemente reescrita na memria. Caractersticas: baixa
capacidade de armazenamento, alta velocidade de operao
(baixo tempo de acesso) e alto custo/byte. A principal limitao

Sistema de Memria de Computadores

da DRAM, a velocidade, a principal vantagem da SRAM.


Estima-se que o tempo de acesso aos dados na SRAM sejam
cerca 25% do tempo de acesso a DRAMs. Uma outra vantagem
diz respeito a desnecessidade de reenergizao. No entanto,
uma grande limitao decorrente de seu alto custo, o que faz
com que esta tecnologia seja usada mais comumente em
estruturas cache. Utilizam flip-flops (bipolares ou MOS) como
clulas de armazenamento.
Memrias de acesso seqencial (SAM): Utilizam registradores de
deslocamento para armazenar os dados que podem ser acessados de
forma seqencial, no podendo ser utilizadas na memria principal (baixa
velocidade de acesso). Aplicaes: armazenamento e transmisso
seqencial de dados codificados em ASCII, osciloscpios digitais e
analisadores lgicos, memrias FIFO.

Sistema de Memria de Computadores

Memrias FIFO (first in first out) primeiro a entrar, primeiro a sair:


Memria seqencial que utiliza registradores de deslocamento, na qual
as palavras so descarregadas na sada de dados na mesma ordem em
que entraram pela entrada de dados. Aplicao: operao de
transferncia de dados entre sistemas operando em velocidades muito
diferentes (buffers de impressora ou teclado).
Hierarquia de memria: a hierarquia de memria de um computador
caracterizada por cinco parmetros: tempo de acesso, tamanho da
memria, custo por byte, largura de banda (bandwidth) da transferncia
e unidade de transferncia (bytes). A hierarquia de memria em
microcomputadores, representada na Figura 11, possui quatro nveis,
compostos de: memria secundria, memria principal, caches e
registradores.

Registradores
Cache Interna (L1)
Capacidade de
Armazenamento
Tempo de acesso

Custo por bit


Cache Externa (L2)
Memria Principal
Memria Secundria
Capacidade de
Armazenamento

Figura 11

Hierarquia de memria

Memria secundria ou de massa ou auxiliar: Armazena uma grande


quantidade de informao, sendo bem mais lenta que a memria
principal, e sempre no-voltil. As informaes armazenadas nos
dispositivos de memria de massa so transferidas para a memria
principal quando forem necessrias ao computador. Exemplos deste tipo
de elemento so as fitas magnticas, os disquetes e os HDs (hard disks).
Memria principal ou primria: Serve para armazenar as instrues e
os dados que esto sendo usados pelo processador. Implementada por
chips de memrias DRAM. Controlada por uma MMU (memory
manegement unit unidade de gerncia de memria) em cooperao com
o sistema operacional.
Memria cache: Formada por uma pequena quantidade de memria
SRAM, com alta velocidade de acesso. Armazena dados com grande

Sistema de Memria de Computadores

probabilidade de reutilizao, evitando outros acessos memria


principal, diminuindo o tempo de acesso ao dado. Existem dois tipos de
memria
cache, dependendo da localizao
em relao ao
microprocessador: cache interna ou primria ou L1 (com pequena
capacidade, geralmente de 32 kbytes), e cache "externa" (integrada) ou
secundria ou L2 (com capacidade mdia de 256 a 512 kbytes).

Sistema de Memria de Computadores

3.1.2 Armazenamento de Informaes na Memria


A menor quantidade de informao disponvel em qualquer
computador o bit. A principal unidade de informao um grupo de
bits, denominado palavra. O nmero de bits que formam uma palavra
denominado tamanho da palavra do computador. Muitas vezes os
computadores so descritos em termos do tamanho da sua palavra, que
tambm indica a largura do barramento de dados.
Uma palavra armazenada numa posio de memria pode conter
dois tipos de informao: instrues ou dados. Para as instrues,
armazenadas em cdigo binrio, o contedo armazenado na memria so
comandos que levam execuo de alguma tarefa. Os dados podem ser
informaes numricas ou alfanumricas, que podem estar em vrios
formatos: nmeros binrios com e sem sinal, nmeros em BCD
compactado, nmeros em ponto flutuante, caracteres em BCD ou ASCII.
Apesar de existirem diversos formatos lgicos de armazenamento
para dados, no se deve esquecer que, fisicamente, informaes so
armazenadas como seqncias de 0 e 1 e que, mais importante ainda, o
computador no tem como saber a diferena entre dois contedos.
responsabilidade do programador conhecer os tipos de dados que esto
sendo armazenados, para assegurar que o programa possa interpret-los
e process-los corretamente.
O processador armazena dados na memria de forma linear, em
grupos de 8 bits. Primeiro armazenado o byte menos significativo (LSB
least significative byte) de uma word e em seguida o byte mais
significativo (MSB most significative byte). Por exemplo, o nmero
A3C1h armazenado na forma indicada na Figura 12.
Endereo

Contedo

SegmentodeDados
C1

A3
+1
Figura 12

Partebaixa
Partealta

Armazenamento de dados na memria

Nmeros binrios no sinalizados e nmeros hexadecimais: Uma


forma mais clara de representao dos valores o sistema hexadecimal,
que utiliza um conjunto de 16 smbolos: os algarismos de 0 a 9 e as letras
de A a F. A cada conjunto de 4 bits em um byte atribui-se um dgito
hexadecimal. Ateno! Nmeros em hexadecimal so apenas uma
representao de nmeros binrios!!!

Sistema de Memria de Computadores

Caracteres: A cada uma das 256 combinaes possveis em um byte,


pode-se atribuir um caractere do alfabeto, minsculos e maisculos,
algarismos e smbolos especiais do teclado, caracteres de controle,
caracteres semigrficos, smbolos matemticos e letras do alfabeto grego
(cdigo ASCII american standard code for information interchange).
No se pode esquecer que a cada cdigo ASCII (ou a cada caractere),
est associado um nmero de um byte, e portanto, podemos dizer que,
por exemplo, A = 65d = 41h = 01000001b.

Sistema de Memria de Computadores

Valores em BCD compactado: O cdigo BCD (binary decimal code


cdigo binrio decimal) utilizado para armazenar dois dgitos decimais
em um byte na memria, especialmente para realizar clculos
aritmticos. Para isto, pode-se usar a tabela dos nmeros hexadecimais
com as combinaes para os algarismos de 0 a 9.
Exemplo: 15310 = 0001 0101 0011BCD = 1001 10012 = 9916
Para cada dgito decimal existe um nibble
correspondente em BCD.

(quarteto)

Operaes BCD so realizadas como operaes com nmeros


binrios. Entretanto, necessrio fazer um ajuste no resultado para que o
valor seja um BCD vlido. Portanto, uma soma BCD nada mais que uma
soma binria com um ajuste. O ajuste feito adicionando-se
610 = 01102 ao nibble cuja representao binria seja superior a 910.
Exemplo: 4910 + 2110= 0100 1001BCD + 0010 0001BCD = 0110 1010
Ajust
e:

Aps o ajuste, o resultado da


soma :
0111 0000BCD = 7010

0110 10102
+ 0000 01102
0111 0000BCD

Tabela 3

Equivalncia entre os sistemas numricos

Valor
Binrio

Dgito
Hexadeci
mal

Valor
Decim
al

Dgito
BCD

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

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

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

0
1
2
3
4
5
6
7
8
9

Valores sinalizados: Um byte pode armazenar 256 valores diferentes


(00h a FFh), atribuindo a cada combinao um valor decimal positivo (0 10
a +25510). Para armazenar na memria valores positivos e negativos (12810 a +12710), o bit mais significativo de um byte utilizado para
indicar o sinal: 0 para positivo e 1 para negativo em complemento de 2
(ou seja, -B = Complemento de 2(B)). O complemento de 2 consiste em
duas operaes: realizao do complemento de 1 (negao bit a bit) e
adio com 1.
Exemplo: A = 1210 = 0000 11002

Sistema de Memria de Computadores

-A = C2(A) = C1(A) +1 = 1111 01002


Internamente, os computadores no realizam operaes de
subtrao. A subtrao (AB) feita atravs da soma (A+(-B) =
A+Complemento de 2(B)).

Sistema de Memria de Computadores

Exemplo: A = 710 e B = 810. Calcular, por complemento de 2, o valor C = A


B.
A = 0000 01112 e B = 0000 10002
Operao 1 C1(B): 1111 01112
Operao 2 adio com 1 (1+0=1, 1+1=0 vai 1):
1111 0111
+ 0000 0001
1111 1000 = C2(B)

Adio (A + C2(B)):
0000 0111
+ 1111 1000
1111 1111

Logo, A B = 1111 11112.


Note que o dado sinalizado armazenado na memria da mesma forma
que um no sinalizado. Para saber quanto vale o nmero, s refazer o
complemento de dois, uma vez que [-(-B)=B]. Dessa forma, teramos:
0000 0000
+ 0000 0001
0000 0001

Portanto, 1111 11112 = -1.

3.2 Organizao da Memria Principal


3.2.1 Organizao Modular da Memria
A memria freqentemente separada em mdulos com
funcionalidade independente como forma de aumentar a velocidade e a
confiabilidade, e flexibilizar possveis mudanas de tamanho. Existem
duas formas de organizao modular: high-order interleave e low-order
interleave.
High-order interleave: sucessivos endereos de memria presentes no
mesmo mdulo (Figura 13). O aumento do desempenho resulta da
probabilidade de instrues, tabelas de referncias e dados residirem em
mdulos diferentes. Esta separao pode ser forada pelo sistema
operacional. Caso isto venha a ocorrer, existe pouca probalidade de uma
referncia memria por uma instruo ter de esperar pelo trmino de
uma referncia uma tabela ou a um dado.
M0
0

2n-1

Figura 13

M1
n

22n-1

M2
2n

M3
3n

23n-1

24n-1

Organizao high-order interleave

Sistema de Memria de Computadores

Low-order interleave: endereos sucessivos alocados em mdulos


diferentes (Figura 14). Oferece vantagem quanto localidade de
programas e dados. Neste mtodo, um dado ou uma instruo tende a
estar na localidade de memria mais prxima do ltimo item de dado ou
instruo buscado. Existe tambm a possibilidade de um fluxo de palavra
poder ser transferido ao processador a uma velocidade maior que aquela
organizada em endereos sucessivos.

Sistema de Memria de Computadores

M0

M1

M2

M3

24n-4

24n-3

24n-2

24n-1

Figura 14

Organizao low-order interleave

difcil fazer um julgamento sobre qual forma de organizaes


melhor. A organizao high-order interleave certamente produz alta
confiabilidade ao sistema, uma vez que o processamento pode continuar
quando um mdulo no est operando, principalmente nos casos em que
um contedo pode ser recuperado da memria secundria e realocado em
outro mdulo.
Considerando as duas formas, mais importante que se incorpore
uma organizao de memria compatvel com a estrutura do restante do
sistema do computador e com a organizao do processador. Com isso, a
memria passa a acomodar as caractersticas do resto do sistema.
Uma unidade de gerncia de memria (MMU) utilizada para fazer
o endereamento ou acesso memria. A MMU um processador
especial usado particularmente para coordenar transferncias de bytes,
words e doublewords. Isto tambm facilita o projeto de diferentes
computadores usando microprocessador e memrias padres. Funes
tpicas de uma MMU incluem: controle de endereamento por segmento e
pgina, separao do espao do usurio e do sistema e suporte de
hardware para proteo de memria.
3.2.2 Organizao Lgica
Vamos considerar um processador com barramento de endereo de
32 bits, o que possibilita o acesso a 4 Gbytes (2 32) posies de memria.
Essa capacidade de endereamento, entretanto, s possvel quando o
microprocessador est trabalhando no modo protegido. No modo real,
apenas 20 bits de endereamento so utilizados e, consequentemente, a
capacidade de endereamento diminui para 1 Mbyte (220), semelhante ao
processador proposto para anlise.
Memria Convencional: at 640 kbytes.
Memria Superior: regio de memria entre 640 kbytes e 1 Mbyte, que
abriga a memria de vdeo, a UMB e a EMS Page Frame.
Blocos de Memria Superior (UMB): armazenamento de programas
residentes e drivers que estariam na memria convencional. Localizao:
de 800 a 896 kbytes da memria superior.

Sistema de Memria de Computadores

EMS Page Frame: bloco de 64 kbytes da memria superior, atravs do


qual feito o chaveamento de bancos da memria EMS. Configurao: 4
pginas de 16 kbytes = 64 kbytes. Localizao: 896 a 960 kbytes da
memria superior.
Memria Alta (HMA): utilizada para armazenar partes do ncleo do
sistema operacional DOS, que poderiam ocupar espao na memria
convencional ou na memria superior.
Memria Estendida (XMS): memria acessvel apenas em modo
protegido, localizada a partir de 1 Mbyte, abrigando a memria HMA e a
memria expandida.

Sistema de Memria de Computadores

Memria Expandida (EMS): fornece acesso superior a 1 Mbyte de


memria em modo real, independente da capacidade de endereamento
do processador. Localizao: placas de expanso EMS (XT e 286), ou final
da memria estendida (386 ou superior). Utilizao de recursos (drivers)
de gerncia de memria que permitem a funo de chaveamento de
bancos sem necessidade de hardware adicional (EMM386.EXE e
HIMEM.SYS).
Total
de
memria:
64
blocos
(frames)
de
16 kbytes = 1 Mbyte. Apenas 4 blocos de 16 kbytes podem ser acessados
a cada instante. Apesar de no poder armazenar programas a serem
executados, possibilita o armazenamento dos dados utilizados pelos
programas.
Superior

Convencional

UMB
0

640k

Estendida (XMS)
HMA
1M

????

EMS Page Frame

Expandida (EMS)

Figura 15

Organizao da memria principal

3.2.3 Organizao Fsica


O espao de endereamento de memria visto como um conjunto
de quatro bancos independentes onde cada banco apresenta 1Gbyte de
memria
(modo
protegido)
ou
de
256 kbytes (modo real).
Os bancos esto relacionados diretamente com os 4 sinais byte
enables (BE0, BE1, BE2 e BE3) do processador. A ativao de cada byte
enable coloca o banco de memria correspondente em operao.
Caractersticas da organizao fsica:
a memria est organizada em seqncias de doublewords;
os bits de endereo (A2 a A31) so aplicados aos quatro bancos
em paralelo;
os byte enables selecionam quais bytes da doubleword sero
manipulados;
cada doubleword alinhada possui endereo inicial mltiplo de 4;
e
cada banco de memria utiliza 8 das 32 linhas do barramento de
dados.

Sistema de Memria de Computadores

M3

A31-A0

D31-D24

M2

BH3

Figura 16

D23-D16 BH2

M1

D15-D8 BH1

M0

D7-D0

Organizao fsica da memria principal

BH0

Sistema de Memria de Computadores

3.2.4 Acesso Memria


As Figuras a seguir mostram a forma de acesso a dados de 1, 2 e 4
bytes, respectivamente, a partir do endereo inicial X. importante notar
que apenas os bancos selecionados atravs dos byte enables podero
realizar operao de escrita ou leitura e a transferncia dos dados feita
atravs das linhas correspondentes do barramento de dados.
M3

M2

M1

M0

A31-A0

D31-D24 BH3 = 1

Figura 17

M3

A31-A0

D31-D24 BH3 = 1

Figura 18

A31-A0

D23-D16 BH2 = 1

D15-D8 BH1 = 1

D7-D0 BH0 = 0

Acesso a um dado de 1 byte

M2

D23-D16 BH2 = 1

M1

M0

X+1

D15-D8 BH1 = 0

D7-D0 BH0 = 0

Acesso a um dado de 2 bytes

M3

M2

M1

M0

X+3

X+2

X+1

D31-D24 BH3 = 0

Figura 19

D23-D16 BH2 = 0

D15-D8 BH1 = 0

Acesso a um dado de 4 bytes

D7-D0 BH0 = 0

Sistema de Memria de Computadores

Nem sempre possvel, entretanto, ter todas as words e


doublewords alinhadas. Nesse caso, a transferncia ser feita em dois
ciclos de barramento. No primeiro, a parte alta do dado ser acessada; no
segundo, a parte baixa.

Sistema de Memria de Computadores

3.3 Memria Cache


Quando um sistema de computador explora um subsistema de
memria principal muito grande, esta memria normalmente
implementada com DRAMs e EPROMs de alta capacidade de
armazenamento, mas de muito baixa velocidade. As DRAMs disponveis
apresentam tempos de acesso elevado em relao velocidade do
processador, inviabilizando a operao sncrona de um sistema a
microprocessador com estes dispositivos de memria. Como no existe
disponibilidade de dispositivos com tempo de resposta compatvel,
estados de espera so introduzidos em todos os ciclos de acesso a
memria de programa ou de dados. Estes estados de espera degradam a
performance global do sistema a microprocessador.
Para suprir esta deficincia, um pequeno subsistema de memria,
conhecido por memria cache, inserido entre o processador e a
memria principal. O sistema de memria cache armazena os dados e
cdigos mais recentemente utilizados, permitindo que, ao invs de
realizar novos acessos memria principal, estes dados e cdigos sejam
acessados diretamente da cache, com a possibilidade de zero estados de
espera. Um outro dispositivo, o controlador de memria cache determina,
de acordo com as necessidades, quais os blocos de memria a serem
movimentados de/para o bloco cache, ou de/para a memria principal.
A observao de que referncias memria feitas em qualquer
intervalo de tempo curto de tempo tendem a usar apenas uma pequena
frao da memria total chamada princpio da localidade e forma a
base de todos os sistemas cache.
Para aumentar ainda a mais o desempenho, os processadores de
ltima gerao incorporam caches de dados e de cdigo internamente ao
chip (cache L1).
3.3.1 Arquitetura de um Sistema Cache
A Figura 20 apresenta a arquitetura de um sistema cache.
interessante notar que um dos lados da memria cache esta ligado ao
barramento local do microprocessador e o outro lado est ligado ao
barramento da memria principal.

Sistema de Memria de Computadores

Busdeendereos
Controleda cache

Processador

Controle

Subsistema de
Memria Cache
Externa

Controle

Memria
Principal

Busdedados

Figura 20

Microcomputador com memria cache L2

A primeira vez que um microprocessador executa um segmento de


programa, uma instruo aps a outra lida da memria principal e
executada. O grupo de instrues mais recentemente lido ento copiado
na memria cache. Como normalmente os softwares implementam
seqncias de instrues que so executadas repetidas vezes, o acesso a
essas informaes poder ser feito diretamente da cache.

Sistema de Memria de Computadores

Considere, por exemplo, uma seqncia de instrues em loop.


Durante a primeira iterao, o cdigo lido da memria principal pelo
microprocessador e automaticamente copiado para a memria cache
(Figura 21). As demais iteraes do loop no mais requisitaro acessos
memria principal. Durante a execuo do loop, tanto os dados como o
cdigo podem ser copiados para a memria cache. Quanto mais acessos
memria cache e menos memria principal, melhor ser o desempenho
do sistema.
Bus deendereos
Controleda cache

Loop
Loop
Processador
Controle

Controle

Subsistema de
Memria Cache
Externa

Memria
Principal

Bus dedados

Figura 21

Exemplo de funcionamento da memria cache

3.3.2 Taxa de Acerto


A cache pode reduzir significativamente o tempo de acesso se
organizada de forma a conter os dados e o cdigo requeridos pelo
processador. Obviamente, quanto maior a cache, maior a chance de que
ele contenha as informaes desejadas. Quando o processador necessita
de uma informao, o subsistema de memria cache verifica seu
contedo. Se a informao estiver presente na cache, o ciclo de memria
denominado cache hit (acerto de cache) e a cpia da informao
acessada. Caso contrrio, diz-se que ocorreu um cache miss e a
informao deve ser buscada na memria principal.
A taxa de acerto (hit rate) a razo entre o nmero de acessos
cache e o nmero total de acessos memria.
HitRate

Acessos
cache
Total
decache
hits

Acessos
memria
principalTotaldecache
miss

ou

k1
k

Se o tempo de acesso de um dado na cache c e da memria


principal m, o tempo mdio de acesso de um dado, considerando o
sistema de memria cache + memria principal, pode ser calculado por:
tmed = c + (1 h) m. medida que h 1, todas as referncias podem ser
satisfeitas pela cache, e tmed c. Por outro lado, medida que h 0, uma
referncia memria necessria toda vez, de forma que tmed (c + m),

Sistema de Memria de Computadores

tempo para verificar o cache (sem sucesso) e para fazer a referncia


memria.
Quanto maior a taxa de acerto, maior a eficincia do subsistema de
memria cache. A taxa de acerto no uma valor fixo e depende da
dimenso e da organizao da cache, do algoritmo de controle usado pela
cache e do cdigo em execuo, de tal forma que pode ser
completamente distinta para cdigos diferentes.

Arquitetura de Software de um
Microprocessador

4 Arquitetura
de
Microprocessador

Software

de

um

O
conhecimento
da
arquitetura
de
software
de
um
microprocessador permite o desenvolvimento de programas sem a
necessidade de detalhes de implementao do chip. A arquitetura de
software de um processador compreende:
a forma de organizao da memria e da E/S;
que tipos de registradores esto disponveis internamente e
quais as suas funes;
que tipos de dados servem de operando;
quais os modos de endereamento existentes para se acessar
um operando na memria, numa E/S ou num dos registradores
internos; e
quais os comandos que constituem o seu conjunto de instrues.

4.1 Modelo de Software


O modelo de software inclui (Figura 22):
um espao contnuo e enderevel de 1 Mbyte de memria (20
bits do barramento de endereos);
um espao para endereamento de portas de E/S de 64 kbytes
(16 bits do barramento de endereos); e
uma estrutura com 14 registradores internos disponveis.

Arquitetura de Software de um
Microprocessador

Estrutura
de Registros
15

IP

15 8 7
0
AH
AL
BH
BL
CH
CL
DH
DL
15
0

SP
BP

003FFh
00400h
Dados do
ROM BIOS
Programas
residentes do
DOS
Programas do
Usurio
9FFFFh
A0000h
Memria
deVdeo

SI
DI

Reservado

Mapeamento
de E/ S
0000h

00000h
Vetor deInterrupo

CS
DS
SS
ES
AX
BX
CX
DX

Mapeamento
de Memria
.
.
.

.
.
.

1KBytes
FFFFh
.
.

640KBytes

.
.
.

EFFFFh
F0000h
Programas
residentes do
ROM BIOS
FFFFFh

Figura 22

.
.
.
1MBytes

Modelo de software de um processador

64KBytes

Arquitetura de Software de um
Microprocessador

4.2 Registradores
4.2.1 Registradores de Dados (Registradores de Uso Geral)
Os registradores de dados podem ser usados como:
4 registradores de 16 bits (AX, BX, CX e DX), para manipulao
de words (16 bits); ou
8 registradores de 8 bits (AL, AH, BL, BH, CL, CH, DL e DH),
para manipulao de bytes (8 bits).
A terminao L (low) ou H (high) define onde ser armazenado o
byte de mais baixa ordem ou o de mais alta ordem de uma palavra de 16
bits.
Embora considerados de uso igualitrio pela maioria das instrues
aritmticas, lgicas ou de transferncia de informao, os registradores
de dados apresentam algumas caractersticas prprias que os
diferenciam:
as instrues de multiplicao, diviso ou de transferncia de
dados de uma E/S exigem o registrador AX como acumulador e,
o registrador DX como registrador de dados auxiliar;
as instrues que usam forma de endereamento de memria
mais complexa, exigem o registrador BX como registrador de
base; e
as instrues que manipulam strings ou loops de contagem
exigem o registrador CX como registrador de contagem.

Arquitetura de Software de um
Microprocessador

4.2.2 Registradores de Segmento


Um programa executvel deve ser constitudo por mdulos de
cdigo e de dados. Para suportar esta estrutura de programa modular, o
processador aloca cada unidade lgica de um programa em regies
especficas da memria denominadas de segmentos. Por razes de
implementao fsica, cada um destes segmentos no poder exceder o
limite de 64 kbytes.
Como apenas um pequeno nmero de mdulos de programa e dados
so necessrios em um dado instante, este mecanismo, chamado de
segmentao de memria, permite que os programas sejam executados
rapidamente e tomem pouco espao na memria principal, alm de
facilitar o desenvolvimento de programas e a sua manuteno.
Em qualquer instante, um programa em execuo s poder ter
acesso a 4 segmentos:
um segmento de cdigo, onde ser alocado o mdulo executvel
(instrues);
um segmento de dados, onde sero alocadas tabelas,
mensagens, variveis ou constantes (dados) necessrias
execuo do programa;
um segmento de pilha, onde sero manipulados principalmente
os endereos de retorno de subrotinas e as variveis locais de
mdulos de programa em execuo; e
um segmento extra de dados, onde sero alocadas tabelas,
mensagens, variveis ou constantes no suportadas pelo
segmento de dados.
Para identificar e apontar cada um destes segmentos na memria, o
processador utiliza 4 registradores de 16 bits:
CS como registrador de segmento de cdigo;
DS como registrador de segmento de dados;
SS como registrador de segmento de pilha; e
ES como registrador de segmento extra de dados.
A alocao fsica de um segmento pode se apresentar totalmente
dissociada, parcialmente sobreposta ou totalmente sobreposta. Na Figura
23, por exemplo, o segmento de pilha est parcialmente sobreposto ao
segmento de cdigo, o segmento de cdigo est totalmente dissociado do
segmento de dados e o segmento extra de dados est totalmente
sobreposto ao segmento de dados.

Arquitetura de Software de um
Microprocessador

CS
SS
(CS)*16
(SS)*16
(DS)*16
(ES)*16

Figura 23

DS

ES

Segmentos parcialmente sobrepostos, totalmente dissociados e totalmente


sobrepostos

Arquitetura de Software de um
Microprocessador

Gerao de Endereo Fsico em Segmentos


Para poder gerar o endereo fsico de memria correspondente ao
incio de um segmento de cdigo, de dados, de pilha ou de dados extra, o
processador busca o contedo do registrador de segmento CS, DS, SS ou
ES (de 16 bits), e multiplica-o por 16 (quatro deslocamentos com zeros
esquerda). Como resultado, tem-se uma quantidade da largura do
barramento de endereos, ou seja, 20 bits. Isso significa que um
segmento
poder
se
localizar,
no
espao
de
1 Mbyte, a partir de qualquer endereo mltiplo de 16.
Como o contedo de um registrador de segmento permite a
definio apenas do endereo da base do segmento, a manipulao de um
dado dentro do espao fsico ocupado por todo o segmento s ser
completamente determinada (Figura 24) se for fornecido um
deslocamento, que caracterize a distncia relativa do dado a esta base. A
fonte para este deslocamento (offset) depende do tipo de referncia feita
memria: poder ser o contedo do registrador de instruo (busca do
cdigo de uma operao), ou do registrador de ndice (acesso a uma rea
de memria de dados), ou de um registrador de base de pilha (acesso a
uma rea de memria de pilha), ou ainda uma associao de um ndice e
uma base. Esta definio possvel atravs da anlise dos modos de
endereamento de memria do processador.
Endereo Fsico

Posio desejada

Deslocamento
Deslocamento

Registrador de Segmento 0000


Figura 24

Endereo de base
de segmento

0000h

Endereo fsico

Formalmente, o endereo fsico (EF) de um determinado dado


presente na memria estar perfeitamente definido se referenciado pelo
contedo de um registrador de segmento e um deslocamento dentro do
segmento, ou seja:
EF = registrador de segmento : deslocamento

(representao do

endereo fsico)

EF = registrador de segmento 16 + deslocamento


endereo fsico)

Exemplo:

(valor do

Arquitetura de Software de um
Microprocessador

Se o contedo em CS 0200h e o contedo em IP 0450h, a prxima


instruo a ser buscada estar no endereo
EF = CS 16 + IP = 0200 16 + 0450 = 02000 + 0450 = 02450h
+

02000
0450
02450

Base
Deslocame
nto
Endereo
Fsico

representado por 0200h : 0450h (CS : IP).


Logo, 0200h : 0450h a representao para o endereo fsico 02450h,
dentro do segmento de cdigo.

Arquitetura de Software de um
Microprocessador

4.2.3 Registradores Ponteiros


Deslocamento)

de

ndice

(Registradores

de

Os registradores ponteiros e de ndice so usados para armazenar


valores de deslocamento no acesso a instrues (IP) ou no acesso a
certas posies da memria pilha (SP e BP), ou ainda, na manipulao de
dados ou de blocos de dados tipo matrizes ou tabelas nos segmentos de
dados (SI e DI). Especificamente tm-se:
IP como apontador de instruo no segmento de cdigo CS.
SP como ponteiro do topo do segmento de pilha corrente (SS);
BP como ponteiro de base do segmento de pilha
(deslocamento);
SI como ndice fonte de estruturas de dados presentes em DS ou
ES;
DI como ndice destino de estruturas de dados presentes em DS
ou ES; e

No tratamento de transferncias de dados controladas pelos


ponteiros de ndice, o SI normalmente especifica um ndice fonte no
segmento DS, enquanto DI especifica um ndice destino no segmento ES.
4.2.4 Registrador de Flags
O registrador de flags (Figura 25) composto de 16 bits
independentes, sendo que apenas 9 bits so utilizados como flags:
6 flags de estado (status flags): descrevem os resultados gerados
por uma instruo;
3 flags de controle: controlam a operao do processador; e
15

14

13

12

11

10

OF DF IF TF SF ZF
flagsde estado
flagsde controle

Figura 25

AF

PF

CF

bitsno usados em modo real

bitsusados em modo protegido

Registrador de flags

Flags de Estado:
Os flags de estado, usados normalmente pelo programador como
auxiliares na hora de uma tomada de deciso, so setados (1) ou
resetados (0) aps a execuo de instrues aritmticas e lgicas,
refletindo propriedades caractersticas do resultado.
Todos os flags de estado vo para o nvel lgico 1 para indicar uma
ao correspondente ao seu nome.

Arquitetura de Software de um
Microprocessador

Os flags de estado presentes no processador so:

ZF zero flag (flag zero): indica que o resultado de uma


operao zero.

SF sign flag (flag de sinal): indica que o resultado de uma


operao negativo.

OF overflow flag (flag de estouro): indica que o resultado de


uma operao com nmeros sinalizados excede o limite de
possvel de representao do operando destino.

CF carry flag (flag de carregamento): indica, em operaes


com nmeros no sinalizados, que o resultado de uma operao
no cabe no operando destino (transporte ou emprstimo em
operaes aritmticas, ou bit expulso em deslocamento ou
rotao);

AF auxiliar carry flag (flag de carregamento auxiliar): indica


que um ajuste, aps uma operao com nmeros BCD,
necessrio.

PF parity flag (flag de paridade): usado para indicar se o


resultado de uma operao possui um nmero par de bits 1
(comunicaes de dados).

Flags de Controle:
O flags de controle controlam operaes do processador,
modificando o comportamento de instrues que sero executadas.
Os flags de controle presentes no processador so:

DF direction flag (flag de direo): controla, nas instrues


com string, se os registradores SI e DI tero seus contedos
automaticamente incrementados (DF=0) ou decrementados
(DF=1) acesso direto ou inverso a strings.

IF interrupt flag (flag de interrupo): mascara, com IF=0,


pedidos de interrupo feitos atravs da entrada INTR do
microprocessador.

TF trap flag: coloca, com TF=1, o processador no modo de


operao passo a passo.

No modo de operao passo a passo, aps a execuo de cada


instruo do programa, ocorre uma interrupo de passo nico a qual,
aciona uma rotina de depurao. Quando o microprocessador executa a
interrupo de passo nico, o TF=1 salvo na pilha e resetado para
permitir a execuo normal da rotina de depurao. No retorno desta
rotina, a condio TF=1 ser novamente reativada (Figura 26).

Arquitetura de Software de um
Microprocessador

Rotina deDepurao
Programa
2
5
1
4

3
6

4
Programa

Rotina de
Depurao
2

6
5

Figura 26

Modo de operao passo a passo

Arquitetura de Software de um
Microprocessador

4.3 Pilha
A pilha de um processador uma rea de memria usada para
guardar dados, normalmente valores presentes nos registradores, que,
devido complexidade do programa, precisam ser alterados, mas que
devem depois recuperar seu antigo valor. As instrues que fazem isso
so, basicamente PUSH e POP.
Os usos mais comuns da pilha so:
para salvar endereos de retorno para instrues na chamada e
nos retornos de subrotinas e ocorrncias de interrupes;
para salvar o contedo de registradores quando ocorre uma
chamada a subrotina;
para passar informaes de uma rotina para outra; e
para
armazenar,
temporariamente,
resultados
durante
operaes complexas.
No processador temos o registrador SS que contm o valor do
segmento reservado para a pilha e o ponteiro SP que indica, dentro desse
segmento, qual o offset do topo da pilha.
Aps a execuo de instrues que acessam dados na pilha, o
registrador SP automaticamente alterado (decrementado na insero e
incrementado na retirada), indicando o novo topo da pilha. SP assume,
inicialmente o valor 0000h, quando nenhum dado est presente na pilha
O registrador BP indica um deslocamento qualquer dentro da pilha,
entre os endereos da base e do topo da pilha. BP assume, inicialmente, o
valor 0000h (offset 0000), apontando para a base do segmento, podendo
receber atribuies durante a execuo do programa.
Todo acesso pilha feito em words, isto , no se pode acess-la
para guardar apenas o contedo dos registradores AL ou CL, sendo
necessrio guardar todo o AX ou o CX.
Uma caracterstica interessante e que deve ser notada que a pilha
do processador tem sua base num endereo de memria alto dentro do
segmento de pilha, crescendo em direo memria de endereo baixo
(Figura 27).

Arquitetura de Software de um
Microprocessador

Aponta para ooffset 0000


(basedosegmentodepilha)

SS

offset
0000
0001
.
.
.

Segmento
de Pilha
Base (Incio) do segmento = Fim da Pilha

Indica a posio(deslocamento) onde

ltimodado
. . .

FFFA
FFFB
FFFC
FFFD
FFFE
FFFF
Figura 27

3o dado
2o dado
1o dado

SP foi colocada a ltima palavra na pilha


(Topo da Pilha)

Indica umdeslocamentodentroda pilha

BP (inicialmenteaponta para a base)


Fim do segmento = Incio da Pilha

Segmento de pilha

Arquitetura de Software de um
Microprocessador

4.4 Modos de Endereamento de Memria


Quando um processador executa uma instruo, ele realiza uma
determinada funo sobre um ou dois dados. Estes dados, chamados de
operandos, podem ser parte da instruo, podem residir em um
registrador interno do processador, podem estar armazenados em um
endereo de memria, ou podem estar presente em uma porta de E/S.
Para acessar estas diferentes localizaes dos operandos, o processador
apresenta sete modos de endereamento de dados: endereamento por
registro, endereamento imediato, endereamento direto, endereamento
indireto por registro, endereamento por base, endereamento indexado,
e endereamento por base indexada. Em geral, as instrues Assembly
utilizam dois operandos: um operando deve ser um registrador e o outro
operando (dado imediato, offset ou registrador) identifica o modo de
endereamento utilizado.
Devemos entender os modos de endereamento como as formas
possveis de se manipular dados de/para a memria. Portanto, os casos
no includos nos endereamentos apresentados devem ser entendidos
como no possveis, uma vez que provocam erros de compilao.
Para entender as figuras que explicam os modos de endereamento,
deve-se imaginar o comportamento adotado pelo processador para
executar uma instruo. Os seguintes passos devem ser seguidos:
Busca da instruo na memria (segmento de cdigo): Gerao
do endereo fsico correspondente instruo que ser
executada (composio CS : IP).
Decodificao da instruo: Transformao de Assembly para
linguagem de mquina.
Busca dos operandos para execuo da instruo: Quando o
operando estiver localizado na memria (dado por um
deslocamento), gerao do endereo fsico correspondente ao
deslocamento do dado no segmento correspondente (DS, ES ou
SS), atravs da composio registrador de segmento :
deslocamento.
Execuo da instruo: Verificao das modificaes em
registradores e segmentos de memria.
Algumas observaes quanto modificao em registradores devem
ser feitas:
Os registradores de segmento (CS, DS, ES, SS) no modificam
seu valor durante a execuo de um programa a menos que seja
feito algum redirecionamento.
O ponteiro de instruo (IP), aponta sempre para a instruo
corrente, sendo incrementado automaticamente aps a
execuo de uma instruo. O IP, portanto, no deve receber
atribuies num programa.

Arquitetura de Software de um
Microprocessador

O registrador SP aponta sempre para o topo da pilha e seu valor


alterado (incrementado ou decrementado) automaticamente
aps a execuo de instrues para manipulao de pilha.
Os registradores AX, BX, CX, DX, SI, DI e BP podem receber
atribuies e, dessa forma, ter seus valores alterados.
O registrador de flags (F) pode ser alterado a partir de
atribuies (atravs das instrues para manipulao de flags)
ou depois da execuo de alguma instruo (flags de estado).

Uma observao importante deve ser feita quanto utilizao de


variveis. As variveis, largamente utilizadas por linguagens de alto nvel,
nada mais so que simples representao de um deslocamento de
memria. Dessa forma, todas as observaes feitas para os modos de
endereamento que manipulam deslocamentos so vlidas para utilizao
com variveis.

Arquitetura de Software de um
Microprocessador

4.4.1 Modo de Endereamento por Registro


No modo de endereamento por registro, os dois operandos so
registradores.
Outro operando: registrador.
Exemplo (Figura 28): MOV AX, BX
AX BX
Endereo

Situaoanterior
execuoda instruo
010016+0011

IP 0 0 1 1

01010h
01011h
01012h
01013h

CS : IP

CS 0 1 0 0
AX x x x x

Situaoapsa
execuoda instruo

BX 1 2 3 4

IP 0 0 1 3

Opcode
(linguagem
de mquina)

SegmentodeCdigo
Instruo anterior
XX
8B
MOV AX, BX
C3
Prxima instruo
XX

CS : IP

CS 0 1 0 0
AX 1 2 3 4
BX 1 2 3 4
Figura 28

Mneumnico
(linguagem assembly)

Modo de Endereamento por Registro

Arquitetura de Software de um
Microprocessador

4.4.2 Modo de Endereamento Imediato


No modo de endereamento imediato, um dos operandos est
presente no byte seguinte ao cdigo da instruo (opcode). Se bytes de
endereamento seguem o opcode, ento o dado a ser transferido de
maneira imediata vir logo aps os bytes de endereamento.
Outro operando: nmero (dado imediato).
Exemplo (Figura 29): MOV AL, 17h
AL 17h
Endereo

Situao anterior
execuoda instruo
IP 0 0 1 3

01012h
01013h
01014h
01015h

CS : IP

CS 0 1 0 0
AX 1 2 3 4

Opcode
(linguagem
de mquina)

Segmento deCdigo
Instruo anterior
XX
B0
MOV AL, 17h
17
Prxima instruo
XX

Situaoaps a
execuo da instruo
IP 0 0 1 5

CS : IP

CS 0 1 0 0
AX 1 2 1 7

Figura 29

Mneumnico
(linguagem assembly)

Modo de Endereamento Imediato

Arquitetura de Software de um
Microprocessador

4.4.3 Modo de Endereamento Direto


O modo de endereamento direto feito somando-se os dois bytes
seguintes ao opcode ao DS, para compor um novo endereo absoluto.
Outro operando: deslocamento dado por um nmero.
O deslocamento pode ser o nome de uma varivel, uma vez que uma
varivel um rtulo de uma posio de memria de dados.
Exemplo (Figura 30): MOV BX, [1102h]
BX (DS : 1102h)
[ ] indica um deslocamento no segmento de dados (DS).
Para fazer o endereamento atravs de ES ou SS, o segmento deve ser
especificado explicitamente. Por exemplo, MOV BX, (ES:1102h)
Endereo

Situaoanterior
execuo da instruo
IP 0 0 1 5

Segmento deCdigo
01014h
XX
01015h
8B
01016h
1E
01017h
02
01018h
11
01019h
XX

CS : IP

CS 0 1 0 0
DS 1 3 0 0

BX 1 2 3 4

Situaoaps a
execuo da instruo
IP 0 0 1 9

Opcode
(linguagem
de mquina)

Mneumnico
(linguagem assembly)

Instruo anterior

MOV BX, [1102h]

Prxima instruo

CS : IP

CS 0 1 0 0
DS 1 3 0 0
DS : 1102
BX 5 1 2 0

Figura 30

Segmento deDados
14102h
20h
14103h
51h

Modo de Endereamento Direto

LSB
MSB

Arquitetura de Software de um
Microprocessador

4.4.4 Modo de Endereamento Indireto por Registro


Nesse modo de endereamento, qualquer registrador pode ser
utilizado.
Outro operando: deslocamento dado por um registrador.
Exemplo (Figura 31): MOV AX, [BX]
AX (DS : BX)
BX aponta (ponteiro) para um dado no segmento de dados (DS).
[BX] contedo do endereo apontado por BX no segmento de dados.
Endereo

Situaoanterior
execuoda instruo
IP 0 0 1 9

CS : IP

CS 0 1 0 0
DS 1 3 0 0

AX 1 2 1 7
BX 5 1 2 0

Opcode
(linguagem
de mquina)

Mneumnico
(linguagem assembly)

01018h
01019h
0101Ah
0101Bh

Segmento deCdigo
Instruo anterior
XX
8B
MOV AX, [BX]
07
Prxima instruo
XX

18120h
18121h

SegmentodeDados
31h
LSB
00h
MSB

Situaoaps a
execuoda instruo
IP 0 0 1 B

CS : IP

CS 0 1 0 0
DS 1 3 0 0
BX 5 1 2 0
AX 0 0 3 1

DS : BX
Figura 31

Modo de Endereamento Indireto por Registro

Arquitetura de Software de um
Microprocessador

4.4.5 Modo de Endereamento por Base


Utilizado no tratamento de vetores. Apenas os registradores BX ou
BP (quando estiver usando a pilha) podem ser utilizados como base.
Os vetores so armazenados no segmento de dados de forma linear,
de acordo com a ordem imposta pelos ndices correspondentes. Para
referenciar um elemento vi v[i] de um vetor v formado por n elementos
v = {v0, v1, v2, ... , vn-1} {v[0], v[1], v[2], ... , v[n-1]}
o processador utiliza a noo de deslocamento, que depende no somente
do ndice, mas tambm da quantidade de bytes de cada elemento. Dessa
forma, cada elemento do vetor representado a partir do elemento inicial
v[0] v+0 = v, adicionado de um deslocamento. A Figura 32 ilustra a o
armazenamento e a representao de vetores com elementos de 1 byte na
memria. De forma geral, para um vetor cujos elementos so de b bytes,
o elemento i ser dado por: v[i] = v + i b.
SegmentodeDados
v[0]
v[1]
v[2]
. . .
v[n-1]

Figura 32

v+0
v+1
v+2
v+n-1

Forma de armazenamento e representao de vetores na memria

Outro operando: deslocamento dado por um registrador (base) +


nmero (deslocamento).
Exemplo (Figura 33): MOV CX, [BX+0102h]
CX

(DS
:
(BX+0102h))
[BX+0102h] = base (v) + deslocamento adicional deslocamento adicional
= ndice quantidade de bytes

Arquitetura de Software de um
Microprocessador

Endereo

Situaoanterior
execuoda instruo
IP 0 0 1 B

CS : IP

CS 0 1 0 0
DS 1 3 0 0

Situaoapsa
execuoda instruo

CX x x x x

IP 0 0 1 F

BX 5 1 2 0

CS 0 1 0 0

BX
CX

0 1 F F

SegmentodeCdigo
Instruo anterior
XX
8B
MOV CX, [BX+0102h]
8F
02
01
Prxima instruo
XX

18222h
18223h

SegmentodeDados
FFh LSB
01h
MSB

CS : IP

DS : (BX+0102)

Figura 33

Mneumnico
(linguagem assembly)

0101Ah
0101Bh
0101Ch
0101Dh
0101Eh
0101Fh

DS 1 3 0 0
5 1 2 0

Opcode
(linguagem
de mquina)

Modo de Endereamento por Base

Arquitetura de Software de um
Microprocessador

Regras para Especificao de ndices:


As
dados:

seguintes regras devem ser observadas para endereamento de


os ndices podem estar em qualquer ordem;
nomes de registradores devem estar sempre entre colchetes [ ];
podem ser combinados nomes de registradores e nmeros
(endereos constantes) em um nico par de colchetes [ ], desde
que separados pelo sinal +; e
se o nmero vier antes do registrador, no necessrio usar o
sinal +.

Notao mais recomendada: varivel [registrador de base]


[registrador de ndice] + constante
Exemplos:
A[BX][SI]+8

A[BX][SI+8]
A[8+SI+BX]

[A+SI+BX+8]
Matriz: A[BX][SI] [A+BX+SI]
Vetor: A[BX] ou A[SI] [BX+A] ou [A+SI] [BX+SI] (BX
contm o endereo de A)
4.4.6 Modo de Endereamento Direto Indexado
Esse modo de endereamento tambm usado para manipulao de
vetores e feito utilizando-se os registradores SI ou DI como
indexadores. Um deslocamento somado a um desses registradores.
Outro operando: deslocamento dado por um nmero (base) + um
registrador de ponteiro de ndice (deslocamento adicional).
Exemplo (Figura 34): MOV DX, [0100h+SI]
DX (DS : 0100h+SI)
[0100h+SI] = base (v) + deslocamento adicional (ndice do elemento
nmero de bytes)

Arquitetura de Software de um
Microprocessador

Endereo

Situaoanterior
execuoda instruo
IP 0 0 1 F

CS : IP

CS 0 1 0 0
DS 1 3 0 0

Situaoapsa
execuoda instruo

DX x x x x

IP 0 0 2 3

SI

0 0 2 0

Opcode
(linguagem
de mquina)

Mneumnico
(linguagem assembly)

0101Eh
0101Fh
01020h
01021h
01022h
01023h

SegmentodeCdigo
Instruo anterior
XX
8B
MOV DX, [0100h+SI]
94
00
01
Prxima instruo
XX

13120h
13121h

SegmentodeDados
45h
LSB
1Fh
MSB

CS : IP

CS 0 1 0 0
DS 1 3 0 0
SI

0 0 2 0

DX 1 F 4 5
DS : (0100+SI)

Figura 34

Modo de Endereamento Indexado

Arquitetura de Software de um
Microprocessador

4.4.7 Modo de Endereamento por Base Indexada


Utilizado para a manipulao de matrizes na forma Amxn. Usa BX
ou BP (quando estiver usando a pilha) para indicar o nmero da linha, e
SI ou DI para o nmero da coluna.
Outro operando: deslocamento dado por um nmero (base) + um
registrador (nmero da linha) + um registador de ponteiro de ndice
(nmero da coluna), ou, alternativamente, um registrador (base) + um
nmero (nmero da linha) + um registador de ponteiro de ndice (nmero
da coluna).
As matrizes, apesar de serem entendidas como dados
bidimensionais, so armazenadas no segmento de dados de forma linear,
linha a linha. Uma matriz A formada por mn elementos, possui
representao matemtica dada por

a11 a12 a13 a1n a[1][1] a[1][2] a[1][3] a[1][n]


A=


am1 am2 am3 amn mn a[m][1] a[m][2] a[m][3] a[m][n] mn
e representao computacional equivalente dada por

a0,0 a0,1 a0,2 a0,(n1)


A=



a(m1),0 a(m1),1 a(m1),2 a(m1),(n1)

ou, alternativamente,

mn

Arquitetura de Software de um
Microprocessador

a[0][0] a[0][1] a[0][2] a[0][n 1]


A=

a[m 1][0] a[m 1][1] a[m 1][2] a[m 1][n 1] mn


podendo ser representada por um vetor correspondente, composto por m
sub-vetores na forma

A=

A[0]
A[1]

A
[
m

1
]

no qual cada sub-vetor A[i] possui n elementos.


Para referenciar um elemento Aij A[i][j] de uma matriz A formada
por mn elementos o processador utiliza, da mesma forma que para
vetores, a noo de deslocamento. No caso de vetores, apenas um
deslocamento adicional suficiente para caracterizar um elemento. Para
matrizes, no entanto, dois deslocamento so necessrios: um para indicar
o nmero da linha e outro para o nmero da coluna s quais o elemento
pertence. Dessa forma, cada elemento da matriz representado a partir
do elemento inicial a[0][0] A+0+0 =A, adicionado de dois
deslocamentos (linha+coluna). A Figura 35 ilustra o armazenamento e a
representao de matrizes com elementos de 1 byte na memria, bem
como o vetor linear correspondente a esta representao.

Arquitetura de Software de um
Microprocessador

De forma geral, para uma matriz cujos elementos so de b bytes, o


elemento (i, j) ser dado por: a[i][j] = A + i n b + j b.
SegmentodeDados
mlinhas
A[0]

a[0][0]
a[0][1]
. . .
a[0][n-1]

Representao
A+0n+0 = Base
A+0n+1
. . .
A+0n +(n-1)

A[1]

a[1][0]
a[1][1]
. . .
a[1][n-1]

A+1n+0
A+1n +1
. . .
A+1n +(n-1)

. . .

. . .

A[m]

a[m-1][0]
a[m-1][1]
. . .
a[m-1][n-1]

n colunas

n colunas

n colunas

Figura 35

Vetor Correspondente
v[0]
v[1]
. . .
v[n-1]
v[(n-1)+1] = v[n]
v[(n-1)+2] = v[n+1]
. . .
v[n+(n-1)] = v[2n+1]

. . .
A+(m-1)n+0
A+(m-1)n+1
. . .
A+(m-1)n+(n-1)

. . .
v[(m-1)n]
v[(m-1)n+1]
. . .
v[(m-1)n+(n-1)] = v[mn-1]

Forma de armazenamento e representao de matrizes na memria

Exemplo (Figura 36): MOV AH, [BX+0100h+SI]


AH (DS : (BX+0100h+SI))
[BX+0100h+SI] = linha bytes + base (A) + coluna bytes base (A) +
linha bytes + coluna bytes
Endereo

Situao anterior
execuo da instruo
IP 0 0 2 3

CS : IP

CS 0 1 0 0
DS 1 3 0 0

Situao aps a
execuo da instruo

BX 5 1 2 0

IP 0 0 2 7

AX

0 0 3 1

CS 0 1 0 0

SI 0 0 2 0

DS 1 3 0 0

Opcode
(linguagem
de mquina)

Mneumnico
(linguagem assembly)

01022h
01023h
01024h
01025h
01026h
01027h

Segmento deCdigo
Instruo anterior
XX
8B
MOV AH, [BX+0100h+SI]
80
00
01
Prxima instruo
XX

18240h
18241h

SegmentodeDados
11h
A3h

CS : IP

SI 0 0 2 0
BX 5 1 2 0
AX 1 1 3 1
DS : (0100+BX+SI)

Figura 36

Modo de Endereamento por Base Indexada

Programao em Linguagem Assembly

5 Programao em Linguagem Assembly


5.1 Segmentao e Estrutura de Programao (Programa
Bsico)
As declaraes de um programa fonte escrito em assembly (o que
corresponde a cada linha de entrada) podem ser:
Comentrios;
Instrues assembly (linguagem); ou
Diretivas do assembler (montador).
Os comentrios permitem que explicaes sobre determinadas
linhas de programa sejam realizadas sem ocasionar erro de compilao.
As instrues assembly indicam as ordens que devem ser executadas pela
CPU e so transcries (ou notaes) simplificadas, que correspondem
aos cdigos binrios das instrues de mquina. As diretivas do
assembler (pseudo-operaes) so comandos especiais com o objetivo de
facilitar a escrita de um programa sob forma simblica. No so
incorporadas ao programa objeto (extenso .obj) e servem simplesmente
como orientao para o montador. Tanto as instrues assembly quanto
as diretivas do assembler podem incluir operadores. Os operadores do
ao assembler informaes adicionais acerca dos operandos, nos locais
onde possam existir ambigidades.
Apesar das declaraes poderem ser escritas comeando em
qualquer posio na linha, a Figura 37 ilustra a conveno de
alinhamento mais utilizada.
Nome
(Coluna 1)

Soma

Opcode Operando
(Coluna 9) (Coluna 17)

DW

Figura 37

5 DUP (?)

Comentrio
(Coluna 41)

; vetor soma

Conveno para alinhamento de declaraes

As instrues e diretivas de um programa Assembly podem ser


escritas em maisculas ou minsculas (Assembly uma linguagem no
case-sensitive); entretanto, as seguintes sugestes so dadas de forma a
tornar o programa mais legvel:
palavras reservadas (instrues e diretivas) devem ser escritas
em letras maisculas; e
nomes em geral (comentrios e variveis) podem ser utilizadas
letras minsculas ou maisculas, dando-se preferncia s
minsculas.

Programao em Linguagem Assembly

5.1.1 Sintaxe dos Comentrios


Os comentrios podem ser utilizados de trs formas diferentes:
como uma linha em branco;
como uma linha iniciada com o caractere ponto e vrgula (;) e
seguida de texto; ou
depois de uma instruo, bastando adicionar o caractere (;) para
delimitar o incio do comentrio.
Exemplos de comentrios:
; comentario como uma linha iniciada com ponto e virgula
MOV
AX, 1234H
; comentario depois de uma instrucao

Programao em Linguagem Assembly

5.1.2 Sintaxe das Instrues e Diretivas do Assembly


Para os montadores MASM (Macro ASseMbler) e TASM (Turbo
ASseMbler), as instrues devem ser escrita, obrigatoriamente, uma por
linha, podendo ter at quatro campos, delimitados de acordo com a
seguinte ordem:
[label:]

mneumnico [operando(s)]

[; comentrio]

onde label o rtulo dado ao endereo da instruo (no segmento de


cdigo), mneumnico representa a instruo, operandos so os dados
operados pela instruo e comentrio qualquer texto escrito para
elucidar ao leitor do programa o procedimento ou objetivo da instruo.
Destes, apenas o campo mneumnico sempre obrigatrio. O campo
operandos depende da instruo includa na linha e os campos label e
comentrio so sempre opcionais. Todos os valores numricos esto, por
default, em base decimal, a menos que outra base seja especificada.
5.1.3 Modelo de Programa Assembler Simplificado (.EXE)
;
definio do modelo desejado
; ****************************************************************************
DOSSEG
.MODEL modelo
;
definio da base numrica desejada
; ****************************************************************************
[.RADIX base]
;
definio do segmento de pilha
; ****************************************************************************
.STACK [tamanho]
;
rea de definio de equivalncias
; ****************************************************************************
; equivalncias
;
criao do segmento de dados
; ****************************************************************************
.DATA
; variveis
;
incio do segmento de cdigo
; ****************************************************************************
.CODE
;
procedimento principal
; ****************************************************************************
Principal PROC NEAR
; incio do procedimento principal
MOV
MOV
MOV

AX, @DATA
DS, AX
ES, AX

; instrues para que DS e ES


; apontem para a rea de
; dados criada
; corpo do programa principal

MOV
INT

AH, 4Ch
21h

; funo para trmino de programa


; atravs da INT 21h

Programao em Linguagem Assembly

Principal ENDP
END

Principal

; final do procedimento principal


; final do programa

Programao em Linguagem Assembly

Observao: Quando um programa carregado, os registradores de


dados DS e ES no vm apontando para os segmentos de dados, devendo
ser implementado atravs das instrues (primeira linha do cdigo do
programa principal):
MOV
MOV
MOV

AX, @DATA
DS, AX
ES, AX

; copia para AX o endereo da rea de dados


; faz DS apontar para a rea de dados
; faz ES apontar para a rea de dados

5.1.4 Diretivas Simplificadas de Definio de Segmentos


O compilador implementa uma forma simplificada de definio de
segmentos, a qual pode ser usada na maioria dos programas .exe. Muitos
defaults assumidos so os mesmos usados pelos compiladores das
linguagens de alto nvel, facilitando a criao de mdulos que sero
ligados a programas criados em outras linguagens. Para que o montador
assuma uma dada estrutura, suficiente a definio de um modelo. As
principais diretivas utilizadas no modelo simplificado so: DOSSEG,
.MODEL, .STACK, .DATA, .CODE.
DOSSEG, .MODEL:
A diretiva .MODEL usada em conjunto com a diretiva DOSSEG
para definir um modelo e ao mesmo tempo especificar ao ligador (ou
linkador, ou linkeditor) que os segmentos devem ser agrupados na ordem
convencional adotada pelo sistema operacional para programas escritos
em linguagens de alto nvel.
Sintaxe:
DOSSEG
.MODEL [modelo]
Os modelos possveis so:
TINY, no qual um nico segmento de 64 kbytes ser definido
para acomodar o cdigo, a pilha e os dados do programa.
Programas com caractersticas de .com;
SMALL, modelo default, no qual todo o cdigo ser agrupado
num mesmo segmento de 64KB, enquanto os dados e a pilha
estaro num outro segmento de 64KB;
MEDIUM, no qual o cdigo poder ser maior que 64KB, mas os
dados e a pilha estaro num mesmo segmento;
COMPACT, no qual o cdigo menor que 64KB e dados e pilha
podem ser maiores que 64KB;
LARGE, no qual tanto o cdigo quanto os dados podem ser
maiores que 64KB.
HUGE, semelhante ao LARGE, porm permite a criao de
tabelas (matrizes) de dados maiores que 64KB; e
FLAT, onde todos os dados e o cdigo esto num nico
segmento de 4 Gbytes (disponvel apenas para operaes em
modo protegido).

Programao em Linguagem Assembly

Tabela 4
Modelo
de
Memria
TINY
SMALL
MEDIUM
COMPACT
LARGE
HUGE
FLAT

Atribuies default para os modelos de programa


Atributo
para
o Cdigo
NEAR
NEAR
FAR
NEAR
FAR
FAR
NEAR

Atributo
para
Dados
NEAR
NEAR
NEAR
FAR
FAR
FAR
NEAR

Sistema
Operacional
DOS
DOS e Windows
DOS e Windows
DOS e Windows
DOS e Windows
DOS e Windows
Windows NT

Segment
o
nico
Sim
No
No
No
No
No
Sim

Programao em Linguagem Assembly

.STACK: Permite a criao de um segmento de pilha. O tamanho default


1 kbyte, podendo ser alterado na prpria diretiva.
Sintaxe:
.STACK [tamanho_da_pilha]
.DATA: Marca o incio do segmento de dados, no qual todas as variveis,
tabelas e mensagens devem ser colocadas.
Sintaxe:
.DATA
.CODE: Marca o incio do segmento de cdigo do programa. No caso de
um programa possuir mais de um segmento de cdigo, um nome
deve ser especificado para cada segmento.
Sintaxe:
.CODE [segmento]
Observao: A abertura de um novo segmento implica o fechamento
do anterior.
5.1.5 Operadores de Referncia a Segmentos no Modo Simplificado
Os principais operadores de referncia a segmentos utilizados no
modelo simplificado so: @DATA, @CODE e @CURSEG.
O operador @DATA usado para referenciar o grupo
compartilhado por todos os segmentos de dados, o operador @CODE
usado para referenciar o segmento de cdigo e operador @CURSEG
permite referenciar o segmento corrente.

5.2 Ferramentas para Montagem, Ligao e Depurao


de Programas
5.2.1 Montador Assembler (TASM)
TASM.EXE

Montador para a linguagem Assembly.

Terminao dos arquivos fonte: .ASM


Sintaxe:
TASM
[opes]
fonte
[,objeto]
[,referncia_cruzada] [;]
Linha de Comando mais Comumente Utilizada: TASM /z/zi
Opo
/z
/zi

5.2.2 Ligador (TLINK)

Significado
Display source line with error
message
Debug info: zi=full

[,listagem]
programa

Programao em Linguagem Assembly

TLINK.EXE
objeto.

Ligador cria um programa executvel a partir de um

Sintaxe: TLINK [opes] objetos [, executvel] [, mapa]


bibliotecas] [;]
Linha de Comando mais Comumente Utilizada: TLINK /x/v programa
Opo
/x
/v

Significado
No map file at all
Full
symbolic
information

debug

[,

Programao em Linguagem Assembly

5.2.3 Depurador Turbo Debugger (TD)


TD.EXE

Depurador permite a depurao de programas.

Sintaxe: TD [opes] [programa [argumentos]] x


(desabilita
opo x)
Linha de Comando mais Comumente Utilizada: TD programa

Segmento de Cdigo

Flags
Registradores

Segmento de Pilha

Segmento de Dados

Figura 38

Tela de depurao do Turbo Debugger

Funes:
F2: brkpt (insere um breakpoint)
F4: here (executa at a posio do cursor)
F7: trace (executa linha por linha, sem entrar nos desvios e subotinas)
F8: step (executa linha por linha, entrando nos desvios e subotinas)
F9: run (executa at o final do programa ou at um breakpoint)
CTRL-F2: reset (reinicia o programa, sem precisar sair do depurador)

Tela com os Segmentos e Registradores: View, CPU.


Ver o Segmento de dados: Clica com o boto esquerdo do mouse em cima
da janela do segmento de dados (para selecionar a janela), clica com o
boto direito (aparece uma janela) e seleciona Goto.... O incio do
segmento de dados em DS:0000.

Programao em Linguagem Assembly

5.3 Diretivas do Assembler


5.3.1 Diretivas de Equivalncia para o Programa (Definio de
Constantes)
So diretivas que ajudam a documentar melhor o programa,
tornando-o claro para quem o estudar.
EQU: Usada para atribuir uma expresso (numrica ou no) a um
smbolo. Sempre que este smbolo aparecer no programa, o
montador o substituir pela expresso qual ele est associado.
Um valor fixado por EQU no poder ser redefinido. A expresso
pode ser um nmero, um caractere, uma string.
Sintaxe:
nome EQU expresso
5.3.2 Diretiva de Definio de Base Numrica
.RADIX:
A base default a decimal, podendo ser modificada atravs da
diretiva .RADIX.
Quando a base fixada como atual for hexadecimal, deve-se ter o
cuidado com valores terminados por D ou B. Nestes casos, deve-se
necessariamente usar o H aps o valor pois a ausncia levaria o montador
a reconhecer o valor como na base decimal ou binria, o que fatalmente
implicaria um erro de sintaxe ou mesmo de lgica.)
Sintaxe:
.RADIX base
O operando base pode assumir os valores 2 (binria), 8 (octal), 10
(decimal) ou 16 (hexadecimal).
A forma de representar nmeros nas bases possveis colocando as
letras
B
(binria),
Q (octal), H (hexadecimal) e D (decimal) depois do nmero. Exemplo:
0A2h, 34d, 1101b.
5.3.3 Diretivas de Definio de rea de Armazenamento de Dados
(Variveis)
O acesso a uma varivel sempre deve ser feito por um registrador
de tipo compatvel com a definio da varivel. As variveis podem ou no
ser inicializadas na definio (utilizao do operador ?). Para reservar
memria para dados do tipo variveis, tabelas (matrizes) e mensagens
(strings), podem ser utilizadas as diretivas DB, DW, DD, DQ, DT.
DB: Para definio de variveis, tabelas e mensagens, alocando espao de
1 byte (8 bits) para cada um dos elementos. Os valores podem variar de

Programao em Linguagem Assembly

128 a 127 (-27 a 27-1) ou de 0 a 255 (0 a 2 8-1). Principal uso: nmeros


pequenos ou caracteres.
DW: Para definio de variveis, tabelas e vetores, alocando 2 bytes (16
bits) para cada elemento. Principal uso: nmeros maiores e endereos
(offset). Variao: -215 a 215-1 ou de 0 a 216-1)
DD: Para definio de variveis ou palavras duplas de 4 bytes (32 bits),
ou real curto (1 bit mais significativo para o sinal, 8 bits para o expoente
e 23 bits para mantissa). Os valores inteiros podem variar de -2 31 a 231-1
ou de 0 a 232-1. Principal uso: endereos completos (segmento : offset).

Programao em Linguagem Assembly

DQ: Para definio de palavras qudruplas de 8 bytes (64 bits), ou real


longo (1 bit mais significativo para o sinal, 11 bits para o expoente e 52
bits para mantissa). Os valores inteiros podem variar de 263 a 263-1 ou de
0 a 264-1. No existe uma forma para acessar os elementos diretamente,
sendo necessrio um mtodo com uso de endereamento indireto com
registrador. Principal uso: pelo coprocessador matemtico.
DT: Para definio de BCD compactado de 10 bytes (9 bytes para valor +
1 byte para sinal). Uso principal: pelo coprocessador matemtico.
Sintaxe:
[varivel] diretiva [tipo PTR] expresso1 [,expresso 2,
expresso 3, ...]
O tipo pode ser: BYTE, WORD, DWORD, QWORD, TWORD ou o
nome de uma estrutura.
Regras para Especificao de Nomes:
Nomes podem conter letras, nmeros (dgitos de 0 a 9) e os
caracteres ? _ $ @
O primeiro caractere no pode ser um nmero. Portanto,
nmeros devem, obrigatoriamente, comear com um dgito.
Exemplo: AAh (nome) 0AAh (nmero).
Nomes podem possuir qualquer quantidade de caracteres;
entretanto, apenas os 31 primeiros sero utilizados pelo
compilador. Logo, nomes devem ser pequenos e significativos.
Ateno! Nmeros comeam sempre com dgitos e variveis
comeam sempre com letras!
Declarao de Vetores:
Como todas as variveis, os vetores so declarados atravs da
forma geral. A diretiva define o tipo dos elementos do vetor e pode ser
DB, DW, DD ou DQ, de acordo com a quantidade de bytes desejados. A
expresso representa a inicializao dos elementos. A inicializao de
vetores pode ser feita de duas formas: a partir da enumerao dos
valores, ou de forma genrica, atravs do operador DUP.
Exemplos:
X

db

A, 0Ah, 3d, 0110b

Inicializa 5 elementos do vetor X, cada elemento do tipo byte, com


valores iniciais A (ASCII), A (hexadecimal), 3 (decimal) e 0110 (binrio).
Y

dw

NMAX dup (?)

Inicializa NMAX elementos do vetor Y, todos do tipo word e com


valor inicial qualquer. NMAX deve ser uma constante.
Declarao de Strings:
As strings so vetores especiais formados por caracteres. Como os
caracteres so elementos de 1 byte, as a diretiva de declarao de strings
deve ser obrigatoriamente DB.
Exemplos:
X
Y

db
DB

V,I,N,I,C,I,U,S
VINICIUS

Programao em Linguagem Assembly

As duas strings so inicializados com a mesma seqncia de


caracteres Vinicius.
Declarao de Matrizes:
As matrizes, como j foi visto, so conjuntos de vetores, associados
em 2 ou mais dimenses. A forma de declarar matrizes semelhante a de
vetores, apenas com uma modificao lgica.
X

DB

1,5,2,8,3,5

Inicializa tanto um vetor de 6 elementos como uma matriz 23 ou


32 ou 16 ou 61.
Y

DW

M DUP (N DUP (?))

Inicializa MN elementos de uma matriz mn, todos do tipo word e


valor inicial qualquer.
Lembrando que N e M devem ser constantes!

Programao em Linguagem Assembly

5.3.4 Diretivas de Definio de Procedimentos


No programa assembly, todo o cdigo deve estar dentro de um ou
mais procedimentos. Basicamente, um procedimento uma subrotina,
com a particularidade que o prprio mdulo principal tratado como um
procedimento pelo sistema operacional.
PROC, ENDP:
O par de diretivas PROC, ENDP usado para limitar um
procedimento e determinar o seu atributo NEAR ou FAR.
Sintaxe:
nome_do_procedimento PROC [NEAR ou FAR]
;
; corpo do
procedimento
;
nome_do_procedimento ENDP
Se um procedimento tem atributo FAR, significa que ser chamado
com uma instruo CALL inter-segmento; se for NEAR, por um CALL
intra-segmento, afetando apenas o IP.
5.3.5 Diretivas de Controle do Assembly
END: Marca o fim de um programa fonte.
Sintaxe:
END [nome_de_entrada_do_programa]
ORG:

Define um novo valor para o contador de locao ou para o


apontador de instruo dentro do segmento corrente. Instrui o
compilador a comear de um offset maior que zero.
Principal Uso: Em programas de extenso .com, que no possuem
reas de dados, para forar a primeira instruo a ficar no endereo
100h (256 bytes livres).
Sintaxe:
ORG endereo

5.4 Operadores do Assembler


5.4.1 Operadores para Dados
Operadores para Criao de Dados:
? (sinal de interrogao): Usado em conjunto com as diretivas de
reserva de rea de armazenamento BD, DW, DD e DT, para indicar
que, naquela posio, no ser definido um valor inicial.
Inicializao de variveis com valores arbitrrios (lixo).

Programao em Linguagem Assembly

DUP: Possibilita a alocao de um dados tantas vezes quanto for o


seu prefixo n. Usado na inicializao coletiva de vetore, matrizes e
strings. A expresso deve aparecer entre parnteses.
Sintaxe:
n DUP (expresso1, expresso2, ...)
+
*
/
MOD: Operadores aritmticos que realizam,
respectivamente, soma, subtrao, multiplicao, diviso inteira e
resto da diviso inteira.

Programao em Linguagem Assembly

Operadores para Referncia a Dados: utilizados, geralmente, como


operandos de instrues.
TYPE: Retorna um nmero indicando o tamanho (bytes) de um
dado ou do tipo de um smbolo. O nmero pode ser: 0 (constante), 1
(BYTE),
2
(WORD),
4
(DWORD),
8 (QWORD), 10 (TBYTE), 0FFFFh (NEAR), 0FFFEh (FAR) ou o
nmero de bytes de uma estrutura.
LENGTH: Retorna o nmero de elementos alocados com uma das
diretivas de dados (nmero de elementos do dado).
Sintaxe:
LENGTH varivel
SIZE: Devolve o tamanho do dado alocado com uma das diretivas
de dados (nmero total de bytes alocados = type lenght).
Sintaxe:
SIZE varivel
SEG: Devolve o endereo do segmento onde o dado est alocado
(16 bits).
Sintaxe:
SEG varivel
OFFSET: Devolve o deslocamento de uma varivel (ou rtulo)
dentro do segmento onde ela est definida (distncia desde o
primeiro byte dentro do segmento). Fornece o deslocamento do
dado na memria (offset). Endereo fsico do dado = SEG : OFFSET.
interessante notar que a instruo
MOV BX, OFFSET tabela
semelhante instruo
LEA BX, tabela
$ (dlar): Contador de locao. Representa o endereo de uma
instruo ou de um dado. Contm o offset da prxima locao
disponvel. Utilizado para calcular o comprimento de um dado ou de
instrues.
Exemplo:
msg DB
Vinicius
; define uma string
msg
tammsg
EQU
$-msg
; define o tamanho da
string msg (tammsg=8)
5.4.2 Operadores de Especificao de Tamanho
Especificao de tamanho para Dados:
BYTE PTR: Fora o montador a assumir o dado referenciado como
do tamanho de um byte. A expresso precisa ser um endereo.
WORD PTR: Fora o montador a assumir o dado referenciado
como do tamanho de uma palavra. A expresso precisa ser um
endereo.

Programao em Linguagem Assembly

DWORD PTR: Fora o montador a assumir o dado referenciado


como do tamanho de uma dupla palavra, respectivamente. A
expresso precisa ser um endereo ou nome no programa.
Especificao de tamanho para Cdigo:
FAR PTR: Fora uma expresso a gerar um cdigo do tipo intersegmento. Usado para chamar uma sub-rotina ou provocar um
desvio para uma sub-rotina em outros segmento de memria.
NEAR PTR: Usado com instrues JMP e CALL para especificar
que a instruo deve gerar um cdigo do tipo intra-segmento.

Programao em Linguagem Assembly

5.5 Conjunto de Instrues Assembly


5.5.1 Instrues para Transferncia
MOV:
Transfere um byte ou uma palavra (word) de dados de um
operando fonte (opf) para um operando destino (opd).
Mneumni
co
MOV

Formato

Operao

MOV opd,
opf

(opd)
(opf)

Variaes possveis de operandos:


Operando
destino
Memria
Registrador
Registrador
Registrador
Memria
Registrador de
segmento
Registrador

Operando fonte
Registrador
Memria
Registrador
Dado imediato
Dado Imediato
Registrador
Registrador de
segmento

XCHG: Permite a troca de um dado presente num operando fonte por um


presente num operando destino.
Mneumni
co
XCHG

Formato

Operao

XCHG opd,
opf

(opd)
(opf)

Variaes possveis de operandos:


Operando
destino
Memria
Registrador

Operando
fonte
Registrador
Registrador

XLAT, XLATB: A execuo de uma instruo XLATB permite que o


contedo na posio de memria endereada por DS : (BX + AL)
seja trazido para AL. Na instruo XLAT, pode ser referenciado um
outro segmento de dados associado a BX.
Mneumni
co
XLATB

Formato

Operao

XLATB

XLAT

XLAT
fonte_da_tabela

(AL) ((AL) + (BX) +


(DS)0)
(AL) ((AL) + (BX) +
(segmento)0)

Programao em Linguagem Assembly

LEA: Usada para carregar um registrador especfico (reg16) com um


offset de 16 bits.
Mneumni
co
LEA

Formato

Operao

LEA reg16,
offset

(reg16)
(offset)

LDS, LES ou LSS: Usadas para carregar, respectivamente, DS, ES ou SS,


e um registrador especfico com um endereo completo de memria
(segmento : offset).
Mneumni
co
LxS

Formato

Operao

LxS reg16,
offset

(reg16)
(offset)
(xS)
(segmento)

Programao em Linguagem Assembly

5.5.2 Instrues Aritmticas


ADD:
Permite adicionar operandos de 8 ou de 16 bits.
ADC:
Permite adicionar operandos de 8 ou de 16 bits e mais o bit
CARRY.
SUB:
Permite subtrair operandos de 8 ou de 16 bits.
SBB:
Permite subtrair operandos de 8 ou de 16 bits, com
emprstimo (bit CARRY).
Mneumni
co
ADD

Formato

Operao

ADD opd,
opf

(opd) (opf) + (opd)


(CF) transporte
(opd) (opf) + (opd) +
(CF)
(CF) transporte
(opd) (opd) (opf)
(CF) emprstimo
(opd) (opd) (opf)
(CF)
(CF) emprstimo

ADC

ADC opd,
opf

SUB

SUB opd,
opf

SBB

SBB opd,
opf

Variaes possveis de operandos:


Operando
destino
Memria
Registrador
Registrador
Registrador
Memria

Operando
fonte
Registrador
Memria
Registrador
Dado imediato
Dado Imediato

INC: Permite incrementar operandos de 8 ou de 16 bits.


DEC:
Permite decrementar operandos de 8 ou de 16 bits.
NEG:
Faz o complemento de 2 do operando destino.
Mneumni
co
INC
DEC
NEG

Format
Operao
o
INC opd (opd) (opd) +
1
DEC opd (opd) (opd)
1
NEG opd (opd) (opd)

Variaes possveis de operando destino: memria, registrador de 8


bits ou de 16 bits.
AAA:

Faz um ajuste no acumulador AL aps uma operao de soma


ou de incremento com nmeros BCD no compactados (ASCII).

Programao em Linguagem Assembly

DAA:

Faz um ajuste no acumulador AL aps uma operao de soma


ou de incremento com nmeros BCD compactados.
AAS:
Faz um ajuste no acumulador AL aps uma operao de
subtrao ou de decremento com nmeros BCD no compactados
(ASCII).
DAS:
Faz um ajuste no acumulador AL aps uma operao de
subtrao ou de decremento com nmeros BCD compactados.
As instrues AAA, DAA, AAS e DAS devem ser includas
imediatamente aps a operaes de adio, subtrao, incremento ou
decremento de nmeros ASCII ou BCD.

Programao em Linguagem Assembly

Mneumni
co
AAA

Format
o
AAA

DAA
AAS

DAA
AAS

DAS

DAS

Operao
(AL)BCD (AL)2
(AH) 0, se (AL)BCD
9
(AH) 1, se (AL)BCD
>9
(AL)BCD (AL)2
(AL)BCD (AL)2
(AH) 0, se (CF) = 0
(AH) FFh, se (CF)
=1
(AL)BCD (AL)2

MUL, DIV, IMUL, IDIV:


O processador suporta instrues de multiplicao e diviso de
nmeros binrios (sinalizados ou no) e nmeros BCD. Para operaes
com nmeros no sinalizados, existem as instrues MUL e DIV, e para
nmeros sinalizados, as instrues IMUL e IDIV. O modo de operao das
instrues, para nmeros sinalizados ou no, o mesmo.
Resultado da Multiplicao:
Operando de 8 bits:
(AX) (AL) (operando de 8 bits)
Operando de 16 bits:

(DX, AX) (AX) (operando de 16 bits)

Observao: importante notar que a multiplicao sempre feita entre


operadores de mesmo tamanho (8 ou 16 bits).
Resultado da Diviso:
Numa operao de diviso, apenas o operando fonte especificado.
O outro operando o contedo de AX, para operaes com operandos de
8 bits, ou o contedo de (DX, AX), para operaes com operandos de 16
bits. Se, na diviso, o dividendo for zero ou o quociente no couber no
registrador de resultado, gerada uma interrupo INT 0.
Operando de 8 bits:

AX

(AL) Quociente operando


de8bits

(AH)

Resto

(DX)

Resto

AX

de8bits
operando

Operando de 16 bits:

DX, AX

(AX) Quociente operando


de16bits

DX, AX

de16bits
operando

Observao: As instrues CBW e CWD ajustam valores de AL (byte)


para AX (word) e de AX (word) para DX : AX (dword), respectivamente.

Programao em Linguagem Assembly

AAM:
Ajusta o resultado do acumulador AL aps uma operao de
multiplicao com nmeros BCD no compactados, devolvendo-o a
AX (AH contm as dezenas e AL as unidades).
Formato de implementao: AAM
AAD:
Ajusta o dividendo contido em AX antes da operao de
diviso de nmeros BCD no compactados.
Formato de implementao: AAD
Observao: No existe multiplicao ou diviso para nmeros BCD
compactados. Portanto, necessrio descompact-los antes de realizar
essas operaes.

Programao em Linguagem Assembly

5.5.3 Instrues Lgicas


AND, OR, XOR, NOT: Permitem implementar as operao lgicas AND
(e), OR (ou), XOR (ou exclusivo) e NOT (negao). Todas as
operaes so executadas bit a bit entre os operandos fonte e
destino.
Mneumni
co
AND
OR
XOR
NOT

Formato

Operao

AND opd,
opf
OR opd, opf

(opd) (opf) .e.


(opd)
(opd) (opf) .ou.
(opd)
(opd) (opf) .xor.
(opd)
(opd) ( opd )

XOR opd,
opf
NOT opd

Variaes possveis para o operando destino na instruo NOT:


memria e registrador.
Variaes possveis de operandos para as instrues AND, OR e
XOR:
Operando
destino
Memria
Registrador
Registrador
Registrador
Memria

Operando
fonte
Registrador
Memria
Registrador
Dado imediato
Dado Imediato

TEST: Testa o primeiro operando para verificar se um ou mais bits so 1.


Utiliza uma mscara para o teste: bits 1 indicam necessidade de
teste, ao contrrio de bits 0. A instruo no modifica o operando
destino. O resultado atribudo ao flag ZF: se pelo menos um dos
bits testados for 1, ZF=1; caso contrrio, se todos os bits testados
forem zero, ZF=0.
Formato de implementao: TEST destino, mscara
Exemplos:
TEST 10001110b, 10000011b Sero testados os bits 0, 1 e
7 do operando destino. O resultado da operao ser ZF = 1.
TEST 10001110b, 00110001b Sero testados os bits 1, 4 e
5 do operando destino. O resultado da operao ser ZF = 0.
SHL:

Retorna o valor da expresso deslocada n bits para a


esquerda. Um bit 0 inserido na posio do bit menos significativo
e o bit mais significativo perdido.
Formato de implementao: SHL destino, n

Programao em Linguagem Assembly

SHR:

Retorna o valor da expresso deslocada n bits para a direita.


Um bit 0 inserido na posio do bit mais significativo e o bit
menos significativo perdido.
Formato de implementao: SHR destino, n

Observao:
Deslocamentos
representam
multiplicaes
por
potncias de 2:
SHL AX, n AX AX 2n
SHR AX, n AX AX
2-n
ROL, ROR:
Retorna o valor da expresso rotacionada n bits para a
esquerda ou direita.
Formato de implementao: ROR destino, n ROL destino, n
RCL, RCR:
Retorna o valor da expresso, acoplado do carry flag
direita ou esquerda, rotacionada n bits para a esquerda ou direita,
respectivamente.
Formato de implementao: RCR destino, n RCL destino, n

Programao em Linguagem Assembly

5.5.4 Instrues que Modificam Flags


STC, CLC, CMC: Modificam os flags de estado.
STC: set carry flag, CLC: clear carry flag, CMC: complement carry
flag.
Mneumni
co
STC
CLC
CMC

Format Operao
o
STC
CF 1
CLC
CF 0
CMC
CF CF

STD, CLD, STI, CLI: Modificam os flags de controle.


STD: set direction flag, CLD: clear direction flag, STI: set interrupt
flag, CLI: clear interrupt flag.
Mneumni
co
STD
CLD
STI
CLI

Format
o
STD
CLD
STI
CLI

Opera
o
DF 1
DF 0
IF 1
IF 0

Modificando Flags sem Instrues Especficas:


Modificao de flags atravs da pilha e de um registrador:
Coloque todo o registrador de flags na pilha, atravs do
comando PUSHF.
Salve a pilha para um registrador (16 bits), atravs do comando
POP xx, onde xx representa o nome do registrador.
Faa modificaes atravs de instrues que utilizem mscaras:
AND, OR ou XOR.
Retorne o contedo do registrador para pilha, atravs do
comando PUSH xx.
Restaure o registrador de flags, utilizando a instruo POPF.
Modificao de flags atravs da pilha (modo 386 avanado):
Coloque todo o registrador de flags na pilha, atravs do
comando PUSHF.
Faa alteraes nos flags utilizando comandos BTR (bit test
reset), para lev-lo ao estado lgico 0, e BTS (bit test set), para
leva-lo ao estado lgico 1.
Feitas as modificaes, restaure o registrador de flags,
utilizando a instruo POPF.

Programao em Linguagem Assembly

5.5.5 Instrues de Chamada e Retorno de Subrotinas


CALL: Realiza a chamada subrotina, salvando IP na pilha e
redirecionando para a subrotina.
Formato de implementao: CALL rotina
Variaes possveis de operandos: subrotina prxima (NEAR) ou
distante (FAR), registrador (16 bits) ou memria (16 ou 32 bits).
RET: Retorna da subrotina rotina original. Quando um operando
imediato for utilizado, este valor adicionado ao contedo do SP e
permite o descarte de empilhamentos feitos no programa principal,
antes da chamada subrotina.
Formato de implementao: RET

Programao em Linguagem Assembly

5.5.6 Instrues para Manipulao de Pilha


PUSH: Coloca, na rea de memria usada como pilha, o contedo de um
registrador ou posio de memria. Esta rea endereada por SS e SP.
Formato de implementao: PUSH fonte
POP: Retira a palavra armazenada no topo da pilha, colocando-a no
registrador ou posio de memria especificada (16 bits). O registrador
CS no pode ser usado como operando.
Formato de implementao: POP destino
PUSHA: Coloca os valores de todos os registradores, seguindo a ordem
AX, CX, DX, BX, SP, BP, SI e DI.
Formato de implementao: PUSHA
POPA: restaura os valores dos registradores salvos com PUSHA,
seguindo a ordem DI, SI, BP, SP, BX, DX, CX e AX (ordem contrria salva
por PUSHA).
Formato de implementao: POPA
PUSHF: Coloca, na rea de memria usada como pilha, o contedo do
registrador de flags. Esta instruo usada para salvar na pilha os
estados dos flags, alter-los e depois recuper-los.
Formato de implementao: PUSHF
POPF: Retira a palavra no topo da pilha e move-a para o registrador de
flags.
Formato de implementao: POPF
5.5.7 Instruo NOP
NOP: Nenhuma operao executada. Normalmente, usa-se NOP para
preencher um bloco de memria com cdigo nulo, isto , com algo que
no afetar os estados do processador.
Formato de implementao: NOP
5.5.8 Instrues de Entrada e Sada
O endereo da porta de entrada ou sada pode ser especificado por
um byte da prpria instruo, permitindo acesso a 256 portas diferentes,
ou atravs de DX, que permite o acesso a 64K endereos diferentes. Para
executar as instrues de E/S necessrio certificar-se dos endereos de
hardware, consultando uma tabela de endereos de E/S. A vantagem no
uso de DX, alm do acesso a um nmero maior de portas, que,
incrementando-o, pode-se acessar sucessivas portas dentro de um lao de
repetio.

Programao em Linguagem Assembly

IN: Transfere o byte de dados presente no endereo de porta


especificado em DX para Al.
Formato de implementao:
IN AL, DX
OUT: Transfere o byte presente em AL para um endereo de porta
especificado em DX.
Formato de implementao:
OUT DX, AL

Programao em Linguagem Assembly

5.5.9 Instruo de Comparao


CMP: Compara dois valores
Mneumni
co

Formato

Operao

CMP

CMP op1,
op2

op1 op2

A instruo CMP trabalha subtraindo o segundo operando do


primeiro, alterando os flags de estado envolvidos, e sem modificar
qualquer um dos operandos.
A
instruo
CMP

seguida,
normalmente, de instrues de jumps condicionais para testar os
resultados da comparao.
Modo de Operao:
CMP op1, op2

op1 op2 SUB op1, op2

Variaes possveis dos operandos:


op1
Memria
Registrad
or
Registrad
or
Registrad
or
Memria

op2
Registrador
Memria
Registrador
Dado
imediato
Dado
Imediato

Restries ao uso de CMP:


A comparao deve ser feita sempre entre dois nmeros
sinalizados ou entre dois nmeros no sinalizados; nunca
misture-os.
Ambos os operandos devem ter o mesmo comprimento, BYTE ou
WORD.
Lembre-se que comparaes entre duas memrias no podem
ser feitas. Caso isso seja necessrio, deve-se primeiro copiar um
dos operandos para um registrador, e s ento executar a
comparao entre o contedo do registrador e o outro operando.
5.5.10

Instrues de Desvio

Existem dois tipos de instrues de desvio: incondicional e


condicional. No desvio incondicional, o programa automaticamente
desviado para a nova posio de execuo do programa. No desvio
condicional, o desvio s ocorrer se uma dada condio testada nos flags
internos for verdadeira. Se a condio testada no for verdadeira, o

Programao em Linguagem Assembly

programa executar a instruo localizada na posio seguinte da


memria.
Um jump (desvio) uma instruo que diz ao processador para
continuar a execuo do programa em um endereo dado por um label.
Os labels podem conter um endereo que est num mesmo segmento de
cdigo ou em outro segmento de cdigo. Em programas estruturados, o
uso de jumps deve se restringir a um mesmo segmento de cdigo, para
tornar o programa mais legvel e menos susceptvel a erros.
Existem duas situaes importantes em que os jumps devem ser
usados:
para implementar laos ou loops; ou
em caso de ocorrerem condies excepcionais na execuo do
programa.

Programao em Linguagem Assembly

JMP Instruo de Desvio Incondicional:


Um jump incondicional um jump que sempre executado,
independente de uma condio especfica ser verdadeira ou falsa. A
instruo JMP deve ser usada em dois casos:
para pular instrues que no sero executadas; e
para auxiliar a execuo de loops.
Formato de implementao:
JMP destino
Variaes possveis para o operando destino: label curto (prximo
ou
distante),
registrador
(16 bits) ou memria (32 bits).
Instrues de Desvio Condicional:
Um desvio condicional um jump executado somente se uma
condio especfica verdadeira. Existem dois tipos bsicos de jumps:
jumps que testam flags e registradores; e
jumps usados aps comparaes (para nmeros sinalizados e
no sinalizados).
Formato de implementao para jumps que testam
registradores:

flags e

Jxxx label_destino
onde xxx uma abreviao para uma condio particular. Se a condio
verdadeira, o processador continua a execuo a partir da primeira linha
de comando aps o label; caso contrrio, a execuo continua na prxima
instruo da seqncia. Observao: o label destino deve estar a, no
mximo, 128 bytes acima ou abaixo do local do jump.
O processador tem dois conjuntos de jumps condicionais que podem
ser usados aps uma comparao. Os conjuntos so similares; a nica
diferena que um usado com nmeros sinalizados e o outro com
nmeros no sinalizados.
Formato de implementao do conjunto comparao/instruo de jumps
condicionais:
CMP
op1, op2
Jxxx label_destino
...

; instrues da seqncia

label_destino:
Mneumni
co

Formato

Operao

Jumps condicionais utilizados aps comparao (CMP) para nmeros


no sinalizados
JA/JNBE
JA destino Jump para destino se acima (CF=0, ZF=0)
JAE/JNB
JAE destino Jump para destino se acima ou igual

Programao em Linguagem Assembly

JB/JNAE
JBE/JNA
JE
JNE

(CF=0)
JB destino Jump para destino
JBE destino Jump para destino
(CF=1 ou ZF=1)
JE destino Jump para destino
JNE destino Jump para destino

se abaixo (CF=1)
se abaixo ou igual
se igual (ZF=1)
se diferente (ZF=0)

Jumps condicionais utilizados aps comparao (CMP) para nmeros


sinalizados
JG/JNLE
JG destino Jump para destino se maior (ZF=0 e
SF=OF)
JGE/JNL
JGE destino Jump para destino se maior ou igual
(SF=OF)
JL/JNGE
JL destino Jump para destino se menor (SFOF)
JLE/JNG
JLE destino Jump para destino se menor ou igual (ZF=1
ou SFOF)
JE
JE destino Jump para destino se igual (ZF=1)
JNE
JNE destino Jump para destino se diferente (ZF=0)

Programao em Linguagem Assembly

Mneumni
co

Formato

Operao

Jumps condicionais que testam flags e registradores


JZ destino Jump para destino se ZF=1
JNZ destino Jump para destino se ZF=0
JS destino Jump para destino se SF=1
JNS destino Jump para destino se SF=0
JO destino Jump para destino se OF=1
JNO
Jump para destino se OF=0
destino
JC
JC destino Jump para destino se CF=1
JNC
JNC destino Jump para destino se CF=0
JP/JPE
JP destino Jump para destino se paridade par (PF=1)
JNP/JPO
JNP destino Jump para destino se paridade mpar
(PF=0)
JCXZ
JCXZ
Jump para destino se (CX)=0
destino
JZ
JNZ
JS
JNS
JO
JNO

Variaes possveis para o operando destino: label curto (prximo


ou distante).
5.5.11

Instrues de Repetio

LOOP: Cria um lao que executado um nmero especfico de vezes,


usando o registrador CX como contador. A primeira instruo a ser
executada para a obteno de um loop o carregamento de CX com o
nmero de execues do loop.
Formato de implementao
CX/instruo de loops:

do

conjunto

inicializao

de

MOV CX, nmero_de_vezes


nome_do_label:
...

; instrues a serem

executadas
LOOP nome_do_label
O valor de CX decrementado a cada passo e o loop ser executado
enquanto o contedo de CX for no nulo.
LOOPE (LOOPZ) e LOOPNE (LOOPNZ):
O princpio de utilizao o mesmo da instruo LOOP. A diferena
principal que a condio para que o lao seja executado inclui no
somente o valor do contedo de CX, mas o resultado de uma comparao,
executada pela instruo imediatamente anterior.
Formato de loops gerados a partir de LOOPE (LOOPZ) e LOOPNE
(LOOPNZ):
MOV

CX, nmero_de_vezes

Programao em Linguagem Assembly

nome_do_label:
...

; instrues a serem

executadas
CMP
LOOPxx

op1, op2
nome_do_label

Programao em Linguagem Assembly

5.6 Programao Estruturada em Assembly


A programao estruturada em assembly pode ser feita a partir da
utilizao de estruturas de controle de fluxo.
5.6.1 Ferramentas Utilizadas em Controle de Fluxo
Para a utilizao de controle de fluxo, as seguintes ferramentas de
software so necessrias:
registrador flags: flags de estado e de controle e as instrues
associadas;
labels (rtulos);
jumps (saltos): instrues de desvios condicionais (Jxxx) e
incondicionais (JMP);
instruo de comparao: CMP; e
instrues de repetio: LOOP, LOOPE (LOOPZ), LOOPNE
(LOOPNZ).
Sintaxe para Definio de Labels:
Para implementar controle de fluxo, geralmente utilizamos labels,
que so marcadores de endereo dentro de um segmento de cdigo.
possvel controlar a execuo de um programa, apenas promovendo
jumps entre labels. As regras para especificao dos nomes dos labels so
as mesmas das variveis.
O assembly reconhece intrinsecamente definies de labels do tipo
NEAR, apenas atravs da seguinte linha de comando, dentro do cdigo do
programa:
nome_do_label:
5.6.2 Estrutura Se-Ento-Seno
A estrutura se-ento-seno testa uma condio. Se esta condio for
satisfeita, a seqncia de instrues referentes ao ento executada;
caso contrario, o corpo do seno executado. O comando seno no
essencial, podendo ser suprimido. A diferena que se nenhuma
condio for satisfeita, nenhuma seqncia de instrues ser executada.
Formato de Implementao:

Programao em Linguagem Assembly

LinguagemdeAltoNvel
Se (cond), ento

Seno
Fim se

LinguagemAssembly
CMP cond
Jcond entao
JMP senao
entao:

JMP fim_se
senao:
fim_se:

CMP cond
JNcond senao
entao:

JMP fim_se
senao:
fim_se:

Programao em Linguagem Assembly

5.6.3 Estrutura Repita-At que


A estrutura repita-at que executa a mesma
instrues at que uma condio se torne verdadeira.

seqncia

de

Formato de Implementao:
LinguagemdeAltoNvel

LinguagemAssembly

Repita

repita:

repita:

At que (cond)

CMP cond
Jcond fim_repita
JMP repita
fim_repita:

CMP cond
JNcondrepita
fim_repita:

5.6.4 Estrutura Repita-Enquanto


A estrutura repita-enquanto semelhante ao repita-at que.
Entretanto, uma seqncia de instrues realizada enquanto uma
condio for satisfeita.
Formato de Implementao:
LinguagemdeAltoNvel

LinguagemAssembly

Repita

repita:

repita:

Enquanto (cond)

CMP cond
JNcond fim_repita
JMP repita
fim_repita:

CMP cond
Jcondrepita
fim_repita:

5.6.5 Estrutura Enquanto-Repita


A estrutura enquanto-repita semelhante estrutura repitaenquanto, diferindo apenas no teste da condio e na quantidade de
vezes que ser executado. A condio testada antes que qualquer
seqncia de instrues seja executada. Isto significa dizer que um
enquanto-repita pode nunca ser executado, enquanto um repita-enquanto
ser executado pelo menos uma vez.
Formato de Implementao:

Programao em Linguagem Assembly

LinguagemdeAltoNvel
Enquanto (cond), repita

Fim enquanto

LinguagemAssembly
enquanto:
CMP cond
Jcond repita
JMP fim_enquanto
repita:

JMP enquanto
fim_enquanto:

enquanto:
CMP cond
JNcond fim_enquanto
repita:

JMP enquanto
fim_enquanto:

Programao em Linguagem Assembly

5.6.6 Estrutura For (Para)


A estrutura para executa a mesma seqncia de instrues um
nmero de vezes predefinido.
Formato de Implementao:
LinguagemdeAltoNvel
para contador de 1 a n, faa
Fim para

LinguagemdeAltoNvel
para contador de n a 1, faa
Fim para

LinguagemAssembly
MOV contador, 1
para:

MOV contador, 1
para:

CMP contador, n
JE fim_para
JMP para
fim_para:

CMP contador, n
JNE para
fim_para:

LinguagemAssembly
MOV CX,n
para:
LOOP para
fim_para:

5.6.7 Estrutura Case


A estrutura de seleo mltipla case testa valores sucessivos de
condies, at que uma delas seja verdadeira. Caso nenhuma condio
seja satisfeita, a seqncia de comandos equivalente ao seno ser
executada. O comando seno no essencial, podendo ser suprimido. A
diferena que se nenhuma condio for satisfeita, nenhuma instruo
ser executada.
Formato de Implementao:

Programao em Linguagem Assembly

LinguagemdeAltoNvel
Case
cond_1:
...
cond_n:
Seno:
Fim case

LinguagemAssembly
case:

CMP (cond_1)
Jcond_1 caso_1
...
CMP (cond_n)
Jcond_n caso_n
JMP senao
caso_1:
JMP fim_case
...
caso_n:
seno:

JMP fim_case

fim_case:

Interrupes e Excees

6 Interrupes e Excees
As interrupes so sinais enviados ao microprocessador, atravs
dos quais tarefas sendo executadas so suspensas temporariamente e
atendida um outra tarefa que necessita de uma ateno imediata. Muitas
interrupes so destinadas a tarefas comuns que praticamente todos os
softwares necessitam, como por exemplo a obteno de digitaes feitas
no teclado ou a abertura de arquivos.
Os tipos de interrupes possveis no processador so:
as interrupes por hardware: a INTR (interrupo mascarvel)
e a NMI (interrupo no mascarvel);
a TRAP, quando ocorre um pedido de execuo de programa em
passo nico (trap flag ativado: TF = 1);
a INTO, quando verificado um erro de transbordamento
(overflow);
a de erro de diviso por zero; e
as interrupes por software do tipo INT n.
A interrupo por hardware iniciada pelos circuitos existentes na
placa do sistema, por uma placa expanso ou atravs de uma porta
conectada a um dispositivo externo. As interrupes por hardware podem
ser iniciadas por eventos to diversos como um pulso do chip do timer do
computador, um sinal vindo de um modem ou o pressionar de um boto
do mouse. A interrupo do teclado um exemplo tpico de interrupo
por hardware. Existe um circuito controlador do teclado na placa de
sistema do computador que monitora o teclado para receber entrada de
dados. O controlador do teclado gera a interrupo 09H todas as vezes
que receber um byte de dados (cdigo correspondente a tecla
pressionada). O BIOS possui uma rotina de tratamento para a interrupo
09H, cuja finalidade ler o byte de dados a partir do controlador de
teclado, processando-o em seguida. Se a interrupo do teclado no
processar o cdigo de tecla recebido no momento da chegada, o cdigo
pode ser perdido quando outra tecla for pressionada.
Por outro lado, as interrupes por software sero iniciadas atravs
de programas do usurio, e no pelo hardware do computador. Um
programa chama as interrupes por software para poder realizar suas
tarefas, como por exemplo apresentar um caracter na tela.
Algumas interrupes executam mais de uma tarefa, e, ao serem
chamadas, deve ser especificado um nmero de funo. Por exemplo, a
funo 00h da interrupo 01h retorna a contagem da hora do dia
existente no BIOS do computador, e a funo 01h da mesma interrupo
ajusta esta contagem. Os nmeros das funes so quase sempre
colocados no registrador AH do processador antes da chamada da
interrupo. Na Linguagem Assembly pode-se chamar a funo 0Ah
(apresentar caractere) da interrupo 10h do BIOS, escrevendo:

Interrupes e Excees

MOV
INT

AH,0Ah
10h

;chama a funo 0Ah

Para organizar ainda mais as interrupes, podem existir nmeros


de sub-funes para especificar tarefas no interior de uma funo. Estes
nmeros so colocados no registrador AL do processador. Podemos dizer
que as interrupes esto organizadas obedecendo seguinte hierarquia:
nmero da interrupo;
funes (ou servios), geralmente especificados em AH; e
sub-funes, geralmente especificados em AL.

Interrupes e Excees

6.1 Vetores e Descritores de Interrupo


As interrupes so numeradas e relacionadas em uma tabela,
onde, a cada interrupo est associado um nico endereo segmentado
de 4 bytes, chamado de vetor de interrupo, que aponta para uma rotina
de tratamento da interrupo (Figura 39). O programa principal, ao se
deparar com uma interrupo, suspende temporariamente a sua
execuo, para processar a rotina de tratamento da interrupo em foco
e, logo aps, retornar o processamento para o programa de origem da
interrupo.
Dessa forma, quando chega um pedido de interrupo a seguinte
seqncia de operaes executada:
a instruo que est sendo executada terminada;
os registradores de flags (F), segmento de cdigo (CS) e de
offset (endereo) da prxima instruo (IP) so colocados na
pilha;
outros registradores alterados pela rotina manipuladora de
interrupo so colocados na pilha (operao realizada pela
rotina manipuladora, quando necessrio);
o endereo da rotina de manipulao determinado; e
a rotina de manipulao executada.
As informaes de CS:IP e o registrador de flags so
automaticamente inseridos na pilha ao ocorrer uma interrupo. Os
outros registradores so salvos pela rotina da interrupo, que
comumente chamada de rotina manipuladora da interrupo (interrupt
handler) ou de rotina de servio da interrupo (interrupt service routine
ISR). Somente sero salvos os registradores que forem alterados pelas
rotinas manipuladoras de interrupo. Quando uma rotina manipuladora
de interrupo terminar o seu servio, a mesma restaurar os
registradores que tiver alterado, executando no final da rotina a instruo
IRET (interrupt return) que possui a funo de retirar o registrador de
flags e o CS:IP da pilha, retornando-os aos seus lugares no processador.
Com o CS:IP restaurado, o programa principal volta a funcionar.

Interrupes e Excees

Memria
Principal
00000
n4

...
IP
IP
CS
CS
...

CS:IP

003FFh
...
CS:IP
Rotina de
Serviode
Interrupo

Figura 39

Endereamento da Rotina de Servio de Interrupo

Interrupes e Excees

Uma tabela de ponteiros usada para ligar o nmero-tipo de uma


interrupo com as localidades na memria das suas rotinas de servio.
Em um sistema baseado no modo real, esta tabela chamada de tabela
de vetores de interrupo. Em sistemas no modo protegido, esta tabela
chamada de tabela de descritores de interrupo.
No modo real, a tabela de vetores est localizada no limite inferior
dos endereos de memria. Ela comea no endereo 00000 16 e termina no
endereo 003FF16. Isto representa o primeiro kbyte de memria. Na
realidade, a tabela de vetores de interrupo pode estar localizada em
qualquer lugar na memria. Sua localizao inicial e tamanho so
definidos pelo contedo do registrador da tabela de descritores de
interrupo, o IDTR. Quando o processador inicializado ele entra no
modo real com os bits do endereo de base no IDTR todos iguais a zero e
o limite fixado em 03FF16. Na tabela de vetores de interrupo, cada um
dos 256 vetores requer duas palavras. A palavra de endereo mais alto
representa o endereo de base de segmento e identifica na memria, o
inicio do segmento de programa no qual a rotina de servio reside. Este
valor ser armazenado no registrador de segmento de cdigo CS no
momento do atendimento de uma interrupo. A palavra de endereo
mais baixo do vetor representa o deslocamento da primeira instruo da
rotina de servio a partir do incio do seu segmento de cdigo e, ser
armazenado no registrador apontador de instruo IP.
Tabela 5
Endereo
fsico
0000h
0003h
0004h
0007h
0008h
000Bh
000Ch
000Fh
0010h
0013h
0014h
0017h
0018h
001Bh
001Ch
001Fh
0020h
0023h
0024h
0027h
0028h
002Bh
002Ch
002Fh
0030h
0033h

Vetores de interrupo

Ponteiro de interrupo presente


INT 0 erro de interrupo
INT 01h

passo nico

INT 02h

NMI

INT 03h

breakpoint

INT 04h

overflow

INT 05h

print screen (imprime tela)

INT 06h

reservada

INT 07h

reservada

INT 08h

IRQ0

INT 09h

IRQ1

INT 0Ah IRQ2


INT 0Bh IRQ3
INT 0Ch IRQ4

Interrupes e Excees

0034h
0037h
0038h
003Bh
003Ch
003Fh
0040h
0043h
...
0084h
0087h
...
01BCh
01BFh
01C0h
01C3h
01C4h
01C7h
01C8h
01CBh
01CCh
01CFh
01D0h
01D3h
01D4h
01D7h
01D8h
01DBh
01DCh
01DFh
01E0h
01E3h
...
00FCh
03FFh

INT 0Dh IRQ5


INT 0Eh IRQ6
INT 0Fh IRQ7
INT 10h funes da BIOS (interrupes
por software)
INT 21h funes do DOS (interrupes
por software)
INT 6Fh disponvel ao usurio
(interrupes por software)
INT 70h IRQ8
INT 71h

IRQ9

INT 72h

IRQ10

INT 73h

IRQ11

INT 74h

IRQ12

INT 75h

IRQ13

INT 76h

IRQ14

INT 77h

IRQ15

INT 78h disponvel ao usurio


(interrupes por software)
INT FFh disponvel ao usurio (interrupes
por software)

Interrupes e Excees

A tabela de descritores do modo protegido pode residir em qualquer


localizao do endereo fsico do processador . A localizao e o tamanho
desta tabela so novamente definidos pelo contedo do IDTR. O endereo
de base no IDTR identifica o ponto inicial da tabela na memria e o limite
determina o nmero de bytes da tabela. A tabela de descritores de
interrupo contm descritores de porta (gates), no vetores. So
possveis 256 descritores de interrupo identificados do gate 0 ao gate
255. Cada descritor de gate pode ser do tipo: gate de trap, gate de
interrupo, ou gate de tarefa. Os dois primeiros tipos permitem que o
controle seja transferido para uma rotina de servio que est localizada
dentro da tarefa atual. Por outro lado, o gate de tarefa permite que o
controle de programa seja passado para uma outra tarefa. Como nos
vetores de modo real, um gate no modo protegido age como um ponteiro
que usado para redirecionar a execuo do programa para o ponto
inicial da rotina de servio. Entretanto, um descritor de porta ocupa 8
bytes de memria. Se todas as 256 portas no forem necessrias a uma
aplicao o limite pode ser fixado em um valor menor que 07FF16.
A Tabela 5 que contm os vetores de interrupo, aloca os vetores
de 0 a 256. Cada vetor composto de uma quantidade de 4 bytes e indica
uma posio de memria (CS:IP), onde se inicia a rotina de tratamento.

6.2 Interrupo por Software: Comandos INT e IRET


As interrupes do software fazem parte dos programas que
compem o ROM BIOS e o sistema operacional. Os servios do BIOS e do
DOS podem ser chamados pelos programas atravs de uma srie de
interrupes, cujos vetores so colocados na tabela de vetores de
interrupes. As funes do DOS possibilitam um controle mais
sofisticado sobre as operaes de I/O do que seria possvel com as rotinas
do BIOS, em especial quando se tratar de operaes de arquivos em
discos. Convm relembrar que os nmeros mais baixos da tabela de
vetores so reservados para as excees.
A utilizao de uma interrupo dentro de um programa no
oferece grandes dificuldades, desde que sejam fornecidos todos os dados
de entrada nos respectivos registradores; aps o processamento da
interrupo, obtm-se os resultados desejados atravs dos registradores
de sada ou atravs da execuo de uma tarefa desejada.
Por outro lado, pode-se desejar a criao de uma rotina de servio
de interrupo para tratar uma necessidade especfica do programa.
Muitos motivos justificam a criao de uma rotina de servio de
interrupo. Determinados vetores de interrupes so planejados para
que sejam redirecionados para rotinas de nossa criao. Pode tambm ser
interessante criar uma interrupo para substituir uma rotina
manipuladora j existente, ou podemos at mesmo acrescentar novos
recursos a um manipulador.

Interrupes e Excees

Uma rotina manipuladora de interrupes uma subrotina comum


que realiza sua tarefa e encerra a operao com a instruo IRET, alm
de salvar os registradores alterados por ela, que no sejam aqueles que
foram salvos automaticamente. Uma vez criada uma rotina, seu endereo
deve ser colocado no local apropriado de vetor; se no local escolhido
houver um valor diferente de zero, o valor encontrado deve ser salvo,
para possibilitar a sua restaurao aps o trmino do programa.

Interrupes e Excees

INT: Altera o fluxo normal de execuo do programa, desviando-se para


uma rotina de interrupo, cujo vetor (endereo formado por CS:IP) est
presente
numa
tabela
nos
primeiros
1 kbyte da memria. A tabela de vetores de interrupo tem 256
entradas, cada qual com 4bytes (os dois primeiros contendo o valor de IP
e os dois seguintes, o valor de CS) que indicam o endereo de uma rotina
na memria.
Formato de implementao: INT tipo
Uma interrupo de software implementada atravs da instruo
INT n (n variando de 0 a 255, em decimal; ou de 0 a FF, em hexadecimal).
Atravs deste mecanismo possvel ao usurio fazer chamadas de
funes tpicas do sistema operacional (DOS) ou do sistema de
entrada/sada (BIOS).
Sempre que um pedido de interrupo vlido ocorre (por hardware
ou por software), o processador aponta para um vetor presente no espao
de memria que vai de 0000h a 03FFh (primeiro 1 kbyte da memria
principal).
As interrupes e excees do sistema genrico so servidas com
um sistema de prioridade conseguida de duas maneiras:
a seqncia de processamento da interrupo implementada no
processador testa a ocorrncia dos vrios grupos baseados na
hierarquia de apresentao (reset sendo a de maior prioridade e
as interrupes de hardware sendo as de menor prioridade);
s vrias interrupes dentro de um grupo, so dados diferentes
nveis de prioridade, de acordo com seu nmero-tipo onde, a
interrupo de nmero-tipo 0 (zero) identifica a de maior
prioridade, e a de nmero-tipo 255 a de menor prioridade.
A importncia dos nveis de prioridade reside no fato de que, se
uma rotina de servio de interrupo foi iniciada, somente um dispositivo
com nvel de prioridade mais alto ter poder de interromper sua
execuo. Para as interrupes de hardware, as decises de prioridade
so complementadas atravs do circuito responsvel pelas requisies.
Ao teclado deve ser tambm associada uma interrupo de alta
prioridade. Isto ir assegurar que seu buffer de entrada no ficar cheio,
bloqueando entradas adicionais. Por outro lado, dispositivos como
unidades de disquete e HD so tipicamente associados com nveis de
prioridade mais baixos.
IRET: Retorna de uma rotina de tratamento de interrupo, recuperando,
da pilha, o contedo dos registradores que foram automaticamente salvos
na ocorrncia da interrupo. Ao final de uma rotina de tratamento de
interrupes, deve ser inserida a instruo IRET.
Formato de implementao: IRET

Interrupes e Excees

INT
Programa
Rotina deServiode
Interrupo(ISR)
IRET
Figura 40

Interrupo por Software (INT e IRET)

Interrupes e Excees

6.3 Interrupo
por
Interrupes 8259

Hardware:

Controlador

de

Nos sistemas 8086 e 8088, os nmeros das interrupes entre 08h


e 0Fh so utilizadas para as interrupes do hardware; nos sistemas
80286 e superiores, os nmeros das interrupes entre 08h e 0Fh (8 e 15
em decimal) e tambm 70h (112 em decimal) e 77h (119 em decimal)
esto reservados para as interrupes de hardware.
Os chips INTEL 8259, que atuam como controladores
programveis de interrupes (programable interrupt controller PIC),
so utilizados em todos os equipamentos da linha IBM PC na gerncia das
interrupes por hardware. Um chip possui 8 canais de interrupes. Os
equipamentos da linha PC/XT suportam apenas um chip 8259, isto ,
apenas 8 canais de interrupes, enquanto que os demais equipamentos
utilizam 2 chips em cascata, ou o equivalente a 2 combinados num nico
chip. No caso mais simples, cada canal estar conectado a um nico
dispositivo. Quando um canal for ativado, ser emitida uma solicitao de
interrupo (interrupt request IRQ). Estas solicitaes so numeradas
de IRQ0 at IRQ15.
Durante a execuo de uma interrupo, podem chegar novas
solicitaes de para outras interrupes. Um chip controlador de
interrupes mantm um controle sobre as solicitaes de interrupes, e
decide qual ser executada em seguida, com base num esquema de
prioridade. Os canais de numerao mais baixa tero as prioridades mais
altas. Assim, a IRQ0 ter precedncia sobre a IRQ1. No caso de 2 chips
em cascata (Figura 41), um atuar como mestre e o outro como escravo,
sendo que os 8 canais do chip escravo operaro atravs do canal 2 do
chip mestre, portanto os 8 canais do escravo tero maiores prioridades
aps o IRQ0 e IRQ1. Veja a Tabela 6 que indica as interrupes listadas
de acordo com a prioridade decrescente.
Tabela 6
Chip
Mestre

Escravo

Mestre

IRQ
IRQ0
IRQ1
IRQ2
IRQ8
IRQ9
IRQ10
IRQ11
IRQ12
IRQ13
IRQ14
IRQ15
IRQ3

Tabela de IRQs e prioridades


Funo
Atualizao da hora do dia no BIOS
(timer do sistema)
Teclado
Conexo com o PIC escravo
Relgio de tempo real
Conexo com o PIC mestre (IRQ2
redirecionada)
Uso geral (reservada)
Uso geral (reservada)
Mouse do PS/2
Coprocessador matemtico
Controlador do disco rgido
Uso geral (reservada)
COM2 (porta serial)

Interrupes e Excees

IRQ4
IRQ5
IRQ6
IRQ7

COM1 (porta serial)


LPT2 (porta paralela)
Controlador de discos flexveis
LPT1 (porta paralela)

Um chip 8259 possui basicamente 3 registradores de 1 byte cada,


que controlam e monitoram as 8 linhas de interrupes por hardware. O
registrador de solicitao de interrupo (interrupt request register
IRR), que passa um de seus bits para 1 para sinalizar que est ocorrendo
uma solicitao de interrupo de hardware; em seguida o chip ir
consultar o registrador em servio (in service register ISR) para
verificar se uma outra interrupo se encontra em execuo. Circuitos
adicionais garantem que o critrio de prioridades seja obedecido.
Finalmente, antes de chamar a interrupo, o registrador de mscara da
interrupo (interrupt mask register IMR) ser verificado para ver se
uma interrupo deste nvel permitida nesse momento.
PIC Mestre
INT
INTA

INT
INTA

IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7

IRQ0
IRQ1
IRQ2
IRQ3
IRQ4
IRQ5
IRQ6
IRQ7

CAS0 CAS1 CAS2

CAS0 CAS1 CAS2

INT
INTA

IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7

IRQ8
IRQ10
IRQ11
IRQ12
IRQ13
IRQ14
IRQ15

PIC Escravo
Figura 41

Cascateamento de PICs 8259

Normalmente, os programadores acessam apenas os registradores


de mscara de interrupo, que podem ser lidos e gravados. O
registrador IMR para o PIC mestre ser acessado atravs do endereo de
porta 21h, e atravs do endereo de porta 1Ah para o PIC escravo. Os
registradores do PIC so acessados atravs das instrues IN e OUT na
Linguagem Assembly.
Existe um outro registrador que deve ser acessado pelos
programadores que estejam criando rotinas manipuladoras de
interrupes por hardware. Trata-se do registrador de interrupo de
comandos, que utilizado para informar ao PIC que uma interrupo por

Interrupes e Excees

hardware terminou sua tarefa e est chegando ao final. Esse registrador


acessado atravs das portas 20h para o PIC mestre e A0h no caso do
PIC escravo.

6.4 Habilitao,
Interrupes

Desativao

ou

Mascaramento

de

Um flag de habilitao de interrupo est disponvel no


processador identificado por IF. A possibilidade de iniciar uma
interrupo de hardware na entrada INTR habilitada com IF=1 ou
mascarada com IF=0. Quando IF=1, o processador cumprir qualquer
solicitao de interrupo que o registrador de mscara de interrupes
permitir; quando IF=0, nenhuma interrupo por hardware poder
ocorrer. Por software, isto pode ser feito atravs da instruo STI (set IF)
ou CLI (clear IF), respectivamente. IF afeta somente a interface de
interrupo de hardware no tendo qualquer influncia sobre os outros
grupos de interrupes. A instruo CLI sempre dever ser seguida por
uma instruo STI, sob risco de travar o equipamento.
Durante a seqncia de inicializao de uma rotina de servio para
uma interrupo de hardware, o processador automaticamente coloca
nvel lgico 0 em IF (IF 0). Isto mascara a ocorrncia de qualquer
interrupo de hardware adicional. Em algumas aplicaes pode ser
necessrio permitir que outras interrupes de hardware com prioridade
mais alta interrompam a rotina de servio ativa. Se este o caso, o bit IF
pode ser colocado em nvel lgico 1 (IF 1) com uma instruo STI
localizada no incio da rotina de servio.
Os programas podem desativar uma ou todas as interrupes por
hardware. Essa ao normalmente necessria apenas quando for
redigido um cdigo de baixo nvel que acesse o hardware diretamente.
Por exemplo, ser for criada uma rotina que insira dados no buffer do
teclado, a interrupo do teclado deve ser desativada durante a execuo
da rotina para que no exista o risco do teclado interferir no processo. As
interrupes por hardware so tambm mascaradas de modo a impedir
os atrasos durante a execuo de operaes sensveis ao relgio. Uma
rotina de I/O precisamente sincronizada no poderia permitir ser
prejudicada por uma operao demorada no disco. Em ltima instncia, a
execuo de todas as interrupes depende do ajuste existente no bit IF
do registrador de flags.
Para mascarar interrupes de hardware em particular, basta
enviar o padro apropriado de bits para o IMR. Este registrador de 8 bits
est localizado no endereo de porta 21h do PIC mestre, e em 1Ah para o
PIC escravo. Para isso, necessrio definir os bits que correspondem aos
nmeros das interrupes que se pretendem mascarar.

Interrupes e Excees

6.5 Interrupes Internas e Excees


Interrupes internas e excees diferem das interrupes de
hardware externo porque elas ocorrem devido ao resultado da execuo
de uma instruo, no de um evento que ocorre no hardware externo.
Uma interrupo interna ou exceo iniciada porque uma condio
interna de erro foi detectada antes, durante ou depois da execuo de
uma instruo. Neste caso, uma rotina deve ser iniciada para atender a
condio interna antes de prosseguir na execuo da mesma ou da
prxima instruo do programa. As localizaes de maior prioridade
foram reservadas para tratamento deste tipo de interrupo ou exceo.
As interrupes internas e excees so categorizadas como sendo
de falha, trap ou aborto. No caso de uma falha, os valores de CS e IP
salvos na pilha apontam para a instruo que resultou na interrupo.
Desta forma, depois de servir exceo, pode ser re-executada. No caso
de um trap, os valores de CS e IP que foram levados para a pilha apontam
para a instruo seguinte que causou a interrupo. Desta forma,
depois da concluso da rotina de servio, a execuo do programa
prossegue normalmente. No caso de um aborto, nenhuma informao
reservada e, o sistema pode precisar ser reinicializado. Algumas
interrupes internas e excees no sistema genrico so:
exceo por erro de diviso;
exceo de depurao;
interrupo de breakpoint;
exceo de estouro de capacidade (overflow);
exceo de limite (bound) excedido;
exceo de cdigo de operao invlido;
exceo de falta de pilha (stack);
exceo de overrun de segmento;
exceo de erro do coprocessador; e
exceo de coprocessador no disponvel.

Anexo A Tabela ASCII

Anexo A Tabela ASCII


RS
US
Smbo
lo
NULL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
HT
LF
VT
FF
CR
SO
SI
DLE
XON
DC2
XOFF
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS

Tecla
Ctrl @
Ctrl A
Ctrl B
Ctrl C
Ctrl D
Ctrl E
Ctrl F
Ctrl G
Ctrl H
Ctrl I
Ctrl J
Ctrl K
Ctrl L
Ctrl M
Ctrl N
Ctrl O
Ctrl P
Ctrl Q
Ctrl R
Ctrl S
Ctrl T
Ctrl U
Ctrl V
Ctrl W
Ctrl X
Ctrl Y
Ctrl Z
Ctrl [
Ctrl \
Ctrl ]

Decim Hexa
al
0
00
1
01
2
02
3
03
4
04
5
05
6
06
7
07
8
08
9
09
10
0A
11
0B
12
0C
13
0D
14
0E
15
0F
16
10
17
11
18
12
19
13
20
14
21
15
22
16
23
17
24
18
25
19
26
1A
27
1B
28
1C
29
1D

Anna Catharina/CEFET-RN/2000

Ctrl ^
Ctrl _

30
31

1E
1F

Smbo Tecla Decim Hexa


lo
al
SP
32
20
Space
Bar
!
33
21
!

34
22

#
35
23
#
$
36
24
$
%
37
25
%
&
38
26
&

39
27

(
40
28
(
)
41
29
)
*
42
2A
*
+
43
2B
+
,
44
2C
,
45
2D
.
46
2E
.
/
47
2F
/
0
48
30
0
1
49
31
1
2
50
32
2
3
51
33
3
4
52
34
4
5
53
35
5
6
54
36
6
7
55
37
7
8
56
38
8
9
57
39
9
:
58
3A
:

;
<
=
>
?

;
<
=
>
?

Smbo
lo
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X

Tecla
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X

59
60
61
62
63

3B
3C
3D
3E
3F

Decim Hexa
al
64
40
65
41
66
42
67
43
68
44
69
45
70
46
71
47
72
48
73
49
74
4A
75
4B
76
4C
77
4D
78
4E
79
4F
80
50
81
51
82
52
83
53
84
54
85
55
86
56
87
57
88
58

Y
Z
[
\
]
^
_

Y
Z
[
\
]
^
_

Smbo
lo
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v

Tecla
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v

89
90
91
92
93
94
95

59
5A
5B
5C
5D
5E
5F

Decim Hexa
al
96
60
97
61
98
62
99
63
100
64
101
65
102
66
103
67
104
68
105
69
106
6A
107
6B
108
6C
109
6D
110
6E
111
6F
112
70
113
71
114
72
115
73
116
74
117
75
118
76

1
2
4

Anexo A Tabela ASCII


w
x
y
z
{
|
}
~

w
x
y
z
{
|
}
~
Ctrl <-

119
120
121
122
123
124
125
126
127

77
78
79
7A
7B
7C
7D
7E
7F

Anna Catharina/CEFET-RN/2000

1
2
5

Anexo A Tabela ASCII

Smbo
lo

Tecla
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt

128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158

Decim Hexa
al
128
80
129
81
130
82
131
83
132
84
133
85
134
86
135
87
136
88
137
89
138
8A
139
8B
140
8C
141
8D
142
8E
143
8F
144
90
145
91
146
92
147
93
148
94
149
95
150
96
151
97
152
98
153
99
154
9A
155
9B
156
9C
157
9D
158
9E

Anna Catharina/CEFET-RN/2000

Alt 159

Smbo
lo

Tecla
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt

160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188

159

9F

Decim Hexa
al
160
A0
161
A1
162
A2
163
A3
164
A4
165
A5
166
A6
167
A7
168
A8
169
A9
170
AA
171
AB
172
AC
173
AD
174
AE
175
AF
176
B0
177
B1
178
B2
179
B3
180
B4
181
B5
182
B6
183
B7
184
B8
185
B9
186
BA
187
BB
188
BC

Alt 189
Alt 190
Alt 191

Smbo
lo

Tecla
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt

192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218

189
190
191

BD
BE
BF

Decim Hexa
al
192
C0
193
C1
194
C2
195
C3
196
C4
197
C5
198
C6
199
C7
200
C8
201
C9
202
CA
203
CB
204
CC
205
CD
206
CE
207
CF
208
D0
209
D1
210
D2
211
D3
212
D4
213
D5
214
D6
215
D7
216
D8
217
D9
218
DA

Smbo
lo

Alt
Alt
Alt
Alt
Alt

219
220
221
223
223

Tecla
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt

224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248

219
220
221
222
223

DB
DC
DD
DE
DF

Decim Hexa
al
224
E0
225
E1
226
E2
227
E3
228
E4
229
E5
230
E6
231
E7
232
E8
233
E9
234
EA
235
EB
236
EC
237
ED
238
EE
239
EF
240
F0
241
F1
242
F2
243
F3
244
F4
245
F5
246
F6
247
F7
248
F8

1
2
6

Anexo A Tabela ASCII

Alt
Alt
Alt
Alt
Alt
Alt
Alt

249
250
251
252
253
254
255

249
250
251
252
253
254
255

F9
FA
FB
FC
FD
FE
FF

Anna Catharina/CEFET-RN/2000

1
2
7

Anexo B Cdigo Estendido do Teclado

Anexo B Cdigo Estendido do Teclado


Tecla

Decim Hexa
al
30
1E
Alt + A
48
30
Alt + B
46
2E
Alt + C
32
20
Alt + D
18
12
Alt + E
33
21
Alt + F
34
22
Alt + G
35
23
Alt + H
23
17
Alt + I
36
24
Alt + J
37
25
Alt + K
38
26
Alt + L
50
32
Alt + M
49
31
Alt + N
24
18
Alt + O
25
19
Alt + P
16
10
Alt + Q
19
13
Alt + R
31
1F
Alt + S
20
14
Alt + T
22
16
Alt + U
47
2F
Alt + V
17
11
Alt + W
45
2D
Alt + X
21
15
Alt + Y
44
2C
Alt + Z
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt
Alt

+
+
+
+
+
+
+
+
+
+

0
1
2
3
4
5
6
7
8
9

129
120
121
121
123
124
125
126
127
128

81
78
79
7A
7B
7C
7D
7E
7F
80

Anna Catharina/CEFET-RN/2000

Tecla
F1
F2
F3
F4
F5
F6
F7
F8
F9
F10
F11
F12

Decim Hexa
al
59
3B
60
3C
61
3D
62
3E
63
3F
64
40
65
41
66
42
67
43
68
44
133
85
134
86

Alt + F1
Alt + F2
Alt + F3
Alt + F4
Alt + F5
Alt + F6
Alt + F7
Alt + F8
Alt + F9
Alt + F10
Alt + F11
Alt + F12

104
105
106
107
108
109
110
111
112
113
139
140

68
69
6A
6B
6C
6D
6E
6F
70
71
8B
8C

Ctrl + F1
Ctrl + F2
Ctrl + F3
Ctrl + F4
Ctrl + F5
Ctrl + F6
Ctrl + F7
Ctrl + F8
Ctrl + F9
Ctrl +
F10
Ctrl +
F11
Ctrl +
F12

94
95
96
97
98
99
100
101
102
103

5E
5F
60
61
62
63
64
65
66
67

137

89

138

8A

Shift +
F1
Shift +
F2
Shift +
F3
Shift +

84

54

85

55

86

56

87

57
1
2
8

1
2
8

Anexo B Cdigo Estendido do Teclado

Anna Catharina/CEFET-RN/2000

1
2
9

1
2
9

Anexo B Cdigo Estendido do Teclado

Anna Catharina/CEFET-RN/2000

1
3
0

1
3
0

Anexo B Cdigo Estendido do Teclado

Anna Catharina/CEFET-RN/2000

1
3
1

1
3
1

Anexo B Cdigo Estendido do Teclado

Anna Catharina/CEFET-RN/2000

1
3
2

1
3
2

Anexo B Cdigo Estendido do Teclado

Anna Catharina/CEFET-RN/2000

1
3
3

1
3
3

Anexo B Cdigo Estendido do Teclado

Anna Catharina/CEFET-RN/2000

1
3
4

1
3
4

Anexo B Cdigo Estendido do Teclado

Anna Catharina/CEFET-RN/2000

1
3
5

1
3
5

Anexo B Cdigo Estendido do Teclado

Anna Catharina/CEFET-RN/2000

1
3
6

1
3
6

Anexo B Cdigo Estendido do Teclado

Anna Catharina/CEFET-RN/2000

1
3
7

1
3
7

Anexo B Cdigo Estendido do Teclado

F4
Shift +
F5
Shift +
F6
Shift +
F7
Shift +
F8
Shift +
F9
Shift +
F10
Shift +
F11
Shift +
F12

88

58

89

59

90

5A

91

5B

92

5C

93

5D

135

87

136

88

Tecla

Decim Hexa
al
130
82
Alt + 131
83
Alt + =
83
53
Del
79
4F
End
71
47
Home
82
52
Ins
81
51
PgDn
73
49
PgUp
72
48

75
4B

77
4D

80
50

115
73
Crtl +
116
74
Crtl +
117
75
Crtl +
End
119
77
Crtl +
Home
118
76
Crtl +
PgDn
132
84
Crtl +
PgUp
114
72
Ctrl +
PrtSc
15
0F
Shift+Tab

Anna Catharina/CEFET-RN/2000

1
3
8

1
3
8

Anexo B Cdigo Estendido do Teclado

Anna Catharina/CEFET-RN/2000

1
3
9

1
3
9

Anexo C Interrupes BIOS e DOS

Anexo C Interrupes BIOS e DOS


12h 640480
13h 320200

Interrupes do BIOS
INT 10h Funes de Vdeo
Funo 00h Seleciona Modo de Tela
Entrada:
AL = Modo
AH = 0
Modos de Tela
Mxim
Mod Resolu
o
Core
o
o
Pgina
s
s
00h
8
16
4025

Tipo

Adaptadores

Texto

01h

4025

16

Texto

02h

8025

4/8

16

Texto

03h

8025

4/8

16

Texto

04h 320200

Grfico

05h 320200

Grfico

06h 640200

Grfico

1/8

Texto

16
16
2
4/16
2

Grfico
Grfico
Grfico
Grfico
Grfico

CGA, EGA,
VGA
CGA, EGA,
VGA
CGA, EGA,
VGA
CGA, EGA,
VGA
CGA, EGA,
VGA
CGA, EGA,
VGA
CGA, EGA,
VGA
MDA, EGA,
VGA
EGA, VGA
EGA, VGA
EGA, VGA
EGA, VGA
VGA

07h

8025

0Dh
0Eh
0Fh
10h
11h

320200
640200
640350
640350
640480

2
2
1

Anna Catharina/CEFET-RN/2000

Caract
ere

Buf
er

916

B800

916

B800

916

B800

916

B800

88

B800

88

B800

88

B800

916

B800

88
814
814
814
816

A000
A000
A000
A000
A000

1
1

16
256

Grfico
Grfico

VGA
VGA

816
88

A000
A000

Funo 01h Seleciona Tipo de Cursor


Entrada:
CH = Linha inicial do cursor
CL = Linha final do cursor
AH = 1
Funo 02h Posiciona cursor
Entrada:
DH, DL = Linha, coluna
BH = Nmero da pgina
AH = 2
Observao:
DH=0 e DL=0 indica o canto superior esquerdo.
Funo 03h Encontra posio do cursor
Entrada:
BH = Nmero da pgina
AH = 3
Sada:
DH, DL = Linha, coluna do cursor
CH, CL = Modo do cursor ajustado atualmente
Funo 05h Seleciona pgina de exibio ativa
Entrada:
AL = 0 7 (modos 0 e 1) ou 0 3 (modos 2 e 3)
AH = 5
Funo 06h Rola pgina ativa para cima
Entrada:
AL = Nmero de linhas em branco na parte inferior (zero
limpa toda a rea)
1
4
0

Anexo C Interrupes BIOS e DOS


CH, CL = Linha, coluna superior esquerda da rea a ser
rolada

DH, DL = Linha, coluna inferior direita da rea a ser rolada


BH = Atributo usado na linha em branco
AH = 6

Funo 07h Rola pgina ativa para baixo


Entrada:
AL = Nmero de linhas em branco na parte inferior (zero
limpa toda a rea)
CH, CL = Linha, coluna superior esquerda da rea a ser
rolada
DH, DL = Linha, coluna inferior direita da rea a ser rolada
BH = Atributo usado na linha em branco
AH = 7

Anna Catharina/CEFET-RN/2000

1
4
1

Anexo C Interrupes BIOS e DOS


Funo 08h L caractere e atributo na posio do cursor
Entrada:
BH = Nmero da pgina
AH = 8
Sada:
AL = Caractere lido (ASCII)
AH = Atributo do caractere (somente texto)
Funo 09h Escreve atributo e caractere na posio do
cursor
Entrada:
BH = Nmero da pgina
BL = Atributo (modo texto) ou Cor (modo grfico)
CX = Nmero de caracteres a serem escritos
AL = Cdigo ASCII do caractere
AH = 9
Funo 0Ah Escreve caractere sem atributo na posio do
cursor
Entrada:
BH = Nmero da pgina
CX = Nmero de caracteres a serem escritos
AL = Cdigo ASCII do caractere
AH = 10d ou 0Ah

Cdigos de Erro de Disco


Valor
00h
01h
02h
03h
04h
05h
07h
09h
0Bh
10h
11h
20h
40h
80h
BBh
FFh

Erro
Nenhum erro
Comando ruim passado ao
controlador
Marca de endereo no
encontrada
Disco protegido
Setor no encontrado
Falha na reinicializao
Parmetros para o disco
errados
DMA ultrapassou fim do
segmento
Flag de trilha ruim no
encontrada
Verificao de setor ruim
encontrada
Dado erro corrigido
Falha no controlador
Falha em operao de busca
Nenhuma resposta do disco
Erro indefinido
Falha no sentido da operao

INT 13h Funes de Disco


Funo 00h Reinicializa disco
Entrada:
AH = 0
DL = 81h (disco rgido) ou 80h (disco flexvel)
Sada:
CF = 0 (sucesso; AH = 0) ou 1 (erro; AH = cdigo de erro)
Funo 01h L status da operao anterior no disco
Entrada:
AH = 1
Sada:
AL = Cdigo de erro
Anna Catharina/CEFET-RN/2000

Funo 02h L setores de disco


Entrada:
AH = 2
DL = Nmero da unidade de disco (discos rgidos, 80h
87h)
DH = Nmero do cabeote
CH = Nmero do cilindro ou da trilha (discos flexveis)
CL = Bits 7 e 6 (bits mais altos dos 10 bits para o cilindro);
bits 0 a 5 (nmero do setor)
AL = Nmero de setores (discos flexveis, 1 8; discos
rgidos, 1 80h)
ES : BX = Endereo do buffer para leitura/escrita
Sada:
1
4
2

Anexo C Interrupes BIOS e DOS


CF = 0 (sucesso; AL = Nmero de setores lidos) ou 1 (erro;
AH = cdigo de erro)
Funo 03h Escreve em setores de disco
Entrada:
AH = 3
DL = Nmero da unidade de disco (discos rgidos, 80h
87h)
DH = Nmero do cabeote
CH = Nmero do cilindro ou da trilha (discos flexveis)
CL = Bits 7 e 6 (bits mais altos dos 10 bits para o cilindro);
bits 0 a 5 (nmero do setor)
AL = Nmero de setores (discos flexveis, 1 8; discos
rgidos, 1 80h)
ES : BX = Endereo do buffer para leitura/escrita
Sada:
CF = 0 (sucesso; AL = Nmero de setores escritos) ou 1
(erro; AH = cdigo de erro)

Anna Catharina/CEFET-RN/2000

1
4
3

Anexo C Interrupes BIOS e DOS


Funo 04h Verifica setores
Entrada:
AH = 4
DL = Nmero da unidade de disco (discos rgidos, 80h
87h)
DH = Nmero do cabeote
CH = Nmero do cilindro ou da trilha (discos flexveis)
CL = Bits 7 e 6 (bits mais altos dos 10 bits para o cilindro);
bits 0 a 5 (nmero do setor)
AL = Nmero de setores (discos flexveis, 1 8; discos
rgidos, 1 80h)
ES : BX = Endereo do buffer para leitura/escrita
Sada:
CF = 0 (sucesso; AH = 0) ou 1 (erro; AH = cdigo de erro)

Funo 02h Recebe caractere pela porta serial


Entrada:
AH = 2
Sada:
AL = Caractere recebido
AH = 0 (sucesso) ou Cdigo de erro (status da porta serial)

Funo 03h Retorna status da porta serial


Entrada:
AH = 3
Sada:
Status da porta serial em AH e AL
Status da Porta Serial

INT 14h Funes da Porta Serial


Funo 00h Inicializa porta RS232
Entrada:
AH = 0
Bits de AL:
0, 1 = Comprimento da palavra (01 = 7 bits, 11 = 8
bits)
2 = Bits de parada (0 = 1 stop bits, 1= 2 stop bits)
3, 4 = Paridade (00 = nenhuma, 01 = mpar, 11 =
par)
5, 6, 7 = Taxa de transmisso (100 = 1200, 101 =
2400, 111 = 9600)
Funo 01h Envia caractere pela porta serial
Entrada:
AH = 1
AL = Caractere a enviar
DX = Nmero da porta (0 = COM1, 1=COM2)
Sada:
Bit 7 de AH = 1 (erro) ou 0 (bits 0 a 6 contm o status da
porta serial)

Anna Catharina/CEFET-RN/2000

Bit de
AH
Status
ativo
7
Intervalo
6

Bit de
AL
Status
ativo
7
Detecta sinal de linha
recebido
6
Indicador de anel

4
3

Registrador shift
vazio
Registrador holding
vazio
Break detectado
Erro de estrutura

2
1

Erro de paridade
Erro de excesso

2
1

Dados preparados

Conjunto de dados pronto

4
3

Limpar para enviar


Delta detecta Sinal de linha
recebido
Sada do detector de anel
Delta conjunto de dados
pronto
Delta limpar para enviar

INT 16h Funes de Teclado


Funo 00h L tecla (cdigo estendido para teclados de 83
e 84 teclas)
Entrada:
AH = 0
1
4
4

Anexo C Interrupes BIOS e DOS


Sada:
AH = Cdigo de varredura da tecla lida
AL = Cdigo ASCII da tecla lida
Observao:
Aguarda a entrada de um caractere e o retorna em AL. Caso
AL=0, o cdigo estendido ser encontrado em AH. A condio CtrlBreak no detectada.
Funo 01h Verifica se a tecla est pronta para ser lida
Entrada:
AH = 1
Sada:
ZF = 1 (buffer vazio) ou 0 (AH = cdigo de varredura; AL =
cdigo ASCII)

Anna Catharina/CEFET-RN/2000

1
4
5

Anexo C Interrupes BIOS e DOS


Funo 02h Encontra status do teclado (teclas de 2
estados)
Entrada:
AH = 2
Sada:
AL = Byte de status do teclado
Observao:
Os equipamentos que utilizam teclados com 101 teclas
podem utilizar tambm a funo 12h da INT 16h, na qual o byte de
status retornado em AL, e um segundo byte reportado em AH,
informando o status das teclas individuais <ALT> e <CTRL>.
Funo 05h Insere cdigos no bufer do teclado
Entrada:
AH = 5
Caracteres ASCII:
CL = cdigo ASCII de caractere
CH = cdigo de varredura da tecla associada ao
caractere
Teclas de cdigo estendido:
CL = 0
CH = cdigo estendido
Sada:
AL = 0 (sucesso) ou 1 (buffer do teclado cheio)
Observao:
Funo utilizada nos equipamentos que suportam um
teclado estendido de 101 teclas. til quando programas residentes
precisam enviar cdigos de controle ou dados ao software de
aplicao.
Funo 10h Cdigo estendido para teclados de 101 teclas
Entrada:
AH = 10h
Sada:
AL = cdigo ASCII ou 0 (AH = cdigo estendido)
Observao:
Aguarda a entrada de um caractere. Os cdigos estendidos
necessitam de apenas uma chamada interrupo. A condio CtrlBreak no ser detectada.

Funo 11h Verifica o status de entrada para o teclado de


101 teclas
Entrada:
AH = 11h
Sada:
AL = FFh (buffer no vazio) ou 0 (buffer vazio)

INT 17h Funes de Impressora


Funo 00h Imprime caractere
Entrada:
AH = 0
AL = Caractere a ser impresso
DX = Nmero da impressora (0, 1 ou 2)
Sada:
AH = 1 suspende a impresso
Funo 01h Inicializa porta de impressora
Entrada:
AH = 1
DX = Nmero da impressora (0, 1 ou 2)
Sada:
AH = Status da impressora
Status da Impressora
Bit de
AH
Status
ativo
7
Impressora no
ativa
6
Acusa recepo
5
Fim do papel
4
Selecionada
3
Erro de I/O
2
No usado
1
No usado
0
Tempo esgotado
Funo 02h L status de impressora

Anna Catharina/CEFET-RN/2000

1
4
6

Anexo C Interrupes BIOS e DOS


Entrada:
AH = 2
DX = Nmero da impressora (0, 1 ou 2)
Sada:
AH = Status da impressora

Anna Catharina/CEFET-RN/2000

1
4
7

Anexo C Interrupes BIOS e DOS

Interrupes do DOS
INT 21h Funes de Teclado, Vdeo, Disco, Relgio e
Memria
Funo 00h Trmino de programa
Entrada:
AH = 0
Funo 01h Entrada de caractere do teclado com eco
Entrada:
AH = 1
Sada:
AL = Cdigo ASCII da tecla ou 0
Observao:
Aguarda que um caractere seja digitado, caso nenhum seja
encontrado. Gera um eco do caractere na tela, na posio atual do
cursor. AL=0 quando um cdigo estendido for interceptado. A
interrupo deve ser repetida para que seja retornado o segundo
byte do cdigo em AL. Detecta a condio de Ctrl-Break. Ignora a
tecla <Esc>, e interpreta normalmente uma digitao de <Tab>.
<Backspace> faz com que o cursor retroceda um espao, mas o
caractere existente nessa posio no apagado, sendo coberto
pelo caractere recebido a seguir. <Enter> move o cursor para o
incio (CR), sem avano de linha (LF).
Funo 02h Sada de caractere na tela
Entrada:
AH = 2
DL = Cdigo ASCII do caractere
Funo 05h Sada de caractere na impressora
Entrada:
AH = 5
DL = Cdigo ASCII do caractere
Funo 06h I/O na console sem eco
Entrada:
Anna Catharina/CEFET-RN/2000

AH = 6
DL = FFh: ZF = 1 (nenhum caractere digitado) ou AL =
cdigo ASCII do caractere
DL < FFh: cdigo ASCII presente em DL enviado para a
tela
Observao:
Retorna digitaes sem espera (caso nenhuma disponvel).
No verifica Ctrl-C ou Ctrl-Break.
Funo 07h Entrada no filtrada de caractere sem eco
Funo 08h Entrada de caractere sem eco
Entrada:
AH = 7 ou 8, respectivamente
Sada:
AL = Cdigo ASCII da tecla
Observao:
Quando AL = 0, um cdigo estendido ter sido recebido e
ser necessrio repetir a interrupo para que o segundo byte seja
retornado em AL. A funo 08h detecta a condio de
Ctrl-Break. No ecoa na tela.
Funo 09h Escreve string na tela
Entrada:
DS:DX aponta para uma string terminada com o caractere $
AH = 9
Funo 0Ah Entrada de string pelo teclado
Entrada:
DS:DX aponta para o local onde a string ser armazenada
(mximo 254 caracteres)
[DS:DX] = quantidade de bytes alocados para a string
AH = 0Ah
Sada:
DS:DX = string digitada
[DS:(DX+1)] = nmero de caracteres lidos
Observao:
Faz eco da entrada na tela. Primeiro byte da string deve ser
inicializado com o tamanho. Segundo byte da string receber o
nmero de caracteres efetivamente lidos. ltimo caractere da
string = <ENTER>. A string comear a partir do terceiro byte.
Para ler uma string de n caracteres, deve-se alocar (n+3) bytes de
1
4
8

Anexo C Interrupes BIOS e DOS


memria e colocar o valor (n+1) no primeiro byte. Verifica Crtl-C e
Crtl-Break.
Funo 0Bh Verifica o status de entrada do teclado
Entrada: AH = 0Bh
Sada: AL = FFh (buffer no vazio) ou 0 (buffer vazio)
Funo 0Ch Esvazia o bufer de entrada do teclado e
executa uma funo
Entrada: AH = 0Ch
AL = Nmero da funo de teclado
Sada:
Sada padro da funo selecionada
Observao:
Executa qualquer funo de teclado do DOS, limpando
primeiramente o buffer. Verifica Crtl-Break.

Anna Catharina/CEFET-RN/2000

1
4
9

Anexo C Interrupes BIOS e DOS


Funo 0Dh Reinicializa disco
Entrada: AH = 0Dh
Funo 0Eh Seleciona disco
Entrada:
AH = 0Eh
DL = Nmero da unidade de disco (0 = A; 1 = B; ...)
Funo 0Fh Abre arquivo preexistente
Entrada:
DS:DX aponta para um FCB
AH = 0Fh
Sada: AL = 0 (sucesso) ou FFh (falha)
Funo 10h Fecha arquivo
Entrada:
DS:DX aponta para um FCB
AH = 10h
Sada: AL = 0 (sucesso) ou FFh (falha)
Funo 11h Procura primeiro arquivo coincidente
Entrada:
DS:DX aponta para um FCB no aberto
AH = 11h
Sada:
AL = 0 (sucesso; DTA contm FCB para comparao) ou FFh
(falha)
Funo 12h Procura prximo arquivo coincidente
Entrada:
DS:DX aponta para um FCB no aberto
AH = 12h
Sada:
AL = 0 (sucesso; DTA contm FCB para comparao) ou FFh
(falha)
Observao:
A funo 12h deve ser usada aps a funo 11h.
Funo 13h Elimina arquivo
Entrada:
DS:DX aponta para um FCB no aberto
Anna Catharina/CEFET-RN/2000

AH = 13h
Sada:

AL = 0 (sucesso) ou FFh (falha)


Funo 14h Leitura seqencial
Entrada:
DS:DX aponta para um FCB aberto
AH = 14h
Bloco atual e registro ativo em FCB
Sada:
Registro requerido colocado no DTA
Endereo do registro incrementado
AL = 0 (sucesso), 1 (fim de arquivo; nenhum dado no
registro), 2 (segmento do DTA muito pequeno para
registro) ou 3 (fim de arquivo; registro completado
com 0)
Funo 15h Escrita seqencial
Entrada:
DS:DX aponta para um FCB aberto
AH = 15h
Bloco atual e registro ativo em FCB
Sada:
Registro lido no DTA e escrito
Endereo do registro incrementado
AL = 0 (sucesso), 1 (disco cheio), 2 (segmento do DTA muito
pequeno para registro)
Funo 16h Cria arquivo
Entrada:
DS:DX aponta para um FCB no aberto
AH = 16h
Sada:
AL = 0 (sucesso) ou FFh (falha; diretrio cheio)
Funo 17h Renomeia arquivo
Entrada:
DS:DX aponta para um FCB modificado
AH = 17h
Sada:
AL = 0 (sucesso) ou FFh (falha)
1
5
0

Anexo C Interrupes BIOS e DOS


Funo 19h Encontra unidade de disco ativa
Entrada:
AH = 19h
Sada:
AL = unidade de disco ativa (0 = A; 1 = B; ...)
Funo 1Ah Determina a posio do DTA (endereo de
transferncia de disco)
Entrada:
DS:DX aponta para o novo endereo do DTA
AH = 1Ah
Observao:
O DTA padro tem 128 bytes e comea em CS:0080 no PSP.
Funo 1Bh Informao da FAT para a unidade de disco
padro
Entrada:
AH = 1Bh
Sada:
DS:BX aponta para o byte da FAT
DX = nmero de clusters
AL = Nmero de setores/cluster
CX = Tamanho de um setor (512 bytes)
Funo 1Ch Informao da FAT para a unidade de disco
especificada
Entrada:
AH = 1Ch
DL = Nmero da unidade (0 = padro, 1 = A, 2 = B, ...)
Sada:
DS:BX aponta para o byte da FAT
DX = nmero de clusters
AL = Nmero de setores/cluster
CX = Tamanho de um setor (512 bytes)
Funo 21h Leitura direta
Entrada:
DS:BX aponta para um FCB aberto
Campo de registro direto do FCB = DS:(DX+33) e DS:
(DX+35)
Anna Catharina/CEFET-RN/2000

AH = 21h
Sada:

AL = 0 (sucesso), 1 (fim de arquivo; nenhum dado no


registro), 2 (segmento do DTA muito pequeno para
registro) ou 3 (fim de arquivo; registro completado
com 0)

Funo 22h Escrita direta


Entrada:
DS:BX aponta para um FCB aberto
Campo de registro direto do FCB = DS:(DX+33) e DS:
(DX+35)
AH = 22h
Sada:
AL = 0 (sucesso), 1 (disco cheio), 2 (segmento do DTA muito
pequeno para registro)
Funo 23h Tamanho de arquivo
Entrada:
DS:BX aponta para um FCB no aberto
AH = 23h
Sada:
AL = 0 (sucesso) ou FFh (nenhum arquivo encontrado no
FCB correspondente)
Campo de registro direto = comprimento do arquivo em
registro (arredondado para mais)
Funo 24h Determina campo de registro direto
Entrada:
DS:BX aponta para um FCB aberto
AH = 24h
Sada:
Campo de registro direto = registro atual e bloco ativo
Funo 27h L bloco de arquivo direto
Entrada:
DS:BX aponta para um FCB aberto
Campo de registro direto do FCB = DS:(DX+33) e DS:
(DX+35)
AH = 27h
Sada:
1
5
1

Anexo C Interrupes BIOS e DOS


AL = 0 (sucesso), 1 (fim de arquivo; nenhum dado no
registro), 2 (segmento do DTA muito pequeno para
registro) ou 3 (fim de arquivo; registro completado
com 0)
CX = Nmero de registros lidos
Arquivos de registro direto fixados para acesso ao prximo
registro
Observao:
O buffer de dados usado nos servios do FCB o DTA ou a
rea de trasnferncia do disco.
Funo 28h Escreve em bloco de arquivo direto
Entrada:
DS:BX aponta para um FCB aberto
Campo de registro direto do FCB = DS:(DX+33) e DS:
(DX+35)
AH = 27h
Sada:
AL = 0 (sucesso), 1 (disco cheio), 2 (segmento do DTA muito
pequeno para registro)
CX = 0 (fixa o arquivo no tamanho indicado pelo campo de
registro direto)
Arquivos de registro direto fixados para acesso ao prximo
registro
Observao:
O buffer de dados usado nos servios do FCB o DTA.

Anna Catharina/CEFET-RN/2000

1
5
2

Anexo C Interrupes BIOS e DOS


Funo 2Ah Obtm data
Entrada: AH = 2Ah
Sada:
CX = (Ano - 1980)
DH = Ms (1 = janeiro, ...)
DL = Dia do ms
Funo 2Bh Ajusta data
Entrada:
CX = (Ano - 1980)
DH = Ms (1 = janeiro, ...)
DL = Dia do ms
AH = 2Bh
Sada:
AL = 0 (sucesso) ou FFh (falha; data no vlida)
Funo 2Ch Obtm hora
Entrada:
AH = 2Ch
Sada:
CH = Horas (0 23)
CL = Minutos (0 59)
DH = Segundos (0 59)
DL = Centsimos de segundo (0 99)
Funo 2Dh Ajusta hora
Entrada:
AH = 2Dh
CH = Horas (0 23)
CL = Minutos (0 59)
DH = Segundos (0 59)
DL = Centsimos de segundo (0 99)
Sada:
AL = 0 (sucesso) ou FFh (falha; hora invlida)
Funo 2Fh Obtm DTA corrente
Entrada:
AH = 2Fh
Sada:
ES:BX = Endereo do DTA corrente
Observao:
Anna Catharina/CEFET-RN/2000

O buffer de dados usado nos servios do FCB o DTA ou a


rea de transferncia de disco.
Funo 31h Termina processo e permanece residente
Entrada:
AH = 31h
AL = Cdigo de sada binrio
DX = Tamanho da memria requerida em pargrafos
Observao:
O cdigo de sada pode ser lido por um programa principal
com a funo 4Dh.
Funo 36h Obtm espao de disco livre
Entrada:
AH = 36h
DL = Nmero da unidade de disco (0 = padro, 1 = A, 2 =
B, ...)
Sada:
AX = FFFFh (nmero de unidade invlido) ou Nmero de
setores/cluster
BX = Nmero de clusters disponveis
CX = Tamanho de um setor (512 bytes)
DX = Nmero de clusters
Funo 39h Cria um subdiretrio em disco
Entrada:
AH = 39h
DS:DX aponta para string ASCIIZ (terminada com zero) com
o nome do diretrio
Sada:
CF = 0 (sucesso) ou 1 (erro; AH = 3 caminho no
encontrado, 5 acesso negado)
Funo 3Ah Apaga um subdiretrio em disco
Entrada:
AH = 3Ah
DS:DX aponta para uma string ASCIIZ com o nome do
diretrio
Sada:
CF = 0 (sucesso) ou 1 (erro; AH = 3 caminho no
encontrado, 5 acesso negado ou subdiretrio no
vazio)
1
5
3

Anexo C Interrupes BIOS e DOS

Funo 3Bh Muda o diretrio corrente


Entrada:
AH = 3Bh
DS:DX aponta para uma string ASCIIZ com o nome do
diretrio
Sada:
CF = 0 (sucesso) ou 1 (erro; AH = 3 caminho no
encontrado)

Anna Catharina/CEFET-RN/2000

1
5
4

Anexo C Interrupes BIOS e DOS


Funo 3Ch Cria um arquivo no disco ou abre um existente
Entrada:
AH = 3Ch
DS:DX aponta para uma string ASCIIZ com o nome do
diretrio
CX = Atributos de arquivo (bits podem ser combinados)
Sada:
CF = 0 (sucesso; AX = descritor de arquivo) ou 1 (erro; AL =
3 caminho no encontrado, 4 muitos arquivos
abertos, 5 diretrio cheio ou existe arquivo anterior
somente para leitura)
Observao:
Ao tentar criar um arquivo j existente, o contedo anterior
do arquivo perdido.
Atributos de Arquivo
Bit
ativad
Significado
o
0
Somente para
leitura
1
Oculto
2
Sistema
3
Rtulo
de
volume
4
Reservado (0)
5
Arquivo
6 15 Reservados (0)
Funo 3Dh Abre um arquivo
Entrada:
AH = 3Dh
DS:DX aponta para uma string ASCIIZ com o nome do
diretrio
AL define modo de operao = 0 (somente leitura), 1
(somente escrita), 2 (leitura e escrita)
Sada:
CF = 0 (sucesso; AX = handler) ou 1 (erro; AL = cdigo do
erro)
Observao:
Anna Catharina/CEFET-RN/2000

Funo mais adequada para abrir arquivos j existentes. O


contedo anterior no perdido.
Funo 3Eh Fecha um arquivo
Entrada:
AH = 3Eh
BX = Nmero do descritor do arquivo (handler)
Sada:
CF = 0 (sucesso) ou 1 (erro; AL = 6 descritor invlido)

Funo 3Fh L de arquivo ou dispositivo


Entrada:
AH = 3Fh
BX = Nmero do handler associado (descritor de arquivo)
CX = Quantidade de bytes a ler
DS:DX = Endereo do buffer que vai receber o dado
Sada:
CF = 0 (sucesso; AX= no bytes lidos), 1 (erro; AX=5acesso
negado, 6descritor invlido)
Funo 40h Escreve em arquivo ou dispositivo
Entrada:
AH = 40h
BX = Nmero do handler associado (descritor de arquivo)
CX = Quantidade de bytes a escrever
DS:DX = Endereo do buffer de dados
Sada:
CF = 0 (sucesso; AX = nmero de bytes lidos), 1 (erro; AX =
5 ou 6)
Observao:
Disco cheio no considerado erro. Deve-se comparar o
nmero de bytes a serem escritos (CX) com o nmero de bytes
realmente escritos (AX).
Funo 41h Apaga um arquivo em disco
Entrada:
AH = 41h
DS:DX aponta para uma string ASCIIZ com o nome do
diretrio
1
5
5

Anexo C Interrupes BIOS e DOS


Sada:
CF = 0 (sucesso) ou 1 (erro; AX = 2 arquivo no
encontrado, 5 acesso negado)
Observao:
O arquivo a ser apagado no poder estar em uso ou dever
estar fechado. Curingas (* ou ?) no so permitidos no nome do
arquivo.
Funo 42h Move ponteiro de leitura/escrita
Entrada:
AH = 42h
BX = Nmero do handler (descritor) associado ao arquivo
CX:DX = Deslocamento desejado
AL define o cdigo de referncia = 0 (a partir do incio do
arquivo), 1 (a partir da posio atual), 2 (a partir do
fim do arquivo).
Sada:
CF = 0 (sucesso; DX, AX = nova posio do ponteiro) ou 1
(erro; AL = 1 nmero de funo invlido, 6
descritor invlido)
Observao: Altera a posio lgica de escrita e leitura, permitindo
o acesso aleatrio dentro do arquivo.

Anna Catharina/CEFET-RN/2000

1
5
6

Anexo C Interrupes BIOS e DOS


Funo 43h Obtm ou altera os atributos de um arquivo
Entrada:
AH = 43h
DS:DX aponta para uma string ASCIIZ com o nome do
diretrio
AL = 0 (l os atributos e coloca em CX) ou 1 (redefine os
atributos especificados em CX)
CX = Atributos de arquivo (se AL = 1)
Sada:
CF = 0 (sucesso) ou 1 (erro; AL = 2 arquivo no
encontrado, 3 caminho no encontrado, 5 acesso
negado)
CX = Atributos de arquivo (se AL=0)
Funo 45h Duplica um descritor de arquivo
Entrada:
AH = 45h
BX = Descritor a duplicar
Sada:
CF = 0 (sucesso; AX = novo descritor, duplicado) ou 1 (erro;
AL = 4 muitos arquivos abertos, 6 descritor
invlido)
Funo 46h Fora duplicao de um descritor de arquivo
Entrada:
AH = 46h
BX = Descritor de arquivo a duplicar
CX = Segundo descritor de arquivo
Sada:
CF = 0 (sucesso; descritores referem-se ao mesmo fluxo), 1
(erro; AL=6 descritor invlido)
Funo 47h (get current directory):
Entrada:
AH = 47h
DS:SI aponta para a rea de 64 bytes (buffer).
DL = Nmero da unidade (0 = padro, 1 = A, 2 = B, ...)
Sada:
CF = 0 (sucesso; ASCIIZ em DS:SI), 1 (erro; AH = 15
unidade especificada invlida)
Observao:
Anna Catharina/CEFET-RN/2000

Devolve uma string ASCIIZ de, no mximo, 64 caracteres,


contendo o nome do diretrio corrente, desde a raiz. No so
includos a letra que identifica a unidade, os pontos (:) e a barra (\).

Funo 48h Alocao de memria


Funo 49h Desalocao de memria
Funo 4Ah Realocao de memria
Entrada:
AH = 48h, 49h ou 4Ah, respectivamente
BX = Nmero de sees de 16 bytes de memria
(pargrafos) que devem ser alocados, liberados ou
realocados
Sada:
CF = 0 (sucesso; AX:0000 = endereo de bloco de memria)
ou
1 (erro; AL = 7 blocos de controle da memria
destrudos, 8 memria insuficiente com BX =
solicitao mxima permissvel, 9 endereo invlido;)
Observao:
As trs funes utilizam um endereo inicial de 16 bits para
o bloco de memria sobre o qual iro atuar. Esse endereo
representa o segmento onde o bloco comea (o bloco sempre
iniciar com deslocamento 0 no segmento).
Funo 4Bh Carrega ou executa um programa
Entrada:
AH = 4Bh
DS:DX = String ASCIIZ com unidade, nome de caminho e
nome de arquivo
ES:BX = Endereo do bloco de parmetros
AL = 0 (carrega e executa o programa) ou 3 (carrega mas
cria PSP, sem executar)
Bloco de parmetros para AL = 0: Endereo de segmento do
ambiente (word); Endereo do comando a colocar em
PSP+80h (dword); Endereo do FCB padro a colocar
em PSP+5Ch (dword); Endereo do 2 FCB padro a
colocar em PSP+6Ch (dword)
1
5
7

Anexo C Interrupes BIOS e DOS


Bloco de parmetros para AL = 3: Endereo de segmento
para carregar arquivo (word); Fator de reposio para
imagem (word)
Sada:

CF = 0 (sucesso) ou 1 (erro; AL = 1 nmero de funo


invlido, 2 arquivo no encontrado no disco, 5
acesso negado, 8 memria insuficiente para operao
solicitada, 10 ambiente invlido, 11 formato
invlido)

Funo 4Ch Sada


Entrada:
AH = 4Ch
AL = cdigo de retorno binrio
Observao:
Funo utilizada para encerrar programas.

Anna Catharina/CEFET-RN/2000

1
5
8

Anexo C Interrupes BIOS e DOS


Funo 4Dh Obtm cdigo de retorno de subprocessos
Entrada:
AH = 4Dh
Sada:
AL = Cdigo de retorno binrio do subprocesso
AH = 0 (terminou normalmente), 1 (terminou com CtrlBreak), 2 (terminou com erro crtico de dispositivo), 3
(terminou com funo 31h)
Funo 56h Renomeia arquivo
Entrada:
AH = 56h
DS:DX aponta para uma string ASCIIZ contendo o nome
antigo
ES:DI aponta para uma string ASCIIZ contendo o nome novo
Sada:
CF = 0 (sucesso) ou 1 (erro; AL = 3 caminho no
encontrado,
5

acesso
negado,
17 no o mesmo dispositivo)
Observao:
O arquivo a ser renomeado no pode estar em uso ou deve
estar fechado.
Funo 57h Obtm ou determina data e hora de um arquivo
Entrada:
AH = 57h
BX = Descritor de arquivo
AL = 0 (obtm data e hora) ou 1 (fixa hora e data; CH =
hora, DX = data)
Sada:
Na obteno de data e hora, CX = Hora e DX = Data
CF = 0 (sucesso) ou 1 (erro; AL = 1 nmero de funo
invlido, 6 descritor invlido)
Observao:
Hora=2048horas+32minutos+segundos/2
e
Data=512(Ano-1980)+32ms+dia

INT 33h Funes de Mouse


Anna Catharina/CEFET-RN/2000

Funo 0h Inicializa o driver do mouse


Entrada: AX = 0
Sada:
BX = nmero de botes (FFFFh=2, 0000h=+ de 2, 0003h =
mouse Logitech)
AX = FFFFh (mouse instalado) ou 0 (mouse no instalado)
Observao:
Inicializa o driver e posiciona o cursor do mouse, ainda que
oculto, no meio da tela.
Funo 01h Apresenta/ativa o cursor do mouse
Entrada:
AX = 1
Funo 02h Oculta o cursor do mouse
Entrada:
AX = 2
Funo 03h Obtm a posio do cursor
Entrada:
AH = 3
Sada:
CX = coordenada x do cursor (coluna), em mickeys
DX = coordenada y do cursor (linha), em mickeys
BX = boto pressionado (1 = esquerdo, 2 = direito, 3 =
central)
Observao:
Para transformar de mickey para um valor de vdeo 80 25
vlido, necessrio dividir o valor de retorno de CX ou DX por 8.
Funo 04h Define a posio do cursor
Entrada:
AX = 4
CX = coordenada x do cursor (coluna), em mickeys
DX = coordenada y do cursor (linha), em mickeys
Funes 05h e 06h Monitoram os botes do mouse
Entrada:
AX = 5 ou 6, respectivamente
BX = boto a ser monitorado (0 = esquerda, 1 = direita, 2 =
central)
1
5
9

Anexo C Interrupes BIOS e DOS


Sada:
AX = boto pressionado (0 = esquerda, 1 = direita, 2 =
central)
BX = nmero de vezes que o boto foi pressionado desde a
ltima chamada
CX = coordenada x do cursor (coluna) no ltimo clique, em
mickeys
DX = coordenada y do cursor (linha) no ltimo clique, em
mickeys
Funo 07h Confina o cursor horizontalmente
Entrada:
AX = 7
CX = coluna esquerda (inicial)
DX = coluna direita (final)
Funo 08h Confina o cursor verticalmente
Entrada:
AX = 8
CX = linha superior (inicial)
DX = linha inferior (final)
Funo 0Ah Modifica o formato do cursor para modo texto
Entrada:
AX = 0Ah
Software: BX = 0, CX = mscara de tela, DX = mscara de
cursor
Hardware: BX = 1, CX = linha inicial, DX = linha final a ser
preenchida da clula texto
Observao:
No formato por software, a mscara de tela realizar um
AND com o par caractere-atributo da posio atual da tela. O
resultado dessa operao realizar um XOR com a mscara do
cursor.
Funo 0Bh Rastreia os movimentos do mouse
Entrada:
AX = 0Bh
Sada:
Anna Catharina/CEFET-RN/2000

CX = deslocamento horizontal (mickeys) desde a ltima


chamada
DX = deslocamento vertical (mickeys) desde a ltima
chamada chamada
Observao:
Valores positivos de deslocamento indicam sentido de baixo
para cima e da esquerda para a direita. A contagem inicializada
em zero a cada nova chamada.
Funo 10h Define regio obscura para o cursor
Entrada:
AX = 10h
CX, DX = coordenadas (x, y) do canto superior esquerdo
SI, DI = coordenadas (x, y) do canto inferior direito
Observao:
Uma vez que o cursor tenha entrado na rea obscura,
permanecer desativado, requerendo uma reativao atravs da
funo 01h.
Funo 15h Capacidade necessria para salvar o estado do
driver
Entrada:
AX = 15h
Sada
BX = tamanho do buffer necessrio para armazenar o estado
do driver

Funo 16h Salva o estado do driver


Entrada:
AX = 16h
ES:DX aponta para o buffer onde ser armazenado o estado
do driver
Observao:
Antes de utilizar a funo 16h, necessrio executar a
funo 15h.
Funo 17h Restaura o estado do driver
Entrada:
AX = 17h
1
6
0

Anexo C Interrupes BIOS e DOS


ES:DX aponta para o buffer que contm o estado do driver
armazenado
Funo 1Dh Define pgina de vdeo para apresentao do
cursor
Entrada:
AX = 1Dh
BX = nmero da pgina onde ser apresentado o curso

Anna Catharina/CEFET-RN/2000

1
6
1

S-ar putea să vă placă și