Você está na página 1de 88

Centro Federal de Educao Tecnolgica do Rio Grande do Norte

Unidade de Ensino de Natal


Gerncia de Tecnologia da Informao e Educacional de Telemtica















A
A
p
p
o
o
s
s
t
t
i
i
l
l
a
a
d
d
e
e
C
C
u
u
r
r
s
s
o
o

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
Anna Catharina/CEFET-RN/2000
i

Sumrio

1 Introduo a Microprocessadores 1
1.1 Arquitetura de Computadores 1
1.2 Arquitetura Bsica de Microprocessadores 3
1.3 Evoluo dos Microprocessadores 5
2 Anlise de um Microprocessador Genrico 7
2.1 Arquitetura Interna 7
2.1.1 Unidades Funcionais 7
2.1.2 Estrutura Pipelined 8
2.2 Funo dos Pinos 10
2.3 Sistema de Clock e Ciclos de Barramento 12
3 Sistema de Memria de Computadores 14
3.1 Estrutura de Memria 14
3.1.1 Terminologia 14
3.1.2 Armazenamento de Informaes na Memria 17
3.2 Organizao da Memria Principal 19
3.2.1 Organizao Modular da Memria 19
3.2.2 Organizao Lgica 20
3.2.3 Organizao Fsica 21
3.2.4 Acesso Memria 22
3.3 Memria Cache 23
3.3.1 Arquitetura de um Sistema Cache 23
3.3.2 Taxa de Acerto 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
4.4.7 Modo de Endereamento por Base Indexada 39
Sumrio
Anna Catharina/CEFET-RN/2000
ii
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 Programas 44
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 Vetores e Descritores de Interrupo 63
6.2 Interrupo por Software: Comandos INT e IRET 65
6.3 Interrupo por Hardware: Controlador de Interrupes 8259 67
6.4 Habilitao, Desativao ou Mascaramento de Interrupes 68
6.5 Interrupes Internas e Excees 69
Sumrio
Anna Catharina/CEFET-RN/2000
iii
Anexo A Tabela ASCII 70
Anexo B Cdigo Estendido do Teclado 72
Anexo C Interrupes BIOS e DOS 73
Interrupes do BIOS 73
Interrupes do DOS 77

Introduo a Microprocessadores
Anna Catharina/CEFET-RN/2000
1
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.

Elemento Gerador
das Informaes
Unidade de
Memria
Elemento Receptor
das Informaes
Computador
Sistema de Computador
Unidade Central
de Processamento
Unidade de Sada
de Dados
Unidade de
Entrada de Dados

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.

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).
Introduo a Microprocessadores
Anna Catharina/CEFET-RN/2000
2
Unidade de
Memria
Unidade de E/S
de Dados
Elementos
Receptores/Transmissores
das Informaes
Microcomputador ou
Sistema de Microprocessador
Sistema de Microcomputador
CPU
Microprocessador
Sistema interno de vias
Sistema externo de vias

Figura 2 Sistema de microcomputador

Perifrico qualquer elemento gerador ou receptor de informao em sistemas de
computadores (Figura 3).

Microcomputador
Perifricos para
Entrada de Dados
Perifricos para
Sada de Dados
Perifricos para
Entrada/Sada de Dados
Teclado
Joystick
Scanner
Sensores
Mouse
Scanner
Unidade de disco rgido
Unidade de disco flexvel
Unidade de CD-ROM
Unidade de fita magntica
Impressora
Monitor de vdeo
Alto falante
Displays
Plotter

Figura 3 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.
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.

Introduo a Microprocessadores
Anna Catharina/CEFET-RN/2000
3
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.


Unidade de
Controle
Microprocessador
Bus interno
Registrador
de Instruo
Registros de
Uso Geral
ALU
Decodificador
de Instruo
Bus de dados
Bus de endereo
Bus de controle
FPU
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.

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.
Introduo a Microprocessadores
Anna Catharina/CEFET-RN/2000
4
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, 2
n
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).


Introduo a Microprocessadores
Anna Catharina/CEFET-RN/2000
5
1.3 Evoluo dos Microprocessadores
Microprocessador
Bits
Internos
Bits do bus
de dados
Bits do bus
de endereos
Cache
L1
Observaes
1
a
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)
2
a
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)
3
a
Gerao
Intel 386DX 32 32 32 Primeira CPU de 32 bits a incluir gerenciamento de memria; Ambiente multi-usurio; 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
4
a
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
5
a
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
6
a
Gerao
Intel Pentium Pro 32 64 32 16KB Execuo dinmica; Tecnologia DIB; Cache L2 de 256 e 512KB
Intel Pentium MMX 32 64 32 16KB Pentium com tecnologia MMX; Esquema duplo de tenso nos circuitos interno (core) e externo
AMD K6 32 64 32 64KB Tecnologia MMX; Arquitetura superescalar; FPU (64 bits); Cache L1 = 32KB instrues + 32KB dados
AMD K6-2 (K6 3D) 32 64 32 64KB Semelhante ao K6. Mais velocidade (barramento externo de 100MHz)
AMD K6-3 (K6+) 32 64 32 64KB Semelhante ao K6-2. Cache L2 (256KB) integrado ao processador. Cache L3 na placa-me.
Intel Pentium Celeron 32 64 32 32KB Cache L1 = 16KB instrues + 16KB dados; Cache L2 de 128KB integrada; Tecnologia MMX;
FPU (32 e 64 bits); Execuo dinmica; Arquitetura superescalar
Intel Pentium II 32 64 32 32KB 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)
Intel Pentium II Xeon 32 64 32 32KB Cache L2 de 1MB ou 2MB; Pentium II projetado para servidores e estaes de trabalho
Intel Pentium III 32 64 32 32KB 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
Intel Pentium III Xeon 32 64 32 32KB Cache L2 de 512KB, 1MB ou 2MB; Pentium III projetado para servidores e estaes de trabalho
Introduo a Microprocessadores
Anna Catharina/CEFET-RN/2000
6
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.
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.
Anlise de um Microprocessador Genrico
Anna Catharina/CEFET-RN/2000
7
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

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.

Anlise de um Microprocessador Genrico
Anna Catharina/CEFET-RN/2000
8
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 pr-decodificadas 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.

Controle
da UE
Registrador
de Base
Registrador
de Segmento
Interface do
Bus de Endereo
Interface de
Controle de Vias
Interface do
Bus de Dados
Fila de
Pr-busca
Decodificador
de Instruo
Fila de Instrues
Decodificadas
ALU
Registradores de
Uso Geral
Bus de Endereo
Bus de Controle
Bus de Dados
UE
UA
UI
UB

Figura 5 Arquitetura interna do processador
2.1.2 Estrutura Pipelined

Os processadores da 1
a
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 2
a
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]

Anlise de um Microprocessador Genrico
Anna Catharina/CEFET-RN/2000
9
IF
UB
Bus de Endereo
Bus de Dados
Fila de pr-busca
ID
UI
Fila de ID
OF
UA UB
Bus de Endereo
Bus de Dados
EX
UE
WB
UA UB
Bus de Endereo
Bus de 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 (CPI), dada por:
es de Instru N
iclos Total de C
CPI

=
. O CPI
significa a quantidade mdia 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 conhecido como Speedup, dado por:
pipelined ciclos ou CPI
seqencial ciclos ou CPI
Speedup =
ou
T(n)
T(1)
) n ( S =
. S(n) > 1, significa que o desempenho da estrutura
pipelined 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.

I
1
= {UB, UI, UE, UA, UB}
I
2
= {UB, UI, UE, UE}
I
3
= {UB, UI, UE}
I
4
= {UB, UI, UA, UB, UE, UA, UB}
I
5
= {UB, UI, UE, UA, UB}
I
6
= {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 barramentos em um determinado ciclo. A existncia de uma unidade ociosa configura uma
bolha () no pipeline.

UB I
1
I
2
I
3
I
4

I
1
I
4

I
5
I
6
I
4


I
5
I
4

UI
I
1
I
2
I
3
I
3
I
4
I
5
I
6
I
6


UE
I
1
I
2
I
2
I
3


I
5
I
4
I
6


UA
I
1


I
4


I
5
I
4


Ciclos 1 2 3 4 5 6 7 8 9 10 11
Figura 7 Execuo das instrues do exemplo numa estrutura pipeline
Anlise de um Microprocessador Genrico
Anna Catharina/CEFET-RN/2000
10
Clculos para o Exemplo:

Estrutura pipelined:
Total de Ciclos = 11
N de Instrues = 6
CPI =
6
11
= 1,83 ciclos/instruo
Estrutura seqencial:
Total de Ciclos = 5+4+3+7+5+3 = 27
N de Instrues = 6
CPI =
6
27
= 4,5 ciclos/instruo

Ganho da estrutura pipelined sobre a seqencial: S(n) =
1,83
4,5
ou
11
27
= 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).


Bus de Endereos
Bus de Dados
CLK
HOLD
HLDA
INTR
NMI
RESET
PEREQ
BUSY
ERROR
A0 A19
D0 D15
BLE
BHE
W/
R
ADS
READY
LOCK
Processador
80x86
Sinais de Controle
de Memria e E/S
Sinais de
Controle
de DMA
Sinais de
Controle de
Interrupo
Sinais de
Controle do
Coprocessador
D/
C
M/
IO
INTA

Figura 8 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.

Anlise de um Microprocessador Genrico
Anna Catharina/CEFET-RN/2000
11
Tabela 1 Tabela descritiva dos pinos do processador genrico
Nome Funo Tipo
Nvel
Lgico
CLK Clock do sistema E
A0-A19 Bus de endereo (20 bits) S 1
D0-D15 Bus de dados (16 bits) E/S 1
BHE, BLE Byte enables Selecionam parte alta (BHE) e baixa (BLE) do bus de dados S 0
HOLD Pedido de uso do bus de dados (pedido de DMA) E 1
HLDA Reconhecimento HOLD (reconhecimento de DMA) S 1
INTR Pedido de interrupo mascarvel E 1
NMI Pedido de interrupo no-mascarvel E 1
RESET Reinicializao do sistema E 1
PEREQ Requisio de dados pelo coprocessador E 1
BUSY Coprocessador ocupado E 0
ERROR Erro no coprocessador E 0
W/R Referente a escrita (W) ou leitura (R) S 1/0
D/C Referente a dados (D) ou controle/cdigo (C) S 1/0
M/IO Referente a memria (M) ou E/S (IO) S 1/0
ADS Status de endereo (indicador de ciclo de barramento vlido) S 0
READY Pedido de espera (por um perifrico) E 0
LOCK Indicador de barramento ocupado S 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 (2
16
).

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.

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.

Anlise de um Microprocessador Genrico
Anna Catharina/CEFET-RN/2000
12
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).

T
CLK
PCLK

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 (T
1
e T
2
). 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 Sinais M/IO, D/C, W/R
M/ IO D/ C W/ R
Tipo de ciclo de barramento
0 0 0 Reconhecimento de interrupo
0 0 1 Processador ocioso (nenhum ciclo de barramento est sendo processado)
0 1 0 Leitura de dados numa interface de E/S
0 1 1 Escrita de dados numa interface de E/S
1 0 0 Leitura de cdigo na memria
1 0 1 Parado (halt/shutdown)
1 1 0 Leitura de dados na memria
1 1 1 Escrita de dados na memria


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 (A
0
a A
15
) 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 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.

Anlise de um Microprocessador Genrico
Anna Catharina/CEFET-RN/2000
13
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).


n+2
Bus de
Endereo
W/
R
M/
IO
D/
C
Bus de
Dados
READY
n n+1 n+2
n n+1 n+2
ta: tempo de endereamento
taw: tempo de endereamento com pedido de espera
tw: tempo de espera
C1 C2 C4 C3
ta ta taw
T1 T2 T1 tw T2 T1 T2
PCLK

Figura 10 Temporizao genrica
Sistema de Memria de Computadores
Anna Catharina/CEFET-RN/2000
14
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 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
Anna Catharina/CEFET-RN/2000
15
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 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
Anna Catharina/CEFET-RN/2000
16
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.


Memria Principal
Cache Interna (L1)
Memria Secundria
Cache Externa (L2)
Registradores
Custo por bit
Capacidade de
Armazenamento
Tempo de acesso
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 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
Anna Catharina/CEFET-RN/2000
17
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
Segmento de Dados

C1 Parte baixa
+1
A3 Parte alta

Figura 12 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!!!

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
Anna Catharina/CEFET-RN/2000
18
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: 153
10
= 0001 0101 0011
BCD
= 1001 1001
2
= 99
16
Para cada dgito decimal existe um nibble (quarteto) correspondente em BCD.

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
6
10
= 0110
2
ao nibble cuja representao binria seja superior a 9
10
.

Exemplo: 49
10
+ 21
10
= 0100 1001
BCD
+ 0010 0001
BCD
= 0110 1010

Ajuste:

+
0110 1010
2

0000 0110
2

0111 0000
BCD



Aps o ajuste, o resultado da soma :
0111 0000
BCD
= 70
10


Tabela 3 Equivalncia entre os sistemas numricos
Valor
Binrio
Dgito
Hexadecimal
Valor
Decimal
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 +255
10
). Para armazenar na memria valores
positivos e negativos (-128
10
a +127
10
), 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 = 12
10
= 0000 1100
2


-A = C
2
(A) = C
1
(A) +1 = 1111 0100
2

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
Anna Catharina/CEFET-RN/2000
19
Exemplo: A = 7
10
e B = 8
10
. Calcular, por complemento de 2, o valor C = A B.

A = 0000 0111
2
e B = 0000 1000
2

Operao 1 C
1
(B): 1111 0111
2

Operao 2 adio com 1 (1+0=1, 1+1=0 vai 1):

+
1111 0111
0000 0001

1111 1000
= C
2
(B)

Adio (A + C
2
(B)):

+
0000 0111
1111 1000
1111 1111
Logo, A B = 1111 1111
2
.
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 1111
2
= -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.

0
2
n
-1
2
n
2
2n
-1
2
2n
2
3n
-1
2
3n
2
4n
-1
M
0
M
1
M
2
M
3

Figura 13 Organizao high-order interleave

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
Anna Catharina/CEFET-RN/2000
20
0
2
4n
-4
1
2
4n
-3
2
2
4n
-2
3
2
4n
-1
M
0
M
1
M
2
M
3

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 (2
20
), 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.

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
Anna Catharina/CEFET-RN/2000
21
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.

Convencional Estendida (XMS)
0 640k 1M ????
UMB
Expandida (EMS)
EMS Page Frame
Superior
HMA

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 (BE
0
, BE
1
, BE
2
e
BE
3
) 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 (A
2
a A
31
) 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.

M
3
M
2
M
1
M
0
D
31
-D
24
D
23
-D
16
D
15
-D
8
D
7
-D
0
BH
3
BH
2
BH
1
BH
0
A
31
-A
0

Figura 16 Organizao fsica da memria principal
Sistema de Memria de Computadores
Anna Catharina/CEFET-RN/2000
22
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.


M
3
M
2
M
1
M
0
X
D
31
-D
24
D
23
-D
16
D
15
-D
8
D
7
-D
0
BH
3
= 1 BH
2
= 1 BH
1
= 1 BH
0
= 0
A
31
-A
0

Figura 17 Acesso a um dado de 1 byte


M
3
M
2
M
1
M
0
X
D
31
-D
24
D
23
-D
16
D
15
-D
8
D
7
-D
0
BH
3
= 1 BH
2
= 1 BH
1
= 0 BH
0
= 0
A
31
-A
0
X+1

Figura 18 Acesso a um dado de 2 bytes


M
3
M
2
M
1
M
0
X
D
31
-D
24
D
23
-D
16
D
15
-D
8
D
7
-D
0
BH
3
= 0 BH
2
= 0 BH
1
= 0 BH
0
= 0
A
31
-A
0
X+1 X+2 X+3

Figura 19 Acesso a um dado de 4 bytes

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
Anna Catharina/CEFET-RN/2000
23
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.

Controle da cache
Memria
Principal
Subsistema de
Memria Cache
Externa
Processador
Bus de endereos
Bus de dados
Controle Controle

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
Anna Catharina/CEFET-RN/2000
24
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.

Controle da cache
Memria
Principal
Subsistema de
Memria Cache
Externa
Processador
Bus de endereos
Bus de dados
Controle Controle
Loop
Loop

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.
miss cache de Total
hits ache c de Total
principal memria Acessos
cache Acessos
Rate Hit = =
ou
k
k
h
1
=


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: t
med
= c + (1 h) m. medida que h 1, todas as referncias podem ser
satisfeitas pela cache, e t
med
c. Por outro lado, medida que h 0, uma referncia memria
necessria toda vez, de forma que t
med
(c + m), 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
Anna Catharina/CEFET-RN/2000
25
4 Arquitetura de Software de um Microprocessador

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.

15 0
IP
CS
DS
SS
ES
15 8 7 0
AX AH AL
BX BH BL
CX CH CL
DX DH DL
15 0
SP
BP
SI
DI
F
Estrutura
de Registros
Mapeamento
de Memria
0000h
.
.
.
FFFFh 64KBytes
Mapeamento
de E/S
00000h
Vetor de Interrupo
.
.
.
003FFh
00400h
1KBytes
Dados do
ROM BIOS
Programas
residentes do
DOS
Programas do
Usurio
.
.
.
9FFFFh
A0000h
640KBytes
Memria
de Vdeo
Reservado
.
.
.
EFFFFh
F0000h
Programas
residentes do
ROM BIOS
.
.
.
FFFFFh 1MBytes

Figura 22 Modelo de software de um processador
Arquitetura de Software de um Microprocessador
Anna Catharina/CEFET-RN/2000
26
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
Anna Catharina/CEFET-RN/2000
27
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.

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

Figura 23 Segmentos parcialmente sobrepostos, totalmente dissociados e totalmente sobrepostos

Arquitetura de Software de um Microprocessador
Anna Catharina/CEFET-RN/2000
28
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.

Registrador de Segmento 0000
Posio desejada
Endereo de base
de segmento
Endereo Fsico
Deslocamento
0000h
Deslocamento

Figura 24 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 (valor do endereo fsico)

Exemplo:
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
Base
Deslocamento
02450 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
Anna Catharina/CEFET-RN/2000
29
4.2.3 Registradores Ponteiros e de ndice (Registradores de Deslocamento)

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

OF DF IF TF SF ZF

AF PF CF
4 5 6 7 8 9 1 2 3 10 11 12 13 14 15 0
flags de estado
flags de controle

bits no usados em modo real
bits usados em modo protegido

Figura 25 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.

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);
Arquitetura de Software de um Microprocessador
Anna Catharina/CEFET-RN/2000
30

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).


Programa
2
5
Rotina de Depurao
6
3
1
4

1 4
2 3 6
5
Programa
Rotina de
Depurao

Figura 26 Modo de operao passo a passo

Arquitetura de Software de um Microprocessador
Anna Catharina/CEFET-RN/2000
31
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).

offset
0000
0001
.
.
.
ltimo dado
. . .
FFFA
FFFB
3
o
dado
FFFC
FFFD
2
o
dado
FFFE
FFFF
1
o
dado
Segmento
de Pilha
Base (Incio) do segmento = Fim da Pilha
SP
Indica a posio (deslocamento) onde
foi colocada a ltima palavra na pilha
(Topo da Pilha)
Fim do segmento = Incio da Pilha
BP
Indica um deslocamento dentro da pilha
(inicialmente aponta para a base)
SS
Aponta para o offset 0000
(base do segmento de pilha)

Figura 27 Segmento de pilha
Arquitetura de Software de um Microprocessador
Anna Catharina/CEFET-RN/2000
32
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.
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
Anna Catharina/CEFET-RN/2000
33
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 Opcode
(linguagem
de mquina)
Mneumnico
(linguagem assembly)
Segmento de Cdigo
01010h XX Instruo anterior
01011h 8B MOV AX, BX
01012h C3
01013h XX Prxima instruo
Situao anterior
execuo da instruo
0 0 1 3 IP
0 1 0 0 CS
1 2 3 4 AX
1 2 3 4
BX
Situao aps a
execuo da instruo
CS : IP
0 0 1 1 IP
0 1 0 0 CS
x x x x AX
1 2 3 4 BX
CS : IP
010016+0011

Figura 28 Modo de Endereamento por Registro

Arquitetura de Software de um Microprocessador
Anna Catharina/CEFET-RN/2000
34
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 Opcode
(linguagem
de mquina)
Mneumnico
(linguagem assembly)
Segmento de Cdigo
01012h XX Instruo anterior
01013h B0 MOV AL, 17h
01014h 17
01015h XX Prxima instruo
0 0 1 3 IP
0 1 0 0 CS
1 2 3 4 AX
Situao anterior
execuo da instruo
0 0 1 5 IP
0 1 0 0 CS
1 2 1 7 AX
Situao aps a
execuo da instruo
CS : IP
CS : IP

Figura 29 Modo de Endereamento Imediato

Arquitetura de Software de um Microprocessador
Anna Catharina/CEFET-RN/2000
35
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 Opcode
(linguagem
de mquina)
Mneumnico
(linguagem assembly)
Segmento de Cdigo
01014h XX Instruo anterior
01015h 8B MOV BX, [1102h]
01016h 1E
01017h 02
01018h 11
01019h XX Prxima instruo
Segmento de Dados
14102h 20h LSB
14103h 51h MSB
0 0 1 5 IP
0 1 0 0 CS
1 3 0 0 DS
1 2 3 4 BX
Situao anterior
execuo da instruo
0 0 1 9 IP
0 1 0 0 CS
1 3 0 0 DS
5 1 2 0 BX
Situao aps a
execuo da instruo
CS : IP
CS : IP
DS : 1102

Figura 30 Modo de Endereamento Direto
Arquitetura de Software de um Microprocessador
Anna Catharina/CEFET-RN/2000
36
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 Opcode
(linguagem
de mquina)
Mneumnico
(linguagem assembly)
Segmento de Cdigo
01018h XX Instruo anterior
01019h 8B MOV AX, [BX]
0101Ah 07
0101Bh XX Prxima instruo
Segmento de Dados
18120h 31h LSB
18121h 00h MSB
0 0 1 B IP
0 1 0 0 CS
1 3 0 0 DS
5 1 2 0 BX
Situao aps a
execuo da instruo
0 0 3 1 AX
CS : IP
DS : BX
0 0 1 9 IP
0 1 0 0 CS
1 3 0 0 DS
1 2 1 7
AX
Situao anterior
execuo da instruo
CS : IP
5 1 2 0 BX

Figura 31 Modo de Endereamento Indireto por Registro
Arquitetura de Software de um Microprocessador
Anna Catharina/CEFET-RN/2000
37
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 v
i
v[i] de um vetor
v formado por n elementos
v = {v
0
, v
1
, v
2
, ... , v
n-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.

Segmento de Dados
v[0] v+0
v[1] v+1
v[2] v+2
. . .
v[n-1] v+n-1

Figura 32 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

Endereo Opcode
(linguagem
de mquina)
Mneumnico
(linguagem assembly)
Segmento de Cdigo
0101Ah XX Instruo anterior
0101Bh 8B MOV CX, [BX+0102h]
0101Ch 8F
0101Dh 02
0101Eh 01
0101Fh XX Prxima instruo
Segmento de Dados
18222h FFh LSB
18223h 01h MSB
0 0 1 B IP
0 1 0 0 CS
1 3 0 0 DS
x x x x CX
Situao anterior
execuo da instruo
0 0 1 F IP
0 1 0 0 CS
1 3 0 0 DS
5 1 2 0 BX
Situao aps a
execuo da instruo
CS : IP
CS : IP
5 1 2 0 BX
0 1 F F CX
DS : (BX+0102)

Figura 33 Modo de Endereamento por Base
Arquitetura de Software de um Microprocessador
Anna Catharina/CEFET-RN/2000
38
Regras para Especificao de ndices:

As seguintes regras devem ser observadas para endereamento de dados:
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)


Endereo Opcode
(linguagem
de mquina)
Mneumnico
(linguagem assembly)
Segmento de Cdigo
0101Eh XX Instruo anterior
0101Fh 8B MOV DX, [0100h+SI]
01020h 94
01021h 00
01022h 01
01023h XX Prxima instruo
Segmento de Dados
13120h 45h LSB
13121h 1Fh MSB
0 0 1 F IP
0 1 0 0 CS
1 3 0 0 DS
x x x x DX
Situao anterior
execuo da instruo
0 0 2 3 IP
0 1 0 0 CS
1 3 0 0 DS
0 0 2 0 SI
Situao aps a
execuo da instruo
CS : IP
CS : IP
0 0 2 0 SI
1 F 4 5 DX
DS : (0100+SI)

Figura 34 Modo de Endereamento Indexado
Arquitetura de Software de um Microprocessador
Anna Catharina/CEFET-RN/2000
39
4.4.7 Modo de Endereamento por Base Indexada

Utilizado para a manipulao de matrizes na forma A
mxn
. 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

A =
n m
mn m m m
n
a a a a
a a a a

(
(
(




3 2 1
1 13 12 11


n m
] n ][ m [ a ] 3 ][ m [ a ] 2 ][ m [ a ] 1 ][ m [ a

] n ][ 1 [ a ] 3 ][ 1 [ a ] 2 ][ 1 [ a ] 1 ][ 1 [ a

(
(
(



e representao computacional equivalente dada por

A =
n m
n m m m m
n
a a a a
a a a a

(
(
(

) 1 ( ), 1 ( 2 ), 1 ( 1 ), 1 ( 0 ), 1 (
) 1 ( 0, 0,2 0,1 0,0




ou, alternativamente,

A =
n m
n m a m a m a m a
n a a a a

(
(
(

] 1 ][ 1 [ ] 2 ][ 1 [ ] 1 ][ 1 [ ] 0 ][ 1 [

] 1 ][ 0 [ ] 2 ][ 0 [ ] 1 ][ 0 [ ] 0 ][ 0 [



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

A =
(
(
(
(

] 1 [

] 1 [
] 0 [
m A
A
A


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

Para referenciar um elemento A
ij
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
Anna Catharina/CEFET-RN/2000
40
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.

Segmento de Dados
m linhas Representao Vetor Correspondente
A[0]
a[0][0]
A+0n+0 = Base
v[0]
a[0][1]
A+0n+1
v[1]
. . . . . . . . .
a[0][n-1]
A+0n +(n-1)
v[n-1]
A[1]
a[1][0]
A+1n+0
v[(n-1)+1] = v[n]
a[1][1]
A+1n +1
v[(n-1)+2] = v[n+1]
. . . . . . . . .
a[1][n-1]
A+1n +(n-1)
v[n+(n-1)] = v[2n+1]
. . . . . . . . . . . .
A[m]
a[m-1][0]
A+(m-1)n+0 v[(m-1)n]
a[m-1][1]
A+(m-1)n+1 v[(m-1)n+1]
. . . . . . . . .
a[m-1][n-1]
A+(m-1)n+(n-1) v[(m-1)n+(n-1)] = v[mn-1]
n colunas
n colunas
n colunas

Figura 35 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


0 1 0 0 CS
1 3 0 0 DS
5 1 2 0 BX
Situao anterior
execuo da instruo
0 0 2 7 IP
0 1 0 0 CS
1 3 0 0 DS
0 0 2 0 SI
Situao aps a
execuo da instruo
CS : IP
CS : IP
0 0 3 1 AX
5 1 2 0 BX
DS : (0100+BX+SI)
Endereo Opcode
(linguagem
de mquina)
Mneumnico
(linguagem assembly)
Segmento de Cdigo
01022h XX Instruo anterior
01023h 8B MOV AH, [BX+0100h+SI]
01024h 80
01025h 00
01026h 01
01027h XX Prxima instruo
Segmento de Dados
18240h 11h
18241h A3h
0 0 2 3 IP
1 1 3 1 AX
0 0 2 0 SI

Figura 36 Modo de Endereamento por Base Indexada
Programao em Linguagem Assembly
Anna Catharina/CEFET-RN/2000
41
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 DW 5 DUP (?) ; vetor soma
Opcode
(Coluna 9)
Operando
(Coluna 17)
Comentrio
(Coluna 41)

Figura 37 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.

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
Anna Catharina/CEFET-RN/2000
42
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 AX, @DATA ; instrues para que DS e ES
MOV DS, AX ; apontem para a rea de
MOV ES, AX ; dados criada


; corpo do programa principal


MOV AH, 4Ch ; funo para trmino de programa
INT 21h ; atravs da INT 21h

Principal ENDP ; final do procedimento principal
END Principal ; final do programa

Programao em Linguagem Assembly
Anna Catharina/CEFET-RN/2000
43
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 AX, @DATA ; copia para AX o endereo da rea de dados
MOV DS, AX ; faz DS apontar para a rea de dados
MOV ES, AX ; 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).

Tabela 4 Atribuies default para os modelos de programa
Modelo de
Memria
Atributo para
o Cdigo
Atributo
para Dados
Sistema Operacional
Segmento
nico
TINY NEAR NEAR DOS Sim
SMALL NEAR NEAR DOS e Windows No
MEDIUM FAR NEAR DOS e Windows No
COMPACT NEAR FAR DOS e Windows No
LARGE FAR FAR DOS e Windows No
HUGE FAR FAR DOS e Windows No
FLAT NEAR NEAR Windows NT Sim
Programao em Linguagem Assembly
Anna Catharina/CEFET-RN/2000
44
.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] [,listagem] [,referncia_cruzada] [;]
Linha de Comando mais Comumente Utilizada: TASM /z/zi programa .

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

5.2.2 Ligador (TLINK)

TLINK.EXE Ligador cria um programa executvel a partir de um objeto.

Sintaxe: TLINK [opes] objetos [, executvel] [, mapa] [, bibliotecas] [;]
Linha de Comando mais Comumente Utilizada: TLINK /x/v programa .

Opo Significado
/x No map file at all
/v Full symbolic debug information
Programao em Linguagem Assembly
Anna Catharina/CEFET-RN/2000
45
5.2.3 Depurador Turbo Debugger (TD)

TD.EXE Depurador permite a depurao de programas.

Sintaxe: TD [opes] [programa [argumentos]] x (desabilita a opo x)
Linha de Comando mais Comumente Utilizada: TD programa .


Flags
Registradores
Segmento de Pilha
Segmento de Cdigo
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
Anna Catharina/CEFET-RN/2000
46
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 128 a 127 (-2
7
a 2
7
-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: -2
15
a 2
15
-1 ou de 0 a 2
16
-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 2
31
-1 ou de 0 a 2
32
-1. Principal uso: endereos completos (segmento : offset).
Programao em Linguagem Assembly
Anna Catharina/CEFET-RN/2000
47
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 2
63
a 2
63
-1 ou de 0 a 2
64
-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 db V,I,N,I,C,I,U,S
Y DB VINICIUS
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
Anna Catharina/CEFET-RN/2000
48
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).

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
Anna Catharina/CEFET-RN/2000
49
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.

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 inter-segmento. 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
Anna Catharina/CEFET-RN/2000
50
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).

Mneumnico Formato Operao
MOV MOV opd, opf
(opd) (opf)

Variaes possveis de operandos:

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

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

Mneumnico Formato Operao
XCHG XCHG opd, opf
(opd) (opf)

Variaes possveis de operandos:

Operando destino Operando fonte
Memria Registrador
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.

Mneumnico Formato Operao
XLATB XLATB
(AL) ((AL) + (BX) + (DS)0)
XLAT XLAT fonte_da_tabela
(AL) ((AL) + (BX) + (segmento)0)

LEA: Usada para carregar um registrador especfico (reg16) com um offset de 16 bits.

Mneumnico Formato Operao
LEA 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).

Mneumnico Formato Operao
LxS LxS reg16, offset
(reg16) (offset)
(xS) (segmento)
Programao em Linguagem Assembly
Anna Catharina/CEFET-RN/2000
51
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).

Mneumnico Formato Operao
ADD ADD opd, opf
(opd) (opf) + (opd)
(CF) transporte
ADC ADC opd, opf
(opd) (opf) + (opd) + (CF)
(CF) transporte
SUB SUB opd, opf
(opd) (opd) (opf)
(CF) emprstimo
SBB SBB opd, opf
(opd) (opd) (opf) (CF)
(CF) emprstimo

Variaes possveis de operandos:

Operando destino Operando fonte
Memria Registrador
Registrador Memria
Registrador Registrador
Registrador Dado imediato
Memria 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.

Mneumnico Formato Operao
INC INC opd
(opd) (opd) + 1
DEC DEC opd
(opd) (opd) 1
NEG 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).
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
Anna Catharina/CEFET-RN/2000
52

Mneumnico Formato Operao
AAA AAA
(AL)BCD (AL)2
(AH) 0, se (AL)BCD s 9
(AH) 1, se (AL)BCD > 9
DAA DAA
(AL)BCD (AL)2
AAS AAS
(AL)BCD (AL)2
(AH) 0, se (CF) = 0
(AH) FFh, se (CF) = 1
DAS DAS
(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:
(AL) Quociente
|
|
.
|

\
|
bits 8 de operando
AX
(AH) Resto
|
|
.
|

\
|
bits 8 de operando
AX

Operando de 16 bits:
(AX) Quociente
|
|
.
|

\
|
bits 16 de operando
AX DX,
(DX) Resto
|
|
.
|

\
|
bits 16 de operando
AX DX,


Observao: As instrues CBW e CWD ajustam valores de AL (byte) para AX (word) e de AX
(word) para DX : AX (dword), respectivamente.

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
Anna Catharina/CEFET-RN/2000
53
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.

Mneumnico Formato Operao
AND AND opd, opf
(opd) (opf) .e. (opd)
OR OR opd, opf
(opd) (opf) .ou. (opd)
XOR XOR opd, opf
(opd) (opf) .xor. (opd)
NOT NOT opd
(opd) ( 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 Operando fonte
Memria Registrador
Registrador Memria
Registrador Registrador
Registrador Dado imediato
Memria 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

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 2
n

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
Anna Catharina/CEFET-RN/2000
54
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.

Mneumnico Formato Operao
STC STC
CF 1
CLC CLC
CF 0
CMC 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.

Mneumnico Formato Operao
STD STD
DF 1
CLD CLD
DF 0
STI STI
IF 1
CLI CLI
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.

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
Anna Catharina/CEFET-RN/2000
55
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.

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
Anna Catharina/CEFET-RN/2000
56
5.5.9 Instruo de Comparao

CMP: Compara dois valores

Mneumnico 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 op2
Memria Registrador
Registrador Memria
Registrador Registrador
Registrador Dado imediato
Memria 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 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
Anna Catharina/CEFET-RN/2000
57
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 flags e registradores:

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:

Mneumnico 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 (CF=0)
JB/JNAE JB destino Jump para destino se abaixo (CF=1)
JBE/JNA JBE destino Jump para destino se abaixo ou igual (CF=1 ou ZF=1)
JE JE destino Jump para destino se igual (ZF=1)
JNE JNE destino Jump para destino 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 (SF=OF)
JLE/JNG JLE destino
Jump para destino se menor ou igual (ZF=1 ou SF=OF)
JE JE destino Jump para destino se igual (ZF=1)
JNE JNE destino Jump para destino se diferente (ZF=0)
Programao em Linguagem Assembly
Anna Catharina/CEFET-RN/2000
58

Mneumnico Formato Operao

Jumps condicionais que testam flags e registradores
JZ JZ destino Jump para destino se ZF=1
JNZ JNZ destino Jump para destino se ZF=0
JS JS destino Jump para destino se SF=1
JNS JNS destino Jump para destino se SF=0
JO JO destino Jump para destino se OF=1
JNO JNO destino Jump para destino se OF=0
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 destino Jump para destino se (CX)=0

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 do conjunto inicializao de CX/instruo de loops:

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
nome_do_label:
. . . ; instrues a serem executadas
CMP op1, op2
LOOPxx nome_do_label

Programao em Linguagem Assembly
Anna Catharina/CEFET-RN/2000
59
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:

Se (cond), ento
Seno
Fim se
Linguagem de Alto Nvel
CMP cond
Jcond entao
JMP senao
entao:
JMP fim_se
senao:
fim_se:
Linguagem Assembly
CMP cond
JNcond senao
entao:
JMP fim_se
senao:
fim_se:

Programao em Linguagem Assembly
Anna Catharina/CEFET-RN/2000
60
5.6.3 Estrutura Repita-At que

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

Formato de Implementao:

Repita
At que (cond)
Linguagem de Alto Nvel
repita:
CMP cond
Jcond fim_repita
JMP repita
fim_repita:
Linguagem Assembly
repita:
CMP cond
JNcond repita
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:

Repita
Enquanto (cond)
Linguagem de Alto Nvel
repita:
CMP cond
JNcond fim_repita
JMP repita
fim_repita:
Linguagem Assembly
repita:
CMP cond
Jcond repita
fim_repita:

5.6.5 Estrutura Enquanto-Repita

A estrutura enquanto-repita semelhante estrutura repita-enquanto, 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:

Enquanto (cond), repita
Fim enquanto
Linguagem de Alto Nvel
enquanto:
CMP cond
Jcond repita
JMP fim_enquanto
repita:
JMP enquanto
fim_enquanto:
Linguagem Assembly
enquanto:
CMP cond
JNcond fim_enquanto
repita:
JMP enquanto
fim_enquanto:

Programao em Linguagem Assembly
Anna Catharina/CEFET-RN/2000
61
5.6.6 Estrutura For (Para)

A estrutura para executa a mesma seqncia de instrues um nmero de vezes
predefinido.

Formato de Implementao:

para contador de 1 a n, faa
Fim para
Linguagem de Alto Nvel
MOV CX,n
para:
LOOP para
fim_para:
Linguagem Assembly
MOV contador, 1
para:
CMP contador, n
JE fim_para
JMP para
fim_para:
para contador de n a 1, faa
Fim para
MOV contador, 1
para:
CMP contador, n
JNE para
fim_para:
Linguagem de Alto Nvel Linguagem Assembly

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:

Case
cond_1:
. . .
cond_n:
Seno:
Fim case
Linguagem de Alto Nvel
case:
CMP (cond_1)
Jcond_1 caso_1
. . .
CMP (cond_n)
Jcond_n caso_n
JMP senao
caso_1:
JMP fim_case
. . .
caso_n:
JMP fim_case
seno:
fim_case:
Linguagem Assembly

Interrupes e Excees
Anna Catharina/CEFET-RN/2000
62
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:

MOV AH,0Ah
INT 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
Anna Catharina/CEFET-RN/2000
63
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.

00000
. . .
n 4
IP
IP
CS
CS
. . .
003FFh
. . .
CS:IP
Rotina de
Servio de
Interrupo
Memria
Principal
CS:IP

Figura 39 Endereamento da Rotina de Servio de Interrupo
Interrupes e Excees
Anna Catharina/CEFET-RN/2000
64
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 003FF
16
.

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 03FF
16
. 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 Vetores de interrupo
Endereo fsico Ponteiro de interrupo presente
0000h 0003h INT 0 erro de interrupo
0004h 0007h INT 01h passo nico
0008h 000Bh INT 02h NMI
000Ch 000Fh INT 03h breakpoint
0010h 0013h INT 04h overflow
0014h 0017h INT 05h print screen (imprime tela)
0018h 001Bh INT 06h reservada
001Ch 001Fh INT 07h reservada
0020h 0023h INT 08h IRQ0
0024h 0027h INT 09h IRQ1
0028h 002Bh INT 0Ah IRQ2
002Ch 002Fh INT 0Bh IRQ3
0030h 0033h INT 0Ch IRQ4
0034h 0037h INT 0Dh IRQ5
0038h 003Bh INT 0Eh IRQ6
003Ch 003Fh INT 0Fh IRQ7
0040h 0043h INT 10h funes da BIOS (interrupes por software)
. . .
0084h 0087h INT 21h funes do DOS (interrupes por software)
. . .
01BCh 01BFh INT 6Fh disponvel ao usurio (interrupes por software)
01C0h 01C3h INT 70h IRQ8
01C4h 01C7h INT 71h IRQ9
01C8h 01CBh INT 72h IRQ10
01CCh 01CFh INT 73h IRQ11
01D0h 01D3h INT 74h IRQ12
01D4h 01D7h INT 75h IRQ13
01D8h 01DBh INT 76h IRQ14
01DCh 01DFh INT 77h IRQ15
01E0h 01E3h INT 78h disponvel ao usurio (interrupes por software)
. . .
00FCh 03FFh INT FFh disponvel ao usurio (interrupes por software)

Interrupes e Excees
Anna Catharina/CEFET-RN/2000
65
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 07FF
16
.

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.

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
Anna Catharina/CEFET-RN/2000
66
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


INT
IRET
Programa
Rotina de Servio de
Interrupo (ISR)

Figura 40 Interrupo por Software (INT e IRET)
Interrupes e Excees
Anna Catharina/CEFET-RN/2000
67
6.3 Interrupo por Hardware: Controlador de Interrupes 8259

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 Tabela de IRQs e prioridades
Chip IRQ Funo
Mestre IRQ0 Atualizao da hora do dia no BIOS (timer do sistema)
IRQ1 Teclado
IRQ2 Conexo com o PIC escravo
Escravo IRQ8 Relgio de tempo real
IRQ9 Conexo com o PIC mestre (IRQ2 redirecionada)
IRQ10 Uso geral (reservada)
IRQ11 Uso geral (reservada)
IRQ12 Mouse do PS/2
IRQ13 Coprocessador matemtico
IRQ14 Controlador do disco rgido
IRQ15 Uso geral (reservada)
Mestre IRQ3 COM2 (porta serial)
IRQ4 COM1 (porta serial)
IRQ5 LPT2 (porta paralela)
IRQ6 Controlador de discos flexveis
IRQ7 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
Interrupes e Excees
Anna Catharina/CEFET-RN/2000
68
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
IR0
IR1
INT IR2
IR3
IR4
INTA
IR5
IR6
IR7
CAS0 CAS1 CAS2
CAS0 CAS1 CAS2
IR0
IR1
INT IR2
IR3
IR4
INTA
IR5
IR6
IR7
PIC Escravo
INTA
INT
IRQ0
IRQ1
IRQ3
IRQ4
IRQ5
IRQ6
IRQ7
IRQ2
IRQ8
IRQ11
IRQ12
IRQ13
IRQ14
IRQ15
IRQ10

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 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, Desativao ou Mascaramento de Interrupes

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
Interrupes e Excees
Anna Catharina/CEFET-RN/2000
69
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.

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
Anna Catharina/CEFET-RN/2000
70

Anexo A Tabela ASCII


Smbolo Tecla Decimal Hexa
NULL Ctrl @ 0 00
SOH Ctrl A 1 01
STX Ctrl B 2 02
ETX Ctrl C 3 03
EOT Ctrl D 4 04
ENQ Ctrl E 5 05
ACK Ctrl F 6 06
BEL Ctrl G 7 07
BS Ctrl H 8 08
HT Ctrl I 9 09
LF Ctrl J 10 0A
VT Ctrl K 11 0B
FF Ctrl L 12 0C
CR Ctrl M 13 0D
SO Ctrl N 14 0E
SI Ctrl O 15 0F
DLE Ctrl P 16 10
XON Ctrl Q 17 11
DC2 Ctrl R 18 12
XOFF Ctrl S 19 13
DC4 Ctrl T 20 14
NAK Ctrl U 21 15
SYN Ctrl V 22 16
ETB Ctrl W 23 17
CAN Ctrl X 24 18
EM Ctrl Y 25 19
SUB Ctrl Z 26 1A
ESC Ctrl [ 27 1B
FS Ctrl \ 28 1C
GS Ctrl ] 29 1D
RS Ctrl ^ 30 1E
US Ctrl _ 31 1F


Smbolo Tecla Decimal Hexa
SP Space Bar 32 20
! ! 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 0 48 30
1 1 49 31
2 2 50 32
3 3 51 33
4 4 52 34
5 5 53 35
6 6 54 36
7 7 55 37
8 8 56 38
9 9 57 39
: : 58 3A
; ; 59 3B
< < 60 3C
= = 61 3D
> > 62 3E
? ? 63 3F


Smbolo Tecla Decimal Hexa
@ @ 64 40
A A 65 41
B B 66 42
C C 67 43
D D 68 44
E E 69 45
F F 70 46
G G 71 47
H H 72 48
I I 73 49
J J 74 4A
K K 75 4B
L L 76 4C
M M 77 4D
N N 78 4E
O O 79 4F
P P 80 50
Q Q 81 51
R R 82 52
S S 83 53
T T 84 54
U U 85 55
V V 86 56
W W 87 57
X X 88 58
Y Y 89 59
Z Z 90 5A
[ [ 91 5B
\ \ 92 5C
] ] 93 5D
^ ^ 94 5E
_ _ 95 5F


Smbolo Tecla Decimal Hexa
` ` 96 60
a a 97 61
b b 98 62
c c 99 63
d d 100 64
e e 101 65
f f 102 66
g g 103 67
h h 104 68
i i 105 69
j j 106 6A
k k 107 6B
l l 108 6C
m m 109 6D
n n 110 6E
o o 111 6F
p p 112 70
q q 113 71
r r 114 72
s s 115 73
t t 116 74
u u 117 75
v v 118 76
w w 119 77
x x 120 78
y y 121 79
z z 122 7A
{ { 123 7B
| | 124 7C
} } 125 7D
~ ~ 126 7E
Ctrl <- 127 7F
Anexo A Tabela ASCII
Anna Catharina/CEFET-RN/2000
71




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





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





Smbolo Tecla Decimal Hexa
Alt 192 192 C0
Alt 193 193 C1
Alt 194 194 C2
Alt 195 195 C3
Alt 196 196 C4
Alt 197 197 C5
Alt 198 198 C6
Alt 199 199 C7
Alt 200 200 C8
Alt 201 201 C9
Alt 202 202 CA
Alt 203 203 CB
Alt 204 204 CC
Alt 205 205 CD
Alt 206 206 CE
Alt 207 207 CF
Alt 208 208 D0
Alt 209 209 D1
Alt 210 210 D2
Alt 211 211 D3
Alt 212 212 D4
Alt 213 213 D5
Alt 214 214 D6
Alt 215 215 D7
Alt 216 216 D8
Alt 217 217 D9
Alt 218 218 DA
Alt 219 219 DB
Alt 220 220 DC
Alt 221 221 DD
Alt 223 222 DE
Alt 223 223 DF





Smbolo Tecla Decimal Hexa
Alt 224 224 E0
Alt 225 225 E1
Alt 226 226 E2
t
Alt 227 227 E3
Alt 228 228 E4
Alt 229 229 E5
Alt 230 230 E6
Alt 231 231 E7
Alt 232 232 E8
Alt 233 233 E9
Alt 234 234 EA
Alt 235 235 EB
Alt 236 236 EC
Alt 237 237 ED
e
Alt 238 238 EE
Alt 239 239 EF
Alt 240 240 F0
Alt 241 241 F1
Alt 242 242 F2
Alt 243 243 F3
Alt 244 244 F4
Alt 245 245 F5
Alt 246 246 F6
Alt 247 247 F7
Alt 248 248 F8
Alt 249 249 F9
Alt 250 250 FA
Alt 251 251 FB
q
Alt 252 252 FC
Alt 253 253 FD
Alt 254 254 FE
Alt 255 255 FF

Anexo B Cdigo Estendido do Teclado

Anna Catharina/CEFET-RN/2000
72 72
Anexo B Cdigo Estendido do Teclado


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

Alt + 0 129 81
Alt + 1 120 78
Alt + 2 121 79
Alt + 3 121 7A
Alt + 4 123 7B
Alt + 5 124 7C
Alt + 6 125 7D
Alt + 7 126 7E
Alt + 8 127 7F
Alt + 9 128 80



















Tecla Decimal Hexa
F1 59 3B
F2 60 3C
F3 61 3D
F4 62 3E
F5 63 3F
F6 64 40
F7 65 41
F8 66 42
F9 67 43
F10 68 44
F11 133 85
F12 134 86

Alt + F1 104 68
Alt + F2 105 69
Alt + F3 106 6A
Alt + F4 107 6B
Alt + F5 108 6C
Alt + F6 109 6D
Alt + F7 110 6E
Alt + F8 111 6F
Alt + F9 112 70
Alt + F10 113 71
Alt + F11 139 8B
Alt + F12 140 8C

Ctrl + F1 94 5E
Ctrl + F2 95 5F
Ctrl + F3 96 60
Ctrl + F4 97 61
Ctrl + F5 98 62
Ctrl + F6 99 63
Ctrl + F7 100 64
Ctrl + F8 101 65
Ctrl + F9 102 66
Ctrl + F10 103 67
Ctrl + F11 137 89
Ctrl + F12 138 8A

Shift + F1 84 54
Shift + F2 85 55
Shift + F3 86 56
Shift + F4 87 57
Shift + F5 88 58
Shift + F6 89 59
Shift + F7 90 5A
Shift + F8 91 5B
Shift + F9 92 5C
Shift + F10 93 5D
Shift + F11 135 87
Shift + F12 136 88





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

75 4B

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





















Anexo C Interrupes BIOS e DOS

Anna Catharina/CEFET-RN/2000
73

Anexo C Interrupes BIOS e DOS

Interrupes do BIOS

INT 10h Funes de Vdeo

Funo 00h Seleciona Modo de Tela
Entrada:
AL = Modo
AH = 0

Modos de Tela
Modo Resoluo
Mximo
Pginas
Cores Tipo Adaptadores Caractere Buffer
00h 4025 8 16 Texto CGA, EGA, VGA 916 B800
01h 4025 8 16 Texto CGA, EGA, VGA 916 B800
02h 8025 4/8 16 Texto CGA, EGA, VGA 916 B800
03h 8025 4/8 16 Texto CGA, EGA, VGA 916 B800
04h 320200 1 4 Grfico CGA, EGA, VGA 88 B800
05h 320200 1 4 Grfico CGA, EGA, VGA 88 B800
06h 640200 1 2 Grfico CGA, EGA, VGA 88 B800
07h 8025 1/8 2 Texto MDA, EGA, VGA 916 B800
0Dh 320200 16 Grfico EGA, VGA 88 A000
0Eh 640200 16 Grfico EGA, VGA 814 A000
0Fh 640350 2 2 Grfico EGA, VGA 814 A000
10h 640350 2 4/16 Grfico EGA, VGA 814 A000
11h 640480 1 2 Grfico VGA 816 A000
12h 640480 1 16 Grfico VGA 816 A000
13h 320200 1 256 Grfico VGA 88 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)
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

Anexo C Interrupes BIOS e DOS

Anna Catharina/CEFET-RN/2000
74
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

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




Cdigos de Erro de Disco
Valor Erro
00h Nenhum erro
01h Comando ruim passado ao controlador
02h Marca de endereo no encontrada
03h Disco protegido
04h Setor no encontrado
05h Falha na reinicializao
07h Parmetros para o disco errados
09h DMA ultrapassou fim do segmento
0Bh Flag de trilha ruim no encontrada
10h Verificao de setor ruim encontrada
11h Dado erro corrigido
20h Falha no controlador
40h Falha em operao de busca
80h Nenhuma resposta do disco
BBh Erro indefinido
FFh Falha no sentido da operao


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:
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)

Anexo C Interrupes BIOS e DOS

Anna Catharina/CEFET-RN/2000
75
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)


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)

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
Bit de
AH ativo
Status
Bit de
AL ativo
Status
7 Intervalo 7 Detecta sinal de linha recebido
6 Registrador shift vazio 6 Indicador de anel
5 Registrador holding vazio 5 Conjunto de dados pronto
4 Break detectado 4 Limpar para enviar
3 Erro de estrutura 3 Delta detecta Sinal de linha recebido
2 Erro de paridade 2 Sada do detector de anel
1 Erro de excesso 1 Delta conjunto de dados pronto
0 Dados preparados 0 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
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 Ctrl-Break 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)





Anexo C Interrupes BIOS e DOS

Anna Catharina/CEFET-RN/2000
76
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 buffer 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 Ctrl-Break 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 ativo
Status
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
Entrada:
AH = 2
DX = Nmero da impressora (0, 1 ou 2)
Sada:
AH = Status da impressora


Anexo C Interrupes BIOS e DOS

Anna Catharina/CEFET-RN/2000
77
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:
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 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 buffer 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.

Anexo C Interrupes BIOS e DOS

Anna Catharina/CEFET-RN/2000
78
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
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)

Funo 19h Encontra unidade de disco ativa
Entrada:
AH = 19h
Sada:
AL = unidade de disco ativa (0 = A; 1 = B; ...)


Anexo C Interrupes BIOS e DOS

Anna Catharina/CEFET-RN/2000
79
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)
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:
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.



Anexo C Interrupes BIOS e DOS

Anna Catharina/CEFET-RN/2000
80
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:
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)

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)



Anexo C Interrupes BIOS e DOS

Anna Catharina/CEFET-RN/2000
81
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
ativado
Significado
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:
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= n
o
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
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.
Anexo C Interrupes BIOS e DOS

Anna Catharina/CEFET-RN/2000
82
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:
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)
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.




Anexo C Interrupes BIOS e DOS

Anna Catharina/CEFET-RN/2000
83
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 Ctrl-Break), 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

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 8025 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)
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)


Anexo C Interrupes BIOS e DOS

Anna Catharina/CEFET-RN/2000
84
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:
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
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