Vous êtes sur la page 1sur 93

CENTRO FEDERAL DE EDUO TECNOLGICA DE MINAS GERAIS

DEPARTAMENTO DE ENSINO DO SEGUNDO GRAU


COORDENAO DO CURSO TCNICO DE ELETRNICA

LABORATRIO
DE
SISTEMAS
MICROPROCESSADOS I
Introduo Terica

Junho/2007

Prof. Denny Daniel Collina


denny@deii.cefetmg.br

ndice Analtico
1. Introduo aos Computadores. __________________________________________________________ 5
1.1 O computador.

[07] [08] ____________________________________________________________ 5

1.2 Organizao bsica de um computador. [08] __________________________________________ 6


1.2.1 O microprocessador.______________________________________________________________ 7
1.2.2 Memrias. ______________________________________________________________________ 9
1.2.3 Tipos de memrias _______________________________________________________________ 9
1.2.3.1 RWM - Memrias de leitura e escrita. ____________________________________________ 10
1.2.3.2 ROM - Memrias apenas de leitura.______________________________________________ 11
1.2.4 Memrias de programa e de dados. _________________________________________________ 12
1.3 Linguagens de programao.________________________________________________________ 13
1.3.1 Linguagens de baixo nvel. [10] ___________________________________________________ 13
1.3.2 Linguagens de alto nvel. [01] ____________________________________________________ 14
1.4 Etapas da elaborao de um programa. [07] ___________________________________________ 15
1.4.1 Compilao e Link-edio. [04] ___________________________________________________ 16
1.4.2 Simulao e execuo. ___________________________________________________________ 17
1.5 Questes de reviso._______________________________________________________________ 17
2. O primeiro programa em linguagem assembly. ____________________________________________ 19
2.1 Elaborao do fluxograma.__________________________________________________________ 19
2.2 A configurao bsica do computador. _______________________________________________ 20
2.3 Editando o cdigo fonte.____________________________________________________________ 22
2.3.1 Formatao. ____________________________________________________________________ 22
2.4 Executando o assembler. ___________________________________________________________ 23
2.5 Executando o linker. _______________________________________________________________ 26
2.6 Executando o simulador. ___________________________________________________________
2.6.1 rea de Cdigo. ________________________________________________________________
2.6.2 rea dos Registradores. __________________________________________________________
2.6.3 rea de Status do simulador. ______________________________________________________
2.6.4 Pinos de interrupo. ____________________________________________________________
2.6.5 Portas Paralelas. _______________________________________________________________
2.6.6 rea de Dados. _________________________________________________________________
2.6.7 Menu de Comandos._____________________________________________________________
2.6.7.1 Dump. _____________________________________________________________________
2.6.7.2 Help Simulation. _____________________________________________________________
2.6.7.3 Patch Code. ________________________________________________________________
2.6.7.4 Quit Exit. ___________________________________________________________________
2.6.7.5 Reset. _____________________________________________________________________

27
28
28
29
30
30
30
31
31
31
32
33
33

2.7 Simulando o programa._____________________________________________________________ 33


3. A linguagem assembly para o Z80.

[10] ________________________________________________ 35

3.1 Labels. __________________________________________________________________________ 35


3.2 Mnemnicos ou cdigos de operao. ________________________________________________ 36
3.3 Operandos._______________________________________________________________________
3.3.1 Constantes numricas. ___________________________________________________________
3.3.2 Constantes de Caracteres. ________________________________________________________
3.3.3 Operaes com Constantes._______________________________________________________

36
36
36
36

3.4 Comentrios. _____________________________________________________________________ 37


3.5 Pseudo-instrues. ________________________________________________________________ 37
3.6 Cuidados ao se definir variveis e constantes. _________________________________________ 40
ndice.

4. As Instrues do PZ80________________________________________________________________ 43
4.1 Instrues de transferncia de 8 bits. _________________________________________________ 44
4.2 Instrues de transferncia de 16 bits. ________________________________________________ 46
4.3 Instrues aritmticas e lgicas. _____________________________________________________ 49
4.3.1 Registrador de flags. _____________________________________________________________ 49
4.3.2 Operaes aritmticas com operandos em 8 bits. _______________________________________ 51
4.3.3 Instrues de comparao. ________________________________________________________ 52
4.3.4 Operaes com valores codificados em BCD.__________________________________________ 53
4.3.5 Operaes aritmticas com operandos em 16 bits. ______________________________________ 54
4.3.6 Operaes lgicas. ______________________________________________________________ 55
4.4 Modos de endereamento. __________________________________________________________ 57
4.4.1.1 Endereamento direto ou estendido.______________________________________________ 57
4.4.1.2 Endereamento de registrador. __________________________________________________ 57
4.4.1.3 Endereamento imediato e imediato estendido. _____________________________________ 57
4.4.1.4 Endereamento relativo. _______________________________________________________ 58
4.4.1.5 Endereamento indireto. _______________________________________________________ 58
4.4.2 Endereamento indireto utilizando os pares BC e DE. ___________________________________ 59
4.4.3 Endereamento indireto utilizando o par HL. ___________________________________________ 60
4.5 Instrues de desvio. _______________________________________________________________ 62
4.5.1 Instrues de desvio absoluto incondicional. ___________________________________________ 63
4.5.2 Instrues de desvio absoluto condicional. ____________________________________________ 63
4.5.3 Instrues de desvio relativo incondicional. ____________________________________________ 64
4.5.4 Instrues de desvio relativo condicional. _____________________________________________ 65
4.6 Instrues de subrotina e de pilha.____________________________________________________ 66
4.6.1 Instrues de subrotina.___________________________________________________________ 67
4.6.1.1 Chamada de subrotina incondicional. _____________________________________________ 67
4.6.1.2 Chamada de subrotina condicional. ______________________________________________ 68
4.6.1.3 Retorno de subrotina incondicional. ______________________________________________ 68
4.6.1.4 Retorno de subrotina condicional. ________________________________________________ 69
4.6.2 Instrues de pilha. ______________________________________________________________ 69
4.7 Instrues de rotao e deslocamento. ________________________________________________ 73
4.7.1 Instrues de rotao. ____________________________________________________________ 74
4.7.2 Instrues de deslocamento. _______________________________________________________ 77
4.8 Instrues de entrada e sada. _______________________________________________________ 77
4.9 Instrues de controle da CPU._______________________________________________________ 79
A. O Cdigo ASCII. ______________________________________________________________________ 81
B. O Conjunto Completo de Instrues do Z80. ______________________________________________ 83
B.1 Instrues de Transferncia de 8 bits._________________________________________________ 83
B.2 Instrues de Transferncia de 16 bits.________________________________________________ 84
B.3 Instrues de Permuta, Transferncia de blocos e Pesquisa de grupos. ____________________ 85
B.4 Instrues Aritmticas de 8 bits. _____________________________________________________ 86
B.5 Instrues Aritmticas de 16 bits. ____________________________________________________ 86
B.6 Instrues de propsito geral e de controle da CPU _____________________________________ 87
B.7 Instrues de Rotao e Deslocamento _______________________________________________ 87
B.8 Instrues de Manipulao de bit. ____________________________________________________ 88
B.9 Instrues de Entrada e Sada _______________________________________________________ 89
B.10 Instrues de Desvio ______________________________________________________________ 90
B.11 Instrues de Chamada e Retorno de subrotina. _______________________________________ 90
C. Referncias Bibliogrficas._____________________________________________________________ 91

ndice

II

ndice de Instrues
ADC A,byte ___________________________50
ADC A,reg8 ____________________________50
ADC HL,reg16 __________________________53
ADD A,(HL) ___________________________60
ADD A,byte ___________________________49
ADD A,reg8 ____________________________49
ADD HL,reg16 __________________________52
AND (HL) _____________________________58
AND byte _____________________________54
AND reg8 ______________________________54
BIT n,(HL) ___________________________58
CALL C,end ___________________________66
CALL end _____________________________65
CALL M,end ___________________________66
CALL NC,end __________________________66
CALL NZ,end __________________________66
CALL P,end ___________________________66
CALL PE,end __________________________66
CALL PO,end __________________________66
CALL Z,end ___________________________66
CCF __________________________________54
CP (HL) ______________________________60
CP byte ______________________________51
CP reg8 _______________________________51
CPL __________________________________53
DAA __________________________________51
DB ___________________________________37
DCR reg8 ______________________________49
DEC (HL) _____________________________58
DEC reg16 _____________________________53
DEFSEG _______________________________35
DS ___________________________________38
DW ___________________________________38
END __________________________________35
EQU __________________________________36
EX (SP),reg16 _________________________71
EX AF,AF ____________________________46
EX DE,HL _____________________________45
EXX __________________________________46
HALT _________________________________77
IN A,(port) __________________________76
IN reg8,(C) ___________________________76
INC (HL) _____________________________60
INC reg16 _____________________________53
INC reg8 ______________________________49
JP (HL) ______________________________61
JP C,end _____________________________62
JP end _______________________________61
JP M,end _____________________________62
JP NC,end ____________________________62
JP NZ,end ____________________________62
JP P,end _____________________________61
JP PE,end ____________________________62
JP PO,end ____________________________62
JP Z,end _____________________________62
JR C,ee ______________________________63
JR ee ________________________________63
JR NC,end ____________________________63
JR NZ,ee _____________________________63
JR Z,ee ______________________________63
LD (BC),A ____________________________57

ndice.

LD (DE),A ____________________________ 57
LD (end),A ___________________________ 43
LD (end),reg16 ________________________ 45
LD (HL), reg8 ________________________ 58
LD A,(BC) ____________________________ 57
LD A,(DE) ____________________________ 57
LD A,(end) ___________________________ 42
LD reg,byte __________________________ 43
LD reg16,(end) ________________________ 44
LD reg16,dbyte ________________________ 44
LD reg8,(HL) _________________________ 58
LD reg8,reg8 _________________________ 42
LD SP,reg16 ___________________________ 70
NEG __________________________________ 50
NOP __________________________________ 77
OR (HL) ______________________________ 58
OR byte ______________________________ 54
OR reg8 ______________________________ 54
ORG __________________________________ 36
OUT (C),reg8 _________________________ 76
OUT (port),A _________________________ 76
POP reg16 _____________________________ 69
PUSH reg16 ____________________________ 68
RES n,(HL) ___________________________ 58
RET __________________________________ 66
RET C ________________________________ 67
RET M ________________________________ 67
RET NC _______________________________ 67
RET NZ _______________________________ 67
RET P ________________________________ 67
RET PE _______________________________ 67
RET PO _______________________________ 67
RET Z ________________________________ 67
RL (HL) ______________________________ 74
RL reg8 ______________________________ 74
RLA __________________________________ 72
RLC (HL) _____________________________ 73
RLC reg8 _____________________________ 73
RLCA _________________________________ 72
RR (HL) ______________________________ 74
RR reg8 ______________________________ 74
RRA __________________________________ 73
RRC (HL) _____________________________ 73
RRC reg8 _____________________________ 73
RRCA _________________________________ 72
SBC A,(HL) ___________________________ 58
SBC A,byte ___________________________ 50
SBC A,reg8 ___________________________ 50
SBC HL,reg16 __________________________ 53
SCF __________________________________ 55
SEG __________________________________ 36
SET n,(HL) ___________________________ 58
SLA (HL) _____________________________ 75
SLA reg8 _____________________________ 75
SRA (HL) _____________________________ 75
SRA reg8 _____________________________ 75
SUB byte _____________________________ 49
SUB reg8 _____________________________ 49
XOR (HL) _____________________________ 60
XOR byte _____________________________ 54
XOR reg8 _____________________________ 54

III

CAPTULO 1.
1. INTRODUO AOS COMPUTADORES.
1.1 O computador.

[07] [08]1

Desde os primrdios de nossa era, o homem sempre se preocupou em desenvolver mquinas, fossem
elas automticas ou manuais. Tal preocupao tinha como objetivo minimizar esforos, o desgaste do agente
humano no trabalho e aumentar a produo. A primeira mquina que auxiliava na execuo dos clculos o
baco e data de 500 a.c., veja a Figura 1-1.
As primeiras mquinas eram formadas por engrenagens e correias e podem ser chamados de computadores mecnicos, veja um exemplo na Figura 1-2. Os computadores, como os conhecemos hoje em dia, so
na sua imensa maioria mquinas digitais que operam com informaes binrias.
Do que so capazes os computadores? Os computadores executam na maioria das vezes, as mesmas
tarefas que um humano pode executar, mas os computadores podem faz-lo com muito maior velocidade e
preciso. Isto devido ao fato de os computadores realizarem todos os seus clculos e operaes um passo
por vez e de demandar uma pequena frao de tempo
para executar cada passo.
Ao contrrio dos humanos, um computador no
pensa! Um computador necessita de um jogo completo
de instrues que lhe informem exatamente o que fazer
a cada passo para desenvolver suas tarefas. Este conjunto de instrues, chamado de programa, preparado
por uma ou mais pessoas, e diferente para cada tarefa a ser executada. Estes programas so colocados na
unidade de memria do computador, em forma de cdigo binrio, sendo que cada instruo possui um cdigo
nico. O computador l estes cdigos da memria, um
por vez, interpreta-os e executa a operao correspondente.

Figura 1-1: O baco, primeira mquina de calcular.

Seria impossvel listar todas as aplicaes dos


computadores. Em vez disso, iremos ver dois exemplos:
Cincia e engenharia: Os cientistas e engenheiros usam a matemtica como uma linguagem para definir a operao dos sistemas fsicos. Em muitos casos,
as relaes matemticas so extremamente complexas
e devem ser calculadas para muitos valores diferentes
das variveis do sistema. Um computador pode calcular
estas complexas expresses matemticas em altas velocidades. Alm disso, ele pode executar clculos repetidos usando diferentes tipos de dados, tabelar os resultados e determinar que conjuntos de valores produzem Figura 1-2: Mquina diferencial de Babbage (1822).
os melhores resultados. Em muitos casos, um computador pode poupar ao engenheiro horas, ou at mesmo dias, de clculos tediosos, deixando, assim, mais tempo livre para o trabalho criativo.
Controle de processos: O tempo no um fator crtico quando o computador utilizado para processar
dados comerciais ou realizar clculos de engenharia, no sentido de que os resultados no tm necessidade
imediata (isto , dentro de alguns milisegundos ou segundos). Os computadores so, muitas vezes, usados em
aplicaes onde os resultados de seus clculos so imediatamente necessrios para serem utilizados no controle de um processo. Estas so chamadas de aplicaes de tempo real. Um exemplo pode ser encontrado no
controle de processos industriais, que utilizado em fbricas de papel, refinarias de petrleo, etc.
1

Os nmeros entre colchetes indicam as referncias bibliogrficas utilizadas para a redao do tpico correspondente. A referncia completa pode ser consultada no final desta apostila.

Introduo aos Computadores.

Como podemos classificar os computadores? Isto vai depender dos critrios utilizados para tal. Se utilizarmos tamanho e capacidade de processamento, teremos:
O microcomputador, o menor e o mais novo membro da famlia dos computadores. Ele consiste, geralmente, em vrios CIs, incluindo um chip microprocessador, CIs de memria e dispositivos de entrada e sada.
Os minicomputadores so maiores que os microcomputadores e tm preos bem mais elevados. Os minis so largamente utilizados em sistemas de controle industrial, em aplicaes cientficas nos laboratrios de
pesquisa, e em aplicaes comerciais para pequenos negcios. Seu uso ainda ocorre, mas est recebendo
boa concorrncia dos microcomputadores que tm apresentado significativo crescimento na velocidade e capacidade de processamento.
Os maiores computadores, chamados de mainframes so aqueles encontrados em grandes companhias,
bancos, universidades, etc. Eles podem chegar a custar vrios milhares dlares. As aplicaes dos mainframes
variam da resoluo de problemas cientficos de engenharia complexos at aplicaes comerciais orientadas
para dados, onde a nfase est na manuteno e atualizao de grande quantidade de dados e informaes.

1.2 Organizao bsica de um computador.

[08]

Quais os elementos essenciais para se compor um computador? So quatro os elementos essenciais: a


unidade central de processamento, a unidade de memria e as unidades de entrada e sada. A interligao
destas unidades pode ser vista na Figura 1-3.

Do mundo
exterior

Unidade de
Entrada

U. C. P.

Unidade de
Sada

Para o
mundo
exterior

Memria

Figura 1-3: Organizao bsica de um computador.


A Unidade Central de Processamento (UCP) a composio da Unidade Lgica-Aritmtica (ULA), da unidade de Controle e de um conjunto de registradores que normalmente so implementados em um nico chip,
o microprocessador (P).
A Unidade de Controle dirige a operao de todas as outras unidades, fornecendo sinais de temporizao e de controle. De certa forma, a unidade de controle como o dirigente de uma orquestra, que
o responsvel por manter cada um dos membros da orquestra na sincronizao correta.
A Unidade Lgica-Aritmtica (ULA) a rea do computador onde so realizadas as operaes, aritmticas e lgicas, com os dados. O tipo de operao a ser executada determinado pela unidade de
controle. Os operandos podero vir tanto da unidade de memria como da unidade de entrada.
A Unidade de Memria (memria primria ou memria do sistema) armazena grupos de dgitos binrios
(palavras) que podem representar ou instrues (programa) que o computador dever executar, ou dados a serem operados pelo programa. A memria serve tambm para o armazenamento de resultados intermedirios e
finais das vrias operaes. Dentro desta unidade podemos destacar trs subgrupos: memrias da famlia
RAM, da famlia ROM, e registradores.
A Unidade de Entrada composta por todos os dispositivos utilizados para receber informaes e dados
que so externos ao computador, e introduzi-los nas unidades de memria ou na ULA. Alguns dispositivos de
entrada bsicos so: teclados, botes, leitoras de fita, unidades de disco flexvel, conversores analgicosdigitais (ADCs), etc.
A Unidade de Sada composta pelos dispositivos utilizados para transferir dados e informaes do
computador para o mundo exterior. Exemplos de unidades de sada: displays, indicadores luminosos, impressoras, monitores de vdeo, conversores digitais-analgicos (DACs), etc.

Captulo 1.

1.2.1 O microprocessador.
Os vrios blocos da Figura 1-4 podem ser classificados da seguinte forma:
Conjunto de registradores de armazenamento e de entrada/sada (E/S);
Unidade Lgico-aritmtica;
Unidades de controle e temporizao (incluindo o controle de interrupo), Lgica de decodificao e
Barramentos.

Figura 1-4: Diagrama em blocos simplificado do Z80.

Figura 1-5: Foto do chip Z80 CPU e o detalhamento de sua pinagem.


Neste momento, podemos utilizar um diagrama mais simplificado composto apenas do conjunto reduzido2 de registradores, como apresentado na Figura 1-6.
Sua arquitetura de registradores, em uma abordagem simplificada, pode ser apresentada como composta por 20 registradores:
Um contador de programa (PC) de 16 bits;

H, ainda, os registradores de 8 bits: I(interrupt vector) e R(refresh register) que no sero abordados neste curso.

Introduo aos Computadores.

Dois registradores para uso como ponteiros para a memria de 16 bits cada - (registradores de ndice IX e IY);
Um registrador de 16 bits para uso como ponteiro de pilha - registrador stack pointer (registrador SP);
Um registrador de 8 bits para execuo da maioria das operaes aritmticas, lgicas, etc., - o acumulador (registrador A);
Um registrador indicador de estado de 8 bits, dos quais apenas 6 so utilizados - registrador de flags
ou registrador de estado (registrador F);
E mais 6 registradores de 8 bits, chamados registradores de propsito geral - B, C, D, E, H, L. Estes
registradores podem, tambm, ser utilizados ao pares (BC, DE, HL) transformando-se em 3 registradores de 16 bits;
E, por fim mais 8 registradores denominados conjunto alternativo: A, F, B, C, D, E, H, L que
permutam seus valores com o acumulador, o registrador de flags e os registradores de propsito geral.
P Z80
16 bits

PC

SP

IX

IY

8 bits

Figura 1-6: Arquitetura de registradores do P Z80.


Todos os microcomputadores, apesar de variarem em sua arquitetura, tm um elemento em comum - a
pastilha do microprocessador. Como sabemos, o P funciona como a unidade central de processamento do
microcomputador. Em essncia, o P o corao do microcomputador, pois suas caractersticas definem as
caractersticas do microcomputador. Sua velocidade determina a velocidade mxima do microcomputador, e
seus pinos de controle determinam o tipo de interfaceamento de dispositivos de entrada e sada (E/S ou I/O)
que poder ser utilizado.
O P executa grande nmero de funes incluindo:
Prov os sinais de controle e temporizao para todos os elementos do microcomputador;
Busca instrues e dados na memria;
Transfere dados de e para os dispositivos de E/S;
Decodifica instrues;
Executa operaes aritmticas e lgicas determinadas por instrues;
Responde a sinais de controle gerados pelos dispositivos de E/S; etc.
O P contm todos os circuitos lgicos para executar estas funes, mas devemos ter em mente que
uma grande parte da lgica interna do P no acessvel externamente. Os elementos internos do P so acessveis por software, isto significa que podemos trabalhar com os circuitos internos do P apenas com a execuo do programa colocado na memria. Isto que torna o P to verstil e flexvel - quando quisermos modificar a operao do P, simplesmente modificamos o programa.
A organizao bsica de um computador, apresentada anteriormente (Figura 1-3), agora pode ser melhor representada com a presena do P. Na Figura 1-7 podemos observar a interligao do P com os demais
componentes.

Captulo 1.

Figura 1-7: Estrutura tpica de um microcomputador de 8 bits.


Os termos microprocessador (P) e microcontrolador e (C) costumam ser objeto de confuso por aqueles que esto sendo apresentados a esta rea do conhecimento. Como pudemos ver acima o microprocessador cumpre a funo da unidade central de processamento (UCP) em microcomputador.
Para o caso do microcontrolador, a definio mais simples : o computador incluso em um nico chip
(single chip computer). Portanto, em um chip microcontrolador teremos no s a UCP, como os dispositivos de
entrada e sada, e as memrias RAM e ROM. Os pinos do chip do acesso apenas aos dispositivos de E/S e a
alguns pinos de controle, clock e alimentao. Veja a Figura 1-8.

Do mundo
exterior

Unidade de
Entrada

U. C. P.

Unidade de
Sada
Para o
mundo
exterior

+V
GND
CLK

Memria
RAM + ROM
Microcontrolador

Figura 1-8: Diagrama em blocos de um microcontrolador.

1.2.2 Memrias.
1.2.3 Tipos de memrias
Um sistema microprocessado pode dispor de dois tipos de memria: primria (do sistema ou principal) e
secundria (de massa ou de armazenamento).
A memria primria constituda por clulas de armazenamento baseadas em semicondutores3. H duas caractersticas importantes que permitem subdividir este grupo: a possibilidade de alterar as informaes
armazenadas e a sua volatilidade.

No passado utilizou-se memrias primrias baseadas em materiais magnticos: ferrite ou memria de ferrite, que foi substituda pelas
memrias de semicondutores por apresentarem tamanho bastante reduzido.

Introduo aos Computadores.

Memria primria

Memrias de leitura e escrita


(RWM)

Memrias apenas de leitura


(ROM)

RAM esttica
(SRAM)

RAM dinmica
(DRAM)

Memrias permanentes

Memrias apagveis

RAM no voltil
(NVRAM)

RAM dinmica integrada


(iRAM)

ROM Mascarvel
(Masked ROM)

ROM Programvel e Apagvel


(EPROM)

ROM Programvel
(PROM)

ROM Programvel e Apagvel


Eletricamente (EEPROM)

Memria Flash

Figura 1-9: Classificao das memrias primrias.


As memrias que compem este grupo que permitem a alterao das informaes nelas armazenadas
so denominadas memrias de leitura e escrita (RWM), que so mais conhecidas por outra sigla (RAM). As
que no permitem alterao so memrias apenas de leitura (ROM).
As memrias podem ser volteis, ou seja, aps o desligamento da energia a informao perdida, ou
ento, podem ser no volteis. A maioria das RAMs voltil enquanto que todas as ROMs so no volteis.
Estas caractersticas nos permitem agrupar os vrios tipos de memrias semicondutoras de acordo com
a Figura 1-9.
A memria secundria constituda por dispositivos de armazenamento magnticos ou ticos, como discos flexveis, discos rgidos (HDs), fitas e CD-ROMs, etc. Estes possuem capacidade de armazenamento muito maior que as memrias semicondutoras e no so volteis. A maioria permite a leitura e a escrita, enquanto
alguns, apenas a leitura.
Neste curso nos concentraremos nas memrias primrias, que so essenciais em qualquer sistema microprocessado. Vejamos uma breve descrio das memrias apresentadas na Figura 1-9.

1.2.3.1 RWM - Memrias de leitura e escrita.


As memrias que tm estas caractersticas so as RAMs que na sua maioria tm, tambm, uma outra
caracterstica muito importante: so volteis. Destacamos alguns tipos dos vrios existentes para serem apresentadas neste subgrupo:
SRAM (Static Random Access Memory): Esta memria constituda por clulas compostas por flip-flops,
ou biestveis. Cada flip-flop necessita de 6 transistores na sua construo, o que a faz ter um baixo nvel de integrao, mas alta velocidade de acesso (veja a Figura 1-10). Esta memria mais cara e consome mais energia do que as RAMs dinmicas (veja a descrio abaixo).
NVRAM (Non volatile RAM): Encontramos duas possveis implementaes com esta designao:
A primeira composta de um arranjo com uma RAM esttica, com uma EEPROM (veja descrio
abaixo) e circuitos monitores de tenso. Logo aps o ligamento os dados so copiados da EEPROM
para a RAM e durante o seu funcionamento so lidos e gravados na RAM. Quando a tenso de alimentao cai abaixo de certo valor os dados so copiados da RAM para a EEPROM, evitando assim
que sejam perdidos.
A segunda conhecida como ZeroPower NVRAM: uma memria que, em um mesmo encapsulamento, contem uma RAM esttica construda com tecnologia CMOS (baixo consumo), uma bateria de
ltio e circuitos monitores de tenso. Quando a alimentao externa cai abaixo de 3 V, o circuito monitor de tenso comuta alimentao da RAM para a bateria, mantendo os dados.

10

Captulo 1.

DRAM (Dynamic RAM): Cada clula desta memria construda por apenas um transistor MOS e de um
pequeno capacitor, veja a Figura 1-11. O armazenamento dos nveis lgicos de um bit ocorre sob a forma de
nveis diferentes de carga do capacitor intrnseco ao circuito. A vantagem deste tipo de memria reside no fato
de ter o nmero reduzido de componentes por clula, o que traz um grau de integrao bastante elevado, alm
de ter um consumo bastante reduzido e preo bem inferior, se comparado com o de uma RAM esttica equivalente. H uma desvantagem: o capacitor se descarrega rapidamente, levando a perda da informao se ele
no for recarregado a tempo. Este processo chamado de refresh e deve ser executado em intervalos de alguns milisegundos. Isto faz com que seja necessrio adicionar circuitos ao sistema para desempenhar esta tarefa. Em funo disto este tipo de memria passa a ser economicamente recomendvel em sistemas, acima de
uma certa capacidade de armazenamento. Para sistemas pequenos a RAM esttica a recomendada.

Figura 1-10: Diagrama de uma clula de memria


RAM esttica.

Figura 1-11: Diagrama de uma clula de memria


RAM dinmica.

iRAM (Integrated RAM): Este um tipo de memria RAM dinmica onde o circuito de refresh j est disponvel dentro do mesmo encapsulamento da memria. Para o usurio ela funciona de forma similar RAM dinmica, sem apresentar o inconveniente de ter que adicionar circuitos para efetuar a tarefa de refresh.

1.2.3.2 ROM - Memrias apenas de leitura.


Este subgrupo das memrias tem outra caracterstica muito importante alm da descrita no ttulo. Todas
as ROMs so no volteis, isto quer dizer que o padro de bits gravados na memria permanente, no pode
ser alterado.
ROM de mscara (Masked Read Only Memory): Neste tipo de memria a informao nela contida gravada durante o processo de fabricao, que tem uma de suas etapas denominada mascaramento. Este tipo de
memria s adquirido atravs de encomenda direta ao fabricante e os lotes mnimos so de alguns milhares
de unidades. utilizada em equipamentos com programa j testado e aprovado e produzidos em larga escala,
pois em grandes quantidades apresenta o custo mais baixo dos vrios tipos de ROM.
PROM (Programmable ROM): Este tipo de memria encontrada no comrcio, e vem totalmente apagada. O usurio pode, atravs de equipamento adequado, efetuar sua programao. Uma vez programada no
pode ser apagada e poder ser considerada como uma ROM. Normalmente utilizada em equipamentos cujo
programa j foi testado e aprovado, mas que no tm um volume de produo para justificar a encomenda de
ROM de mscara. Outra sigla para este tipo de memria OTPROM (One time programmable ROM)
EPROM (Erasable PROM): uma memria que em funo de sua tecnologia de construo, diferente
da ROM e da PROM, tem a vantagem de poder ser apagada, se necessrio. Isto se faz atravs da exposio
da pastilha luz ultravioleta durante um intervalo que pode variar de 15 a 30 minutos4. O processo de apagamento feito com o componente fora do circuito e todo o chip apagado. Em funo da necessidade de se
expor o chip luz, o encapsulamento de uma EPROM construdo em cermica e dotado de uma janela de
quartzo. Estes dois materiais colaboram para o seu alto custo.
EEPROM (Electrically Erasable PROM): Este tipo de memria foi desenvolvida para suplantar algumas
desvantagens das EPROMs: necessidade da retirada do chip do circuito para o apagamento completo para
permitir a regravao, longo tempo de apagamento. A E2PROM uma memria que pode ser gravada e regravada eletricamente palavra por palavra. Se necessrio, o chip pode ser todo apagado em alguns milisegundos.
possvel reprogramar o chip no prprio circuito, desde que o sistema tenha sido projetado para tal. O seu
custo superior ao de uma EPROM.
4

bastante difcil de precisar o tempo, pois ele funo da intensidade luminosa emitida pela lmpada, da distncia do chip lmpada e
da tecnologia de fabricao do componente.

Introduo aos Computadores.

11

Memria Flash: Ou flash E2PROM, uma variante da E2PROM, sua principal diferena refere-se ao fato
de que ela no permite o apagamento de uma palavra apenas. Deve-se apagar todo o chip, ou um setor, para
que se possa regrava-lo. Apesar deste inconveniente, as memrias flash que tm a vantagem de possurem
clulas com estrutura mais simples que as E2PROMs e permitem um maior nvel de integrao o que permite a
reduo de seu custo.
OBS.: Em tempo: recentemente (janeiro de 2005) j se teve notcia de alguns fabricantes produzindo microcontroladores com memria flash apagvel byte-a-byte. Isto elimina, talvez o grande inconveniente deste tipo de memria.

1.2.4 Memrias de programa e de dados.


Observando a Figura 1-5 vemos que o P Z80 dispe de um barramento de endereos de 16 bits (A0 at
A15), isto nos permite dizer que ele pode enderear at 216 posies de memria. Mais especificamente quer
dizer que o microprocessador tem capacidade de acessar at 64 KBytes5 de informao.
Mas que tipo de informao pode ser armazenada na memria? Podemos, inicialmente, classificar a informao em dois grandes grupos: programa e dados. J vimos que o programa o conjunto de instrues que
comanda o funcionamento do microprocessador para que ele resolva uma determinada tarefa. Os dados englobam um conjunto de informaes bastante variado, que podem ser: aquelas que microprocessador leu da
unidade de entrada, os valores intermedirios gerados durante o processamento, os valores finais que vo ser
enviados para a unidade de sada, as variveis, tabelas de constantes, mensagens pr-formatadas, etc. Portanto, as informaes contidas na memria do computador devem ser separadas de forma bem organizada para que possamos acess-las com facilidade.
Inicialmente efetuaremos a diviso da memria em dois grandes blocos. A cada parte daremos o nome
de segmento de memria. E a partir deste momento, iremos nos referir memria de forma mais especfica:
memria de dados (ou segmento de dados) e memria de programa (ou segmento de programa). Mais frente, ver que a memria poder ser dividida em outros segmentos. No item seguinte, sero apresentados os
meios de que a linguagem assembly dispe para efetuar diviso organizada da memria.
Uma forma visual de representar a memria de um computador o mapa de memria, que nada mais
do que uma tabela onde identificamos o que est armazenado em cada bloco de memria. Em alguns casos,
pode-se chegar ao ponto de identificar individualmente o tipo de informao contido em cada posio de memria. Veja a Figura 1-12
0000h

Segmento de programa
vazio
vazio
Segmento de dados
vazio
vazio

FFFFh

Vazio

Figura 1-12: Exemplo de um mapa de memria.


Observando a Figura 1-12, vemos que o mapa de memria no est todo preenchido, h espaos vazios. Na verdade foi dito que o P Z80 tem capacidade de enderear at 64 KBytes. No h a obrigatoriedade de
se preencher todo o mapa de memria. Utiliza-se a quantidade de memria necessria para o funcionamento
adequado do equipamento.
Outro ponto a observar que no existe a obrigatoriedade do segmento de programa estar posicionado
na memria antes do segmento de dados. Estes segmentos podem ser alocados na memria em qualquer
ordem ou seqncia.

Convm ressaltar que o prefixo K, aqui difere do usado em engenharia k por ter valor multiplicador de 1024.

12

CAPTULO 1.

1.3 Linguagens de programao.


1.3.1 Linguagens de baixo nvel.

[10]

Para que possa haver comunicao existem vrias maneiras de uma pessoa expressar as idias que
tem em mente, de forma que possam ser recebidas e entendidas por outra pessoa. A troca de informaes deve ser feita atravs de uma linguagem comum ao emissor e ao receptor.
Da mesma maneira, o microprocessador deve receber informaes, interpret-las e execut-las, porm o
microprocessador e os demais circuitos usam para troca de informaes sinais eltricos e, desta forma, a maneira mais prtica de codificar as informaes na forma binria.
Um programa a ser executado por um microprocessador (P) deve estar armazenado na memria de
forma que em cada posio deva existir uma informao codificada em um certo nmero de dgitos binrios:
a instruo. No so apenas as instrues que devem estar armazenadas na forma binria, temos ainda os
dados e os endereos. Esta maneira de codificar as informaes bastante simples e rpida para a mquina;
difcil e trabalhosa, porm, para ns.
Este conjunto de informaes apresentado na forma binria, que compreendido pelo P constitui uma
linguagem que chamamos de linguagem de mquina ou cdigo objeto. Na Figura 1-13 podemos observar um
pequeno programa exemplo em linguagem de mquina para o P Z80.
A linguagem de mquina prpria de cada P e definida pelo fabricante, durante a etapa de desenvolvimento do P. muito comum que o cdigo objeto de P no seja compatvel com o de outro. Podemos citar como uma das excees a esta regra a compatibilidade de cdigo entre os microprocessadores 8085 e Z80.
Um programa em linguagem de mquina longo e confuso para o ser humano, porm, pode-se represent-lo de uma forma mais simples, utilizando-se, ao contrrio da base binria, a base hexadecimal. Pois, como sabemos, a converso de binrio para hexadecimal bastante simples. Veja a Figura 1-14.
Endereo
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000
0000 0000

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

Contedo
0011 1110b
1000 0000b
1101 0011b
0001 1111b
0010 0001b
0000 0000b
0001 0000b
0111 1110b
0010 0011b
1000 0110b
0010 0111b
1101 0011b
0001 0111b
0011 1111b
0000 0001b
1101 1010b
0001 0011b
0000 0000b
1010 1111b
1101 0011b
0000 1111b
0111 0110b

Figura 1-13: Programa em linguagem de mquina


para o P Z80, apresentado em binrio.

Endereo
0000h
0001h
0002h
0003h
0004h
0005h
0006h
0007h
0008h
0009h
000Ah
000Bh
000Ch
000Dh
000Eh
000Fh
0010h
0011h
0012h
0013h
0014h
0015h

Contedo
3Eh
80h
D3h
1Fh
21h
00h
10h
7Eh
23h
86h
27h
D3h
17h
3Fh
01h
DAh
13h
00h
AFh
D3h
0Fh
76h

Figura 1-14: O mesmo programa apresentado em


hexadecimal.

Como o prprio nome diz, a linguagem de mquina muito mais voltada para a mquina que para o ser
humano. Evidentemente os primeiros computadores eram programados em linguagem de mquina, entretanto
esta linguagem possui uma srie de inconvenientes, tais como: os programas so muitos longos, cansativos de
serem carregados na memria, so difceis de serem entendidos e no ilustram as operaes que o P ir executar. Tambm so bastante susceptveis a erros, os quais so difceis de serem encontrados e corrigidos.
Por apresentar estas caractersticas, a linguagem de mquina recebe a designao de linguagem de baixo nvel.
Com a evoluo dos computadores rapidamente apareceram linguagens mais apropriadas para o trabalho do ser humano, facilitando a tarefa de programao. A linguagem assembly ou linguagem simblica, considerada, ainda, como linguagem de baixo nvel. Ela foi um primeiro passo na evoluo da linguagem de programao, pois um programa em linguagem assembly possui a mesma seqncia de instrues do programa
Introduo aos Computadores.

13

em linguagem de mquina; certos nmeros, porm, so substitudos por smbolos que so mais ilustrativos para o programador. Alm disso, cada linha de programa em linguagem assembly digita-se apenas uma instruo
completa. O P Z80 dispe de instrues que ocupam 1, 2, 3 e at 4 bytes, portanto, ao se traduzir uma linha
de assembly para linguagem de mquina pode-se implicar na utilizao de at 4 bytes no segmento de memria reservado para o programa.
Uma primeira simbologia utilizada na linguagem assembly a substituio do cdigo hexadecimal da
instruo pelo mnemnico correspondente ao cdigo da operao. O mesmo acontece com os registradores,
especificados como operandos, que so identificados por uma ou duas letras. No exemplo apresentado na
Figura 1-14 temos como contedo da primeira posio de memria o byte 3Eh, o que corresponde a ld a,.
O valor em questo corresponde ao mnemnico ld, seguido do primeiro operando, o registrador a,. Esta
instruo demanda, ainda, um segundo operando (o dado) que est armazenado na posio de memria seguinte, ou seja, o byte 80h. Efetuando todas as substituies temos: ld a,80h, veja a Figura 1-15.
Com a substituio dos nmeros por smbolos, foi necessrio pouco tempo de uso da linguagem assembly para estes tornarem-se familiares. Possibilitou-se uma significativa melhoria para a criao e entendimento
do programa. Porm, alm desta existem outras particularidades desta linguagem que facilita a tarefa de programao tais como o uso de rtulos (labels) e comentrios no programa.
Os labels so nomes simblicos atribudos a constantes numricas, endereos de posies de memrias, endereos de variveis, etc. Eles tm a funo de evitar o uso de valores numricos no programa, que em
muitas situaes, no so to significativos quanto os smbolos (ou nomes) dos labels.
Voltando Figura 1-15, podemos observar que a instruo armazenada na posio de memria cujo endereo 000Fh constitui uma instruo de desvio (condicional) do processamento para o endereo 0013h.
Caso o programa fosse modificado com a insero ou retirada de instrues, este endereo seria alterado. Se
ao invs de utilizar como operando da instruo de desvio condicional, um nmero, fosse utilizado um label que
rotulasse a instruo para onde o salto deveria ser executado, alteraes no programa no exigiriam alteraes
no operando da instruo, evitando assim trabalho adicional para o programador.
Endereo
0000h
0002h
0004h
0007h
0008h
0009h
000Ah
000Bh
000Dh
000Fh
0012h
0013h
0015h

mvi
out
lxi
mov
inx
add
daa
out
mvi
jc
xra
out
hlt

8085
a,80h
1Fh
h,1000h
a,m
h
M
17h
a,01h
0013h
a
0Fh

ld
out
ld
ld
inc
add
daa
out
ld
jp
xor
out
halt

Z80
a,80h
(1Fh),a
Hl,1000h
a,(hl)
Hl
(hl)
(17h),a
a,01h
c,0013h
A
(0Fh),a

Z80
Inicio: ld
out
ld
ld
inc
add
daa
out
ld
jp
xor
Saida: out
halt

a,80h
(1Fh),a
hl,1000h
a,(hl)
hl
(hl)
(17h),a
a,01h
c, Saida
a
(0Fh),a

Figura 1-15: O programa da Figura 1-13, agora codificado em linguagem assembly para os Ps 8085 e Z80.

1.3.2 Linguagens de alto nvel.

[01]

A linguagem assembly j facilitou muito o trabalho de programao, porm, com o passar dos tempos,
surgiu a necessidade de linguagens melhores. Essas novas linguagens so mais voltadas para o problema a
ser resolvido, desprendendo dos aspectos inerentes ao equipamento que ser utilizado. Apresentam uma estrutura tcnica, formada por instrues que so decodificadas em diversas instrues de mquina; so, ainda,
linguagens universais, no dependendo do repertrio de instrues estabelecido pelos fabricantes dos microprocessadores.
Com linguagens deste tipo temos a seguintes vantagens:
Os programas podem ser escritos de maneira concisa e mais rpida;
Para programar no h a necessidade de conhecerem-se as caractersticas do sistema nem a linguagem de mquina do microprocessador envolvido;
Os programas nestas linguagens podem ser transferidos facilmente de um computador para o outro
(portabilidade);
A linguagem est mais prxima da utilizada para a formulao do problema, sendo assim mais prxima do homem que da mquina.
14

CAPTULO 1.

neste contexto que se inserem as linguagens de alto


nvel ou linguagens automticas que foram responsveis pela
crescente difuso dos computadores provocando a sua utilizao em massa, pois o usurio passou a no ter mais a necessidade de conhecer a fundo a mquina e nem sua linguagem assembly. Bastam conhecimentos matemticos ou especficos de sua rea e o conhecimento dos detalhes da linguagem de alto nvel. Outra razo que o usurio tem a
possibilidade de usar programas prontos, desenvolvidos por
outros, e que no dependem do equipamento que ele possui,
crescendo rapidamente o nmero de pacotes de programas
disponveis.

Incio
Etapa 1
Programa: editor de texto
Funo: edio do arquivo fonte
Resultado: programa fonte ".asm"
Etapa 2
Programa: assembler
Funo: traduo para cdigo objeto
Resultado: arquivo objeto ".obj"
Etapa 3
Programa: linker
Funo: montagem e gerao do cdigo executvel
Resultado: arquivo executvel ".hex"
Etapa 4

1.4 Etapas da elaborao de um programa. [07]


A programao de um sistema a construo correta
da seqncia de instrues que este vai realizar para conduzir soluo do problema. Esta seqncia de instrues
varivel, pois a programao possui uma ampla variedade de
alternativas e opes que dependem do programador que,
atravs de vrias maneiras, atinge os mesmos resultados.
Programas mais elaborados exigem uma metodologia
de trabalho, sem a qual, torna-se impossvel fazer uma programao correta. Essencialmente, o projeto de um programa a ser processado por um computador deve ter os seguintes procedimentos:
Anlise do problema;
Determinao do algoritmo (opcional, mas altamente recomendvel);
Escrever o programa em linguagem simblica (edio);
Traduzir o programa para linguagem de mquina
(compilao e link-edio);

Programa: simulador
Funo: depurao do programa
Resultado: correo de alguns erros

Pronto para a
execuo real
?

S
Etapa 5
Execuo real - Programa executado pelo
microprocessador utilizando E/S real ou simulada

O programa
est correto
?

S
Fim

Figura 1-16: Fluxo de elaborao e depurao


de um programa.

Testar e corrigir o programa (depurao).


Na anlise do problema, deve ser determinado de maneira bem clara quais os objetivos que devem ser
alcanados e exatamente que tarefa deve ser realizada. Se este programa for processado em um equipamento
j disponvel, verificar sua capacidade de execuo do programa, sua capacidade de memria, seus perifricos
e sua unidade central de processamento. Caso este programa seja para um equipamento que est sendo desenvolvido, definir primeiro todo o hardware deste equipamento. Tambm deve ficar bem claro quais as sadas
que devemos dar a cada entrada, e que dispositivos de entrada e sada fornecero estas informaes.
O algoritmo a ser determinado deve estabelecer quais equaes ou conjuntos de regras e operaes
que devem ser submetidos os dados para que sejam obtidos os resultados esperados. Dependendo da complexidade e finalidade do programa os algoritmos podem ser mais complexos, e sua perfeita determinao
fundamental para o projeto do programa.
O algoritmo pode ser escrito de forma descritiva ou atravs de um diagrama de blocos (como o digrama
visto na Figura 1-16). A forma descritiva nos remete basicamente escrita de um texto. extremamente indicada quando trabalhamos com linguagens de alto nvel.
J o fluxograma aplicado quando utilizamos linguagens de baixo nvel, como o assembly. Ao escrevermos o fluxograma, temos a possibilidade de utilizar o recurso de refinamento sucessivo, que basicamente,
representar um comando, normalmente complexo, em um nico bloco. Posteriormente faz-se um novo fluxograma que detalhe este comando. Portanto, podemos obter um conjunto de fluxogramas: o que podemos chamar de principal, apresenta um nmero reduzido de blocos e nos permite ter uma viso do conjunto do programa. Em seguida, podemos ter um ou mais fluxogramas detalhando cada um dos blocos do fluxograma principal. A elaborao do fluxograma de grande auxlio na hora de se escrever o programa e quase fundamental
para a sua correo (depurao).

Introduo aos Computadores.

15

As trs etapas a seguir: edio, compilao e depurao so, normalmente, repetidas vrias vezes at
que se obtenha o programa funcionando corretamente. Veja o fluxograma da Figura 1-16.
Para escrever o programa (edio) deve ser primeiramente determinado o tipo de linguagem que ser utilizada, se uma linguagem de baixo nvel ou alto nvel. Isto depende de se ter disponvel um sistema de desenvolvimento ou no e que tipos de linguagem este sistema tem condies de interpretar. Quanto mais complicado for o programa, mais interessante ser a utilizao de linguagem de alto nvel. Isto torna o programa mais
fcil de ser entendido por possuir uma sintaxe mais clara.
A traduo do programa fonte (compilao) pode at ser feita manualmente em programas escritos em
linguagens de baixo nvel, devido ao fato que cada instruo possui um cdigo de mquina correspondente. No
entanto, este processo lento, tedioso e suscetvel a erros. Na prtica, utilizam-se programas para a traduo
do programa fonte em cdigo de mquina.
Para testar e corrigir o programa (depurao) existe uma srie de artifcios que auxiliam este procedimento, desde programas de simulao, assim como a partio do programa em pequenos fragmentos para facilitar sua anlise e a descoberta dos erros (bugs).

1.4.1 Compilao e Link-edio.

[04]

A converso manual de um programa fonte em assembly para linguagem de mquina (cdigo objeto)
possvel de ser executada - mesmo que implique em uma tarefa cansativa, tediosa e passvel de erros, o que
no ocorre com um programa em linguagem de alto nvel. Para este trabalho rduo utiliza-se o prprio computador com um programa especialmente desenvolvido para a execuo desta tarefa.
Os aplicativos que traduzem um programa fonte para a linguagem de mquina so chamados programas
tradutores. Sua funo a de ler cada linha do programa e efetuar a converso para cdigo de mquina podendo executar estas instrues ou no. Normalmente ainda gera-se uma listagem completa do cdigo objeto.
Os programas tradutores mais comuns so:
O Programa Assembler: um programa voltado para converter um cdigo fonte, escrito em linguagem
assembly, para um programa objeto em linguagem de mquina. Existem diversos tipos de assemblers, pois
como foi visto, cada microprocessador possui uma linguagem assembly diferente, e tambm para um mesmo
P podem existir programas assemblers diferentes, dependendo de quem desenvolveu este programa. Normalmente, o programa assembler:
Traduz o programa fonte;
Armazena o programa objeto em memria ou em disco;
Fornece uma listagem do programa fonte resultante, do cdigo objeto resultante;
Uma tabela de smbolos (labels) e
Uma listagem de erros de sintaxe.
O Programa Compilador: a designao dada ao aplicativo que traduz programa fonte, escrito em linguagem de mdio ou de alto nvel, para programa objeto, em linguagem de mquina. Existem diversos tipos de
compiladores, um para cada linguagem: compilador Pascal, compilador C, etc.
O Programa Interpretador: tambm voltado para linguagens de alto nvel. Este no produz um programa objeto e, sim, toma uma instruo do programa fonte, traduz e executa imediatamente. Aps isto, retira nova instruo do programa fonte, traduz e executa, e assim por diante. Desta forma o programa fonte executado imediatamente, sem que seja necessrio esperar pelo programa objeto e depois execut-lo. Porm, o programa fonte executado linha por linha, tendo antes a traduo de cada linha, tem o tempo de execuo aumentado.
Uma vez obtido o cdigo objeto, proveniente de um assembler ou de um compilador, necessrio ainda
convert-lo em cdigo executvel. O processo de montagem (ou traduo) efetuado por um dos dois programas j citados, gera um cdigo objeto com a caracterstica de poder ser armazenado em qualquer lugar da
memria do computador - cdigo objeto relocvel. necessrio, ento, submeter este cdigo ao programa linker (ligador, encadeador) para torn-lo um cdigo objeto absoluto, ou seja, cujos endereos de alocao na
memria do computador j estejam definidos. Esta definio essencial para que as instrues de desvio tenham seus operandos corretamente calculados. Este cdigo de mquina resultante chamamos de cdigo executvel pois ele est pronto para ser processado pelo microprocessador. O linker pode efetuar o encadeamento
de um ou vrios cdigos objeto, bastando para tal que a lista dos arquivos que os contm seja fornecida.

16

CAPTULO 1.

1.4.2 Simulao e execuo.


A etapa final do processo de elaborao de um programa consiste da verificao de seu funcionamento.
Isto se faz pela execuo do cdigo executvel que pode ser feita de duas formas: a execuo direta na mquina ou sua simulao atravs de programas adequados.
A execuo por meio de simulao, ocorrendo antes da execuo direta no equipamento microprocessado, permite-nos obter maior eficincia no processo de elaborao de um programa. Atravs da simulao
possvel obter um conjunto muito maior de informaes sobre a evoluo do programa em desenvolvimento do
que teramos ao execut-lo diretamente no equipamento real. Informaes como contedo de registradores e o
estado de outros circuitos internos ao microprocessador nem sempre so facilmente obtidos nos equipamentos. Ao contrrio, a simulao do P nos permite a execuo em modo passo-a-passo e at retornar o processamento, retroceder a simulao, permitindo que uma mesma seqncia de instrues possa ser executada
mais de uma vez.
Ocorre que, na maioria dos casos, os programas simuladores so para arquiteturas de microprocessadores genricas e, em alguns casos, onde o programa em desenvolvimento depende de uma interao com o
hardware do equipamento, sua simulao deixa a desejar. Este o caso, por exemplo, da necessidade de ler
dados do teclado do equipamento, ou de apresentar um resultado no display. Ainda assim, para estes casos,
onde um programa simulador genrico no dispe de funes que simulem o hardware perifrico ao microprocessador, possvel, atravs de pequenos artifcios, contornar a situao e tirar proveito do simulador.
Podemos dizer que a utilizao da simulao vai nos auxiliar a resolver a grande maioria dos problemas
de um programa em elaborao. Uma parte muito pequena dos problemas, ou falhas, a qual depende da interao com o hardware, que s poder ser resolvida pela execuo direta no equipamento.
Apesar da defesa feita em favor das ferramentas de simulao, em momento nenhum se teve a inteno
de proclamar a infalibilidade desta ferramenta. interessante salientar que a ferramenta da simulao deve ser
encarada como uma das etapas no processo de elaborao de um programa.
Sendo assim, o passo seguinte simulao o da execuo real, na mquina, do cdigo desenvolvido,
e j parcialmente depurado. E s aps esta etapa, que deve ser constituda de testes que busquem ser os mais
reais possveis ao contexto em que o equipamento ser empregado, que podemos atestar o bom funcionamento ou no de um programa.

1.5 Questes de reviso.


Aps a leitura do texto desta prtica introdutria, efetue uma reviso respondendo s questes seguintes:
01. Classifique os computadores de acordo com sua capacidade de processamento.
02. Quais so os elementos essenciais de um computador?
03. Que caractersticas de um microcomputador so definidas pelo microprocessador que o compe?
04. Defina programa e dados.
05. Cite um exemplo do uso do computador, diferente daqueles apresentados no texto da Prtica 0.
06. Durante o processamento, o microprocessador (P) prov um grande nmero de funes, cite-as.
07. O que torna o microprocessador uma mquina extremamente verstil?
08. Caracterize as memria RAM e ROM. Que tipo de informao cada uma pode conter? Cite exemplos.
09. Explique o significado dos termos leitura e escrita.
10. O que acontece se, em um determinado programa, existir uma instruo para escrever dados na ROM?
11. Do que formada a linguagem de mquina? Qual a caracterstica comum entre as linguagens de mquina dos microprocessadores dos vrios fabricantes?
12. Por que se utiliza a representao na base hexadecimal da linguagem de mquina?
13. Caracterize e descreva brevemente a linguagem assembly.
14. Defina label. Qual a vantagem da sua utilizao na elaborao de programas?
15. Defina linguagem de baixo nvel.
16. Defina linguagem de alto nvel e cite suas vantagens.
17. Cite as etapas componentes da elaborao de um programa de computador.
18. Defina programa tradutor e descreva os tipos existentes.
19. O que se entende por depurao de um programa?
20. Qual a validade da simulao no processo de desenvolvimento de um programa?
21. Existe apenas uma linguagem assembly? Explique.

Introduo aos Computadores.

17

CAPTULO 2.
2. O PRIMEIRO PROGRAMA EM LINGUAGEM ASSEMBLY.
Neste captulo iremos descrever em detalhes as etapas que compem o processo de criao de um programa em linguagem assembly para o P Z80, como apresentado na Figura 1-16 da pgina 15.
Mesmo sem ter apresentado formalmente o conjunto de instrues do P Z80, utilizaremos apenas algumas instrues bastante elementares para compor o nosso primeiro programa. Mais frente, todas elas sero abordadas em detalhe.
importante relembrar o que foi exposto no item 1.4 , na pgina 15: o momento da edio de um programa constitui a quarta etapa de um projeto. Ela precedida pela anlise do problema, pela determinao
do algoritmo e pela elaborao do fluxograma. Saltaremos as duas primeiras etapas e iniciaremos pela elaborao do algoritmo. bom lembrar que, como foi apresentado anteriormente, utiliza-se o fluxograma como ferramenta de descrio do algoritmo em linguagens de baixo nvel, como o caso da linguagem assembly que
utilizaremos.

2.1 Elaborao do fluxograma.


Para efeito de padronizao, iniciaremos apresentando o formato de alguns dos blocos mais usados na
elaborao de fluxogramas.

Incio

Terminador: utilizado para representar o incio e o fim do programa.

y = x +5

Processo: neste bloco especificamos as operaes, clculos, tarefas, ou


seja, o processamento que deve ser executado.

sin(x)

Subrotina: representa um processamento pr-definido, a soluo de uma


funo, ou mesmo um sub-programa.

Dados

Teclado

Papel

Display

Tomada de deciso: Este bloco representa o momento de um teste booleano, que se tiver resultado verdadeiro (S = sim = verdadeiro) implicar no
desvio do processamento. Caso o teste tenha resultado falso, o processamento prosseguir normalmente.
Entrada de dados: Bloco que representa a entrada de dados, ou seja, a coleta de informao vinda do ambiente externo ao programa.
Entrada manual: Bloco que representa a entrada de informao gerada pelo usurio (ou operador) do equipamento.
Sada de dados: Bloco que representa a operao sada de dados em papel, ou seja, impresso.
Sada de dados: Bloco que representa a operao sada de dados em um
dispositivo de exibio que pode ser um display, um monitor de vdeo,

Conector: Smbolo que indica a continuidade do processo em outro ponto,


na mesma pgina.

Conector: Smbolo que indica a continuidade do processo em outro ponto,


em outra pgina.
Setas: Indicam o sentido do fluxo do processamento

Como j devem ter observado, a Figura 1-16 apresenta um fluxograma.

Problemas Propostos:
P1: Criar um programa que busque da memria os valores armazenados nas posies 1000h e 1001h,
some-os e, em seguida, armazene o resultado na posio de memria 1002h.
O primeiro programa em linguagem assembly.

19

P2: Criar um programa que busque da memria os valores armazenados nas posies 1000h e 1001h,
some-os e, em seguida, armazene o resultado na posio de memria 1002h. Repetir esta operao enquanto o resultado da soma no for zero.
P3: Criar um programa que faa piscar indefinidamente, a intervalos de 1 segundo, um led ligado porta de sada a partir do momento em que a chave ligada porta de entrada for levada a nvel alto.
Vamos aos fluxogramas:
Incio

Incio

Incio

Ler o valor da
posio 1000h

Ler o valor da
posio 1000h

Fazer sada = 0
(led apagado)

Ler o valor da
posio 1001h

Ler o valor da
posio 1001h

Ler
chave

Somar os dois
valores

Somar os dois
valores

Armazenar o
resultado na
posio 1002h

Armazenar o
resultado na
posio 1002h

Chave = 0
?

Fim
Resultado
0?

Fazer sada = 1
(led aceso)

N
Fim

Subrotina
de tempo =
1segundo

Fazer sada = 0
(led apagado)

Figura 2-1: Fluxogramas para a soluo dos problemas propostos P1, P2 e P3, respectivamente.
O programa P1 pode ser traduzido em um fluxograma linear, onde o processamento seguiu contnuo
sem desvios. J os programas P2 e P3 necessitaram de fluxogramas com desvios de processamento em funo das suas proposies que apresentavam condies. Outro ponto a salientar que o programa P3 apresenta um incio, mas no apresenta trmino (pois foi proposto desta forma), ou seja, um programa que entra
em uma condio de repeties infinitas (loop infinito).
Mas, como ou quando termina um programa em loop infinito? Termina quando o processador for desligado.

2.2 A configurao bsica do computador.


Na Figura 2-2 apresentamos o diagrama em blocos (simplificado) do hardware que iremos trabalhar. Na
Figura 2-3 apresentamos o diagrama eletrnico com o circuito completo.
Os principais componentes do circuito deste computador so:
Um microprocessador de 8 bits: Z80A-CPU, fabricado pela Zilog;
Lgica de decodificao formada por dois CIs decodificadores 74LS138;
2K bytes de memria EPROM, chip 2716, ocupando a faixa de endereos de 0000h a 07FFh;
2K bytes de memria RAM esttica, chip 6116, ocupando a faixa de endereos de 1000h a 17FFh;
2 portas paralelas de entrada, de 8 bits cada, chips 74LS244, ocupando os endereos de E/S 00h e
01h e
20

Captulo 2.

2 portas paralelas de sada, de 8 bits cada, chips 74LS374, ocupando os endereos de E/S 02h e
03h.

IOREQ\
RD\
WR\

Lgica de Seleo - 74LS138

MREQ\

A13...A11

Y0

Lgica de Seleo - 74LS138


A2...A0

Y2

Y0

Y1

Y2

Y3

A15
A0

A10...A0

Z80A
CPU

CE\

A10...A0

G\

CS\

EPROM
2716

RAM
6116

D7...D0

D7...D0

PA - Porta de
entrada A
8 bits

D0
D7

Buffer
74LS244

PB - Porta de
entrada B
8 bits

D7...D0

G\

CLK

Buffer
74LS244

8x FFD Q0
74LS374 Q7

D0
D7

D7...D0

CLK

8x FFD Q0
74LS374 Q7

PC - Porta de
sada C
8 bits

D7...D0

PD - Porta de
sada D
8 bits

D7...D0

D7

D0

Figura 2-2: Diagrama simplificado do hardware bsico.

MREQ\
IOREQ\
WR\
RD\

+5V
CI1
27
D1
LED

19
20
22
21

R3
330R

28
18
24
+5V
16
17
26
25
23
6

M1

A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15

MREQ
IORQ
WR
RD
REFSH
HALT
WAIT
INT
NMI
RESET

D0
D1
D2
D3
D4
D5
D6
D7

BUSRQ
BUSAK
CLK

30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5

A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15

14
15
12
8
7
9
10
13

D0
D1
D2
D3
D4
D5
D6
D7

8
7
6
5
4
3
2
1
23
22
19

CS1\
RD\
WR\

18
20
21

A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10

D0
D1
D2
D3
D4
D5
D6
D7

9
10
11
13
14
15
16
17

D0
D1
D2
D3
D4
D5
D6
D7

CS0\
RD\

18
20
21

A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10

O0
O1
O2
O3
O4
O5
O6
O7

9
10
11
13
14
15
16
17

D0
D1
D2
D3
D4
D5
D6
D7

CE
OE
VPP

1
2
3

A
B
C

+5V
12

13

10
11

CI11D
74LS02

6
4
5

A14
MREQ\

CI11C
74LS02

G1
G2A
G2B

+5V

C1
100nF
C2
100nF

Port 00h

C3
100nF
C4
100nF

D0
D1
D2
D3
D4
D5
D6
D7

18
16
14
12
9
7
5
3

RD\

1Y1
1Y2
1Y3
1Y4
2Y1
2Y2
2Y3
2Y4

8x buffer tri-state
2
1A1 4
1A2 6
1A3 8
1A4 11
2A1 13
2A2 15
2A3 17
2A4
1G
2G

74LS244

CI10B

IO-1\

Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7

15
14
13
12
11
10
9
7

CS0\
CS1\

1
19

CN3
C5
100nF

1
2
3
4
5
6
7
8

C6
100nF
C7
100nF
C8
100nF

Port 01h

C9
100nF
C10
100nF
CI8

D0
D1
D2
D3
D4
D5
D6
D7

3
4
7
8
13
14
17
18

IO-2\

WR\

CN1
Alimentao

1
11

D0
D1
D2
D3
D4
D5
D6
D7

8x F.F.D.
2
Q0 5
Q1 6
Q2 9
Q3 12
Q4 15
Q5 16
Q6 19
Q7

CN4
C11
100nF

1
2
3
4
5
6
7
8
Port 02h

OC
CLK
74LS374

CI11A

74LS02

74LS138

R1 220R

CI5

A0
A1
A2

1
2
3

+5V

A
B
C

+5V
D2
1N4148

1
2
3
4
5
6
7
8

74LS32

CI4

A11
A12
A13

1
19

CN2

2716 - EPROM 2Kx8

XT1 1,0 MHz

RD\

1G
2G

CI7

Z80-CPU

CLK

8x buffer tri-state
2
1A1 4
1A2 6
1A3 8
1A4 11
2A1 13
2A2 15
2A3 17
2A4

74LS244

CI10A

IO-0\

1Y1
1Y2
1Y3
1Y4
2Y1
2Y2
2Y3
2Y4

74LS32

CI3
8
7
6
5
4
3
2
1
23
22
19

18
16
14
12
9
7
5
3

CS
OE
WE
HM6116 - RAM 2Kx8

A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10

D0
D1
D2
D3
D4
D5
D6
D7

1
2

CI6
CI2

A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10

R2
2,2k

IOREQ\

6
4
5

G1
G2A
G2B
74LS138

Reset\

15
14
13
12
11
10
9
7

IO-0\
IO-1\
IO-2\
IO-3\

CI9
3
4
7
8
13
14
17
18

IO-3\

WR\

1
11

D0
D1
D2
D3
D4
D5
D6
D7

8x F.F.D.
2
Q0 5
Q1 6
Q2 9
Q3 12
Q4 15
Q5 16
Q6 19
Q7

OC
CLK

CN5
1
2
3
4
5
6
7
8
Port 03h

74LS374
CI11B
CH1
Reset

+
C13
10uF

Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7

D0
D1
D2
D3
D4
D5
D6
D7

74LS02
CEFET MG - DEII - Coordenao de Eletrnica

Disciplina: Sistemas Microprocessados I


Prof. Denny D. Collina
Title
Hardware bsico para o microprocessador Z80
Size
A4

Document Number
HMZ80

Date:

Friday, September 29, 2006

Rev
1
Sheet

of

Figura 2-3: Diagrama de um sistema bsico utilizando o microprocessador Z80.


Qual foi o critrio de escolha para a alocao de endereos para os blocos de memria RAM e ROM?
O primeiro critrio que no pode haver interseo nas faixas de endereos alocadas para a RAM e para a ROM. Portanto, se a faixa de endereos de 0000h a 03FFh foi escolhida para a ROM, nenhum destes endereos pode pertencer a faixa selecionada para a RAM.
O segundo critrio diz respeito escolha para os endereos alocados especificamente para a ROM.
essencial que o processador, aps o seu ligamento (reset) j tenha sua disposio o programa gravado, para
que possa ser lido e executado. Portanto, isto justifica o uso da memria ROM.

O primeiro programa em linguagem assembly.

21

Mas em qual a faixa de endereos foi mapeada a memria ROM? Para evitar este tipo de pergunta, todo
microprocessador projetado para buscar a primeira instruo a ser executada em um endereo pr-definido
(endereo de reset). O endereo pode variar entre os vrios Ps disponveis comercialmente, mas sempre informado na folha de dados do chip. Uma boa parte dos Ps utiliza o endereo 0000h (incio do mapa de memria). Outros utilizam o endereo FFF0h (final do mapa de memria).
H algum critrio definir a alocao da memria RAM? J para a memria RAM, vale apenas o primeiro
critrio apresentado acima: o da no superposio. Portanto, uma vez escolhida a alocao da memria ROM,
a memria RAM poder ser alocada em qualquer faixa dos endereos restantes.

2.3 Editando o cdigo fonte.


Como estamos acompanhando o fluxograma da Figura 1-16,
agora iremos trabalhar na Etapa 1.

Etapa 1
Programa: editor de texto
Funo: edio do arquivo fonte

A edio do programa (que tambm chamado de cdigo


Resultado: programa fonte ".asm"
fonte ou arquivo fonte) deve ser feita em editores de texto do tipo
ASCII puro, ou seja, so aqueles editores que geram arquivos
com apenas o cdigo ASCII e, portanto, no oferecem nenhum tipo de formatao de caracteres: tamanho, negrito, itlico, etc. Isto se faz necessrio, pois o arquivo do cdigo fonte ser trabalhado pelo programa tradutor: o assembler. Este, normalmente, no est preparado para processar arquivos mistos: cdigo ASCII e cdigos binrios. So exemplos de editores ASCII: o bloco de notas (do Windows) e todos os editores para programao.
Nas nossas atividades iremos utilizar o editor TextPad, que um aplicativo shareware, e foi desenvolvido
para programadores, que tem as seguintes caractersticas a destacar:
Permite a edio de vrios arquivos simultaneamente;
Permite sua personalizao para trabalhar com vrias linguagens de programao;
Apresente a funo realce de palavras chaves (syntax highlighting), que permite que instrues, operandos, constantes numricas, comentrios, etc., sejam apresentados com cores diferentes, facilitando a edio;
Permite ser configurado para executar outros aplicativos, como assembler, linker, simulador, etc., e
pode efetuar a captura do contedo exibido na tela por estes aplicativos. Isto muito til ao se trabalhar com o assembler que, na ocorrncia de erros durante o processo de traduo do cdigo fonte,
apresenta a lista de todos;
Pode ser baixado gratuitamente na internet (www.textpad.com), e como pode ser observado na figura abaixo, possui verso em portugus brasileiro.

2.3.1 Formatao.
A edio do cdigo fonte em assembly deve obedecer a algumas regras bsicas. Vejamos:
Digita-se apenas uma instruo em cada linha;
A estrutura bsica de uma linha de assembly constituda por quatro campos distintos: Labels, Mnemnicos, Operandos e Comentrios. Veja a Figura 2-4. A separao dos campos feita por pelo menos um caractere de espao ou de tabulao (TAB).
Labels
1

Mnemnicos
11 12

Inicio:

ld

Operandos

Comentrios

18

35

A,80h

;inicializa o acumulador

Figura 2-4: Estrutura bsica de uma linha da linguagem assembly.


O caractere pono-e-vrgula (;) tem a funo de marcador de comentrio.
Vamos, ento, digitar o programa P1 em linguagem assembly para o microprocessador Z80 e salvar o
arquivo.

22

Captulo 2.

Figura 2-5: Primeira verso do cdigo fonte do programa P1 digitado.

ATENO:

Lembre-se que este arquivo ser lido pelo assembler que um aplicativo
MS-DOS. Portanto, ao dar nome ao arquivo que ser salvo lembre-se de
utilizar a formatao 8.3.Oito caracteres para o nome do arquivo e trs
caracteres para a extenso que dever ser, asm. No utilize espaos
ou caracteres acentuados.

Aps salvar o arquivo, podemos prosseguir para a Etapa 2.

2.4 Executando o assembler.


Nesta etapa utilizaremos o aplicativo assembler, que efetuar
a traduo linha-a-linha do cdigo fonte, escrito em linguagem assembly, para a linguagem de mquina (cdigos binrios, que por facilidade so escritos em hexadecimal).

Etapa 2
Programa: assembler
Funo: traduo para cdigo objeto
Resultado: arquivo objeto ".obj"

Nesta etapa e nas seguintes, estaremos utilizando o pacote:


assembler, linker e simulador da Avocet Systems Inc (AVSZ80). Este pacote foi desenvolvido para ser executado no sistema operacional MS-DOS. Em funo disto, a execuo dos aplicativos deve ser feita em ambiente adequado, que pode ser atravs da digitao da linha de comando diretamente no Prompt do DOS ou atravs de um aplicativo Windows que permita chamar um aplicativo DOS. Neste texto, daremos enfoque ao segundo mtodo.
Para se executar o aplicativo assembler: deve-se utilizar uma linha de comando com o seguinte formato:
avmacz80 <nome_arquivo>.asm ap pw=200.
Isto pode ser feito atravs da ferramenta
(Assembla z80) do editor. Observe, na Figura 2-6, o
resultado obtido. O editor apresenta uma nova janela de chamada Resultados de Comando que exibe o
contedo enviado pelo assembler para a tela.
O erro encontrado pelo assembler (veja a seta em destaque na Figura 2-6) foi intencional, pois todo cdigo fonte em assembly deve ter como ltima linha a declarao (ou diretiva) end, que no foi digitada na primeira verso de programa. Observe na Figura 2-7 aps a digitao da diretiva, que sua cor6 diferente da cor
de uma instruo, pois apesar de escrita no mesmo alinhamento das instrues, a diretiva tem funo distinta,
que ser apresentada mais frente.

Caso esteja lendo este texto em verso preto e branco, poder ser observada a variao nos tons de cinza.

O primeiro programa em linguagem assembly.

23

Figura 2-6: Resultado da execuo do assembler para a primeira verso do programa P1.

Figura 2-7: Verso corrigida do programa P1.


Obtemos um programa que no apresenta erros de sintaxe. O assembler apenas efetua a verificao da
escrita das instrues, no h como efetuar a verificao da estrutura lgica de um programa, ou seja, em uma
situao limite, o programa pode estar todo errado, mas estar sintaticamente correto.
Ao analisar em mais detalhes a Figura 2-8, devemos destacar os dois arquivos gerados pelo assembler:

Figura 2-8: Resultado da execuo do assembler para a verso corrigida do programa P1.
24

Captulo 2.

P1CAP1.obj: o arquivo contendo o cdigo objeto, ou seja, as instrues j traduzidas para linguagem
de mquina (cdigos hexadecimais). Caso tentemos abrir este arquivo, o editor far a apresentao de seu
contedo em um formato tpico para arquivos binrios: contedo em hexadecimal na parte esquerda da janela
e o correspondente em cdigo ASCII na parte direita (veja a Figura 2-10). Caso insista em abrir o arquivo como
um arquivo texto, no conseguiremos visualizar quase nada (veja a Figura 2-9). O programador poder visualizar adequadamente o resultado da traduo executada pelo assembler atravs do arquivo .prn. O arquivo
objeto ser utilizado pelo programa linker, em seguida. Apresentaremos mais detalhes em breve.

Figura 2-9: Visualizao do arquivo objeto P1CAP1.obj em formato texto.

Figura 2-10: Visualizao do arquivo objeto P1CAP1.obj em formato binrio.


P1CAP.prn: a verso em formato texto, e portanto legvel, do cdigo objeto. chamado de arquivo
de listagem. Neste arquivo podemos observar o resultado, linha-a-linha da traduo executada pelo assembler.
Como este um arquivo que normalmente consultado pelo programador, adicionamos mais uma personalizao ao editor, que a ferramenta
(Abre PRN).

Figura 2-11: Visualizao do arquivo de listagem P1CAP1.prn.

O primeiro programa em linguagem assembly.

25

2.5 Executando o linker.


Dando prosseguimento criao do nosso primeiro prograEtapa 3
ma em assembly, agora utilizaremos o aplicativo linker. Este apliPrograma: linker
cativo tem a funo de efetuar a converso de um ou mais arquiFuno: montagem e gerao do cdigo executvel
vos objeto em um arquivo executvel, cuja extenso .hex. Este
Resultado: arquivo executvel ".hex"
ltimo o arquivo que est pronto para ser gravado em um chip de
memria e em seguida utilizado no processo de simulao ou mesmo para a execuo real pelo microprocessador.
Para se executar o aplicativo linker deve-se enviar uma linha de comando com o seguinte formato:
avlink <nome_arquivo>.hex=<nome_arquivo>.obj -sy sy=<nome_arquivo>.sym -sp
A execuo do linker obtida pela mesma ferramenta do editor que utilizamos para executar o assembler
(Assembla z80). O que acontece que se a execuo do assembler no detectar nenhum erro, automaticamente faz-se a chamada para a execuo do linker. O linker s exibe alguma mensagem se ocorrer erro,
em caso contrrio, o resultado similar ao observado na Figura 2-12. Assumindo, ento, o sucesso na execuo do linker, teremos como resultado os seguintes arquivos:

Figura 2-12: Resultado da execuo do linker.


P1CAP1.hex: o arquivo contendo o cdigo executvel. A extenso .hex indicadora de que este
arquivo apresenta formato padronizado (conhecido como Hex-Intel). Outra curiosidade, que apesar de conter
o cdigo executvel, um arquivo texto e, portanto, pode ser facilmente aberto e lido.

Figura 2-13: Visualizao do contedo do arquivo P1CAP1.hex.


OBS.: A descrio que apresentada a seguir s ser compreendida mais frente. Portanto se esta a
sua primeira leitura do texto, sugerimos que a salte.

26

Captulo 2.

P1CAP1.sym: o arquivo de smbolos, ele contm todos a relao de todos os labels (ou smbolos) e o
valor numrico correspondente de cada. Este arquivo utilizado no simulador para permitir a exibio dos labels na rea de cdigo.

2.6 Executando o simulador.


Nesta etapa poderemos, finalmente, efetuar a verificao do Etapa 4
programa (depurao). A etapa de simulao no obrigatria,
Programa: simulador
Funo: depurao do programa
mas uma ferramenta extremamente til no processo de depuraResultado: correo de alguns erros
o. Enquanto na execuo real as instrues so processadas rapidamente, na simulao h a opo de execuo passo-a-passo,
que permite fazer uma anlise detalhada da influncia de cada instruo no contexto do processador.
Para se executar o aplicativo simulador deve-se enviar uma linha de comando com o seguinte formato:
avsimz80 -c1 a sma0 ffffh la<nome_arquivo>.hex ls<nome_arquivo>.sym
Para executar o simulador de dentro do editor basta utilizar a ferramenta

(Simula z80), mas aten-

o:

ATENO:
Para a correta execuo do simulador, necessrio que a janela corrente
do editor seja a do arquivo fonte (.asm). Se a janela corrente for Resultados de Comando, a execuo do simulador no ser bem sucedida.

Figura 2-14: A janela corrente a do arquivo fonte.


Antes de partir para a simulao do programa que criamos, essencial descrevermos brevemente a rea de trabalho do simulador e algumas de suas principais funes. Maiores detalhes podem ser obtidos no
manual do software.

nu.

A tela do simulador pode ser vista na Figura 2-15. Ela divida em duas reas principais: screen e meS possvel atuar em uma rea de cada vez. Atravs da tecla D pode-se alternar entre as duas -

reas.

Screen:

Cdigo,

Registradores,

Status do simulador,

Pinos de interrupo,

Portas paralelas

Dados.

Nesta rea pode-se observar um fragmento com vrias linhas de programa e o estado dos principais registradores do processador, assim como duas reas de dados. Enquanto a rea de programa no pode ser alterada, as reas de registradores e de dados podem ser alteradas pelo usurio.

Menu:

Menu de comandos.

Atuando nesta rea, o usurio ter a disposio um conjunto bem variado de comandos que atende dos
usurios iniciantes aos mais avanados.

O primeiro programa em linguagem assembly.

27

A seguir descreveremos cada uma delas.


LABEL
OPERATION
Z80
AVSIM Z80 Simulator/Debugger
V1.6
0000H
LD
A,(1000H)
CPU REGISTERS
FLAGS
SCL SPD DSP SKP CURSOR
0003H
LD
B,A
C Accumulator
Z PV S N H OFF HI ON OFF MENU
0004H
LD
A,(1001H)
0 00000000:00:_ 0 0 0 0 0
Cycles:
0
0007H
ADD
A,B
addr
data
ALT REGISTERS
0008H
LD
(1002H),A
PC:0000 3A 00 10 47 3A 01 10 80
AF:0000 DE:0000
000BH
HALT
SP:0000 3A 00 10 47 3A 01 10 80
BC:0000 HL:0000
000CH
NOP
32 02 10 76 00 00 00 00
IV:0000
000DH
NOP
BC:0000 3A 00 10 47 3A 01 10 80 :_ G:
000EH
NOP
DE:0000 3A 00 10 47 3A 01 10 80 :_ G: PINS
000FH
NOP
HL:0000 3A 00 10 47 3A 01 10 80 :_ G:
Int 1
0010H
NOP
IX:0000 3A 00 10 47 3A 01 10 80 :_ G:
NMI 1
0011H
NOP
IY:0000 3A 00 10 47 3A 01 10 80 :_ G:
IFF1 0
0012H
NOP
Memory Space
0013H
NOP
0000 3A 00 10 47 3A 01 10 80 :_ G: I/O Address
0014H
NOP
0008 32 02 10 76 00 00 00 00 2 v____
0015H
NOP
0010 00 00 00 00 00 00 00 00 ________ FF:_:11111111
0016H
NOP
0018 00 00 00 00 00 00 00 00 ________
0017H
NOP
Memory Space
FF:_:11111111
0018H
NOP
0020 00 00 00 00 00 00 00 00 ________
0019H
NOP
0028 00 00 00 00 00 00 00 00 ________ FF:_:11111111
001AH
NOP
0030 00 00 00 00 00 00 00 00 ________
001BH
NOP
0038 00 00 00 00 00 00 00 00 ________ FF:_:11111111
>Select Command - or use arrow keys
Dump Expression commandFile Help IO Load
--space-- ESC to screen

Figura 2-15: Tela do simulador7.

2.6.1 rea de Cdigo.


Nela so listadas um fragmento de 22 linhas de programa (veja a Figura 2-16.). A linha que apresentada em destaque corresponde instruo apontada pelo registrador contador de programa (PC) e que ainda vai ser executada. Na figura, o endereo 0000h corresponde posio de memria a partir do qual esta
instruo foi armazenada. Observe que a instruo seguinte foi armazenada a partir do endereo 0003h, pois
a instruo anterior LD A,(1000h) ocupou as posies de memria 0000h, 0001h e 0002h.

LABEL
0000H
0003H
0004H
0007H
0008H
000BH

OPERATION
LD
A,(1000H)
LD
B,A
LD
A,(1001H)
ADD
A,B
LD
(1002H),A
HALT

Figura 2-16: Fragmento da tela do simulador destacando a rea de cdigo.

2.6.2 rea dos Registradores.


Nela so apresentados os dois conjuntos de registradores do microprocessador z80 (veja a Figura
2-17). Vale a pena rever a seo 1.2.1 - O microprocessador. na pgina 7.
O conjunto principal: formado pelos registradores: acumulador (A), flags (F), PC, SP, B, C, D, E, H, L,
IX e IY;
O conjunto alternativo: formado pelos registradores A, F, B, C, D, E, H e L e pelo registrador IV
(interrupt vector).

A tela real do simulador apresenta um arranjo de cores, que quando impressas em tons de cinza, resultariam em uma figura com fundo
preto e letras brancas. Geramos, ento uma verso inversa, de fundo branco e letras pretas.

28

Captulo 2.

CPU REGISTERS
FLAGS
C Accumulator
Z PV S N H
0 00000000:00:_ 0 0 0 0 0
addr
data
PC:0000 3A 00 10 47 3A 01 10
SP:0006 3A 00 10 47 3A 01 10
32 02 10 76 00 00 00
BC:0000 3A 00 10 47 3A 01 10
DE:0000 3A 00 10 47 3A 01 10
HL:0000 3A 00 10 47 3A 01 10
IX:0000 3A 00 10 47 3A 01 10
IY:0002 3A 00 10 47 3A 01 10

80
80
00
80
80
80
80
80

ALT REGISTERS
AF:0000 DE:0000
BC:0000 HL:0000
IV:0000
:_ G:
:_ G:
:_ G:
:_ G:
: G:

Figura 2-17: Fragmento da tela do simulador destacando a rea dos registradores.

ATENO:
O simulador inicializa todos os registradores com o contedo 00h. Entretanto, em um microprocessador real apenas o registrador PC tem contedo conhecido aps a ocorrncia da inicializao (ou reset).

- O registrador acumulador (ou registrador A) apresentado em trs formatos diferentes: binrio, hexadecimal e ASCII, separados por dois pontos :.
- O registrador de flags (ou registrador F) apresentado de forma diferente dos demais, pois cada um
de seus bits tem uma designao em particular: Z, PV, S, etc.
- Os demais registradores do conjunto principal: PC, SP, etc. recebem um tratamento especial, alm
da apresentao de seus contedos, pode-se observar uma lista com o contedo de 8 posies consecutivas
de memria logo aps as setas duplas (Para o registrador SP so listados 16 valores). O valor que aparece
em destaque corresponde ao contedo da posio de memria apontada pelo registrador em questo. Em outras palavras, estes registradores podem ser utilizados como apontadores para memria.
- Os caracteres apresentados neste campo so os correspondentes em cdigo ASCII dos valores apresentados sua esquerda (campo ). Observando a Figura 2-17, podemos notar que a letra G tem como
cdigo ASCII correspondente o valor 47h.
- Os contedos do conjunto alternativo de registradores podem ser observados neste campo.

2.6.3 rea de Status do simulador.


Nesta rea so apresentadas as configuraes atuais para alguns ajustes que podem ser feitos no
simulador:
SCL SPD DSP SKP CURSOR
OFF HI ON OFF MENU
Cycles:
0

Figura 2-18: Fragmento da rea de status do simulador.


Scroll Mode - SCL: Modo de rolagem de janela. Quando ativo (on) faz com que a movimentao do cursor (atravs das teclas R T U Y) esteja limitada a apenas uma das reas (registradores, dados, etc.). Quando inativo (off), o cursor pode ser deslocado para qualquer rea da tela (exceto a rea de cdigo). Alterao
desta configurao pode ser feita atravs da teclado digitando E O.
Simulation Speed - SPD: Velocidade da simulao. Utilizando a tecla %, pode alterar a velocidade da
simulao entre HI, MID E LOW. Para a opo LOW, o simulador, na verdade executa rapidamente uma seqncia de 64 instrues, e ento faz uma pausa. Esta situao se repete at que a tecla pressionada seja
D.

O primeiro programa em linguagem assembly.

29

Display Update - DSP: Atualizao da tela durante a simulao. Utilizando a tecla ^, pode-se alternar
entre exibir na tela a atualizao das alteraes resultantes da execuo de cada instruo, o que deixa a execuo da simulao mais lenta, ou no.
Subroutine Skip - SKP: Exibir a execuo de um subrotina. Quanto ativo (on) faz com que o simulador
execute o processamento de uma subrotina, mas no o exiba na tela. Quanto inativo (off) o processamento da
subrotina apresentado. Alterao desta configurao pode ser feita atravs da teclado digitando *.
Cursor Mode - CURSOR: Modo de deslocamento do cursor. Em alguns campos, o mesmo valor exibido em mais de um formato, como o caso da exibio do contedo do acumulador: binrio, hexadecimal e
ASCII. Nestes campos possvel fazer o cursor saltar diretamente para um dos modos de exibio pressionando a tecla &.
Cycles: Exibio do nmero de estados executados pelo processador (Z80, simulado). A contagem
feita em decimal e ao ultrapassar 65535 o contador zerado, reiniciando a contagem. A qualquer momento o
usurio pode zerar ou at mesmo alterar o valor de contagem. Vale lembrar que para o microprocessador z80,
cada estado corresponde a um pulso de clock.

2.6.4 Pinos de interrupo.


Nesta rea pode-se efetuar as solicitaes de interrupo INT e NMI . Ainda exibido o estado do
bit sinalizador de interrupo FF1.

2.6.5 Portas Paralelas.


Nesta rea so apresentadas quatro portas genricas. Cada uma delas pode ser configurada para
funcionar como porta de entrada ou porta de sada. Esta configurao no pode ser feita no simulador, ela deve ser feita pelo programa a ser simulado (consulte a diretivas de definio de segmentos, mais frente).
I/O Address
FF:_:11111111

PINS
Int 1
NMI 1
IFF1 0

FF:_:11111111
FF:_:11111111
FF:_:11111111

Figura 2-19: Fragmento da rea dos pinos de interrupo do simulador.

Figura 2-20: Fragmento da rea das portas paralelas do simulador.

2.6.6 rea de Dados.


Esta rea dividida em duas janelas Memory Space, que so independentes uma da outra. Em cada uma delas pode-se observar 32 bytes consecutivos de qualquer rea do mapa de memria (memory dump).
Seja o segmento de dados ou o segmento de programa. Contudo, so mais utilizadas para monitorar dados,
uma vez que no campo dos registradores, j so exibidos 8 bytes consecutivos do segmento de programa apontados pelo registrador PC (program counter), veja a Figura 2-17. Para selecionar qual a regio de memria
que deseja observar nestas janelas Memory Space, consulte a descrio do comando DUMP, mais frente.
Memory Space
0000 3A 00 10
0008 32 02 10
0010 00 00 00
0018 00 00 00
Memory Space
0020 00 00 00
0028 00 00 00
0030 00 00 00
0038 00 00 00

47
76
00
00

3A
00
00
00

01
00
00
00

10
00
00
00

80
00
00
00

:_ G:
2 v____
________
________

00
00
00
00

00
00
00
00

00
00
00
00

00
00
00
00

00
00
00
00

________
________
________
________

Figura 2-21: Fragmento da rea de dados do simulador.

30

Captulo 2.

2.6.7 Menu de Comandos.


Ocupa apenas duas ltimas linhas na parte inferior da tela. Na ltima linha so apresentados os comandos que podem ser selecionados atravs das teclas R T U Y. O simulador dispe de 14 comandos que
so exibidos em dois grupos devido falta de espao na linha:
>Select Command - or use arrow keys
Dump Expression commandFile Help

IO

>Clear, Fill, Move, Search Memory


Memory Patch Quit Reset Set setUp

Load

View

--space--

ESC to screen

eXecute --space--

ESC to screen

Figura 2-22: Comandos disponveis no simulador.

DICAS:
Pode-se utilizar a letra maiscula de cada comando (que em alguns casos no a primeira) como atalho para o mesmo.
Quando selecionar um comando e desistir de execut-lo ou caso tenha
selecionado um comando por engano, basta digitar E c para retornar
para o menu principal.

Apresentaremos aqui, a descrio de apenas alguns comandos, para os demais sugerimos consultar o
manual do software.

2.6.7.1 Dump.
Atalho d.
Comando que permite ajustar o endereo inicial de exibio das duas janelas Memory Space: superior
(1 ou Upper) e inferior (2 ou Lower). Aps a seleo do comando e da janela, so apresentadas duas opes:
Absolute: permite ajustar o endereo inicial a partir de um valor numrico. Exemplo 1000h. Na grande
maioria das situaes utilizaremos esta opo.
Indirect: vincula endereo inicial ao contedo de um dos registradores ponteiros, ou seja, utiliza endereamento indireto.

DICA:

Um atalho para ajustar, por exemplo, a janela superior (ou janela 1) para
exibir os contedos a partir do endereo 1000h, pode-se digitar a seguinte seqncia de teclas:
d 1 a 1 0 0 0 h Q.

2.6.7.2 Help Simulation.


Atalho h s.
Comando que apresenta telas com a descrio breve das teclas de atalho e de algumas configuraes
que podem ser feitas no simulador. Uma das telas a que apresenta a ajuda para a simulao, nela so apresentadas as teclas de funo que so utilizadas para controlar a simulao:

O primeiro programa em linguagem assembly.

31

Figura 2-23: Tela obtida com o comando Help Simulation.

! : Execuo contnua do programa. A execuo s cancelada se a tecla for pressionada novamente,


ou antes de executar uma instruo marcada como ponto de parada (break point).

) : Execuo passo a passo. Quando a tecla pressionada a simulao executa a instruo apontada
pelo registrador PC a qual apresentada em destaque na rea de cdigo.
( : Desfazer. Permite que a simulao retorne o estado do processador para antes da execuo da ltima instruo. A configurao inicial do simulador permite que se retorne at 20 instrues. Este valor pode
ser alterado atravs do comando setUp Undo (atalho u u) para algo prximo de 1000 instrues, se necessrio.
@ $ # : Ativao de break points. Utilizando as teclas @ $ move-se um cursor em formato triangular f para cima e para baixo, na rea de cdigo. Quando ele estiver posicionado em frente instruo que
se deseja marcar como ponto de parada basta pressionar a tecla $, que a instruo ser marcada e apresentar uma pequena seta .
% : Velocidade da simulao. Utilizando a tecla %, pode alterar a velocidade da simulao entre HI,
MID E LOW. Para a opo LOW, o simulador, na verdade executa rapidamente uma seqncia de 64 instrues, e ento faz uma pausa. Esta situao se repete at que a tecla pressionada seja D.

2.6.7.3 Patch Code.


Atalho p p.
Este comando permite efetuar remendos (patch code) na rea de cdigo, ou seja, possvel trocar a
instruo que est sendo apontada pelo registrador PC. Aps a digitao da instruo desejada, o registrador
PC incrementado e pode-se alterar a instruo seguinte. Quando o usurio j no desejar efetuar mais alteraes deve pressionar E c.
>Peephole Cross-Assembler
PATCH: Patch code Open output file

Close file

ESC to screen

>Enter mnemonic: ld a,(1500h)


PATCH Code at PC

Figura 2-24: Comando Patch Code.


As opes Open output file e Close file permitem ao simulador abrir e fechar um arquivo (cujo nome
tambm deve ser especificado pelo usurio) que conter a anotao de todas as instrues que foram alteradas.

32

Captulo 2.

2.6.7.4 Quit Exit.


Atalho q e.
Este o comando para efetuar o trmino da execuo do simulador.
>Exit/Shell to DOS
QUIT: Exit Shell

ESC to screen

Figura 2-25: Comando Quit Exit.


A opo Shell permite suspender temporariamente a execuo do simulador para abrir o Prompt do
DOS. Depois de terminado o trabalho no Prompt do DOS deve-se digitar o comando exit para permitir o retorno ao simulador.

2.6.7.5 Reset.
Reset CPU - atalho r c.
Reset cYcles - atalho r y.
>Perform CPU Reset Operation
RESET: Cpu Disptrace cYcles

--space--

ESC to screen

Figura 2-26: Comando Reset.


O comando Reset CPU ajusta o contedo registrador PC para 0000h e alm de suspender a condio
de congelamento do processador gerada pela execuo da instruo HALT.
O comando Reset cYcles zera o contador de estados da rea de Status do simulador. O comando Reset Disptrace no ser abordado.

2.7 Simulando o programa.


Agora que j conhecemos os principais recursos do simulador podemos, ento, simular o programa que
criamos. Como estamos trabalhando em um ambiente integrado de desenvolvimento (IDE - integrated development environment), ao clicar na ferramenta
(Simula z80) o simulador executado e as suas configuraes bsicas j so definidas. Portanto teremos um computador simulado pronto para ser operado assim que
a tela do simulador for apresentada, como pode ser visto na Figura 2-15.
Como estamos aprendendo a programar em assembly, na grande maioria das vezes, utilizaremos o simulador no modo passo-a-passo, a execuo corrente ficar restrita a poucas situaes.
Apesar de, no item anterior, j termos apresentado a descrio das teclas de funo e dos comandos,
vejamos um resumo dos mais utilizados:

)
(
d 1 a ou d 2 a
rc
hs
qe

Single step - simulao de uma nica instruo.


Undo - desfaz a simulao de uma instruo.
Dump absolute - ajusta o endereo inicial de memria para a
visualizao de uma das janelas da rea de dados (memory
space).
Reset CPU - reinicializa o processador.
Help Simulation - tela de ajuda das funes de simulao.
Quit exit - termina a execuo do simulador.

O primeiro programa em linguagem assembly.

33

CAPTULO 3.
3. A LINGUAGEM ASSEMBLY PARA O Z80.

[10]

Os microprocessadores possuem caractersticas prprias a cada um deles, com diferente estrutura externa, diferente conjunto de registradores e tambm, conjunto de instrues diferente de um para o outro. Desta forma, a linguagem assembly uma linguagem caracterstica de cada microprocessador, no sendo possvel, na maioria dos casos, um programa que foi originalmente escrito em linguagem assembly para o P Z80,
ser processado por um P 6800 (Motorola), por exemplo. Portanto, a linguagem assembly uma linguagem
especfica e diferente para cada microprocessador. Para um mesmo microprocessador pode, tambm, existir
variaes das caractersticas da linguagem assembly, podendo ser estabelecidos pontos diferentes, em funo
de quem criou os pacotes assemblers. Assim no h uma linguagem universal, nem para um mesmo P. Entretanto a estrutura bsica do assembly a mesma. Quer dizer que, apesar de todas estas diferenas, quando
se aprende o assembly do P Z80, se aprende a essncia da linguagem para qualquer outro microprocessador.
A linguagem assembly, de um modo geral, no apresenta muitas regras para a elaborao de um programa. O programador tem mais liberdade para utilizar a sua capacidade criativa, podemos destacar isto como
ponto positivo, por outro lado, esta mesma liberdade pode lev-lo a situaes de difcil soluo se o mesmo
no tiver um mnimo de organizao na tarefa de construo de seu programa. O conjunto de procedimentos
que no so exigncias da linguagem, mas que buscam organizar e facilitar a criao de cdigo, chamamos de
estilo de programao. Cada programador adota um estilo diferente e, portanto, o que apresentaremos a seguir
um dentre muitos. A inteno utilizar um conjunto bsico de ferramentas da linguagem que nos levar a
uma programao organizada, de fcil leitura e que auxilie, tambm, na manuteno do cdigo, caso seja necessrio, no futuro.
A estrutura bsica de uma linha de assembly constituda por quatro campos distintos: Labels, Mnemnicos, Operandos e Comentrios. Veja a Figura 3-1.
Labels

Mnemnicos

11 12

Inicio:

ld

Operandos

Comentrios

18

35

A,80h

;inicializa o acumulador

Figura 3-1: Estrutura bsica de uma linha da linguagem assembly.

ATENO:
Em todos os campos acima no h a distino entre letras maisculas ou
minsculas para o pacote assembler que utilizamos.

3.1 Labels.
O label um rtulo que se d a uma constante ou a um endereo. O primeiro caractere do label deve ser
um caractere alfabtico ou o travesso C. Os demais caracteres podem ser letras, nmeros ou o travesso.
O comprimento dos labels pode variar em funo de cada pacote assembler. Em geral de 6 a 8 caracteres
recomendvel.
So exemplos de labels vlidos:
_ABC

__XYZ

A123

_456_

AB1CD_

So exemplos de labels invlidos:


123

1+2

_(ABC)

1A*2

Os labels que indicam endereo devem ser seguidos do caractere sufixo dois pontos :. Eles podem
ser utilizados para se referir a um endereo sem o seu prvio conhecimento.
J os rtulos que indicam constantes no devem ter caractere de sufixo e o seu valor o valor da constante que ele representa. Para maiores detalhes veja o item 3.5 pseudo-instruo EQU.
A linguagem assembly para o Z80.

35

3.2 Mnemnicos ou cdigos de operao.


O cdigo de operao o campo da linha que especifica qual a tarefa que deve ser realizada pela
CPU. Sua apresentao feita atravs de 2 a 4 caracteres que lembram a ao a ser executada (mnemnicos). Por exemplo:
jmp

(jump) = saltar

mov

(move) = mover

hlt

(halt)

= parar

3.3 Operandos.
o campo onde se apresentam as informaes necessrias para que a instruo possa ser executada.
As instrues podem demandar um, dois, ou mesmo nenhum operando. Os operandos podem conter:
Um endereo de uma posio de memria.

Ex.: LD A,(2000h)

A especificao de registradores do P.

Ex.: LD A,B

A especificao de um par de registradores do P.

Ex.: LD A,(BC)

Uma constante numrica (dado imediato) de 8 ou 16 bits.

Ex.: LD A,00h

Um label.

Ex.: JP INICIO

LD HL,1234h

3.3.1 Constantes numricas.


As constantes podem ser apresentadas em vrias bases numricas, e como regra bsica nenhuma constante pode ter seu dgito mais significativo com dgitos diferentes da faixa de 0 a 9. Isto nos leva a acrescentar mais um zero para os valores hexadecimais que se iniciam com letras. Veja como apresentar valores em
vrias bases numricas.
Decimal - sem sufixos:

Ex.: LD B,100

LD C,255

Binria - sufixos B ou b:

Ex.: LD A,11010011b

LD B,10000110B

Octal - sufixos Q ou q:

Ex.: LD D,377q

LD E,123Q

Ex.: LD A,12h
LD BC,0CDEFH

LD DE,1FFFh

Hexadecimal - sufixos h ou H:

3.3.2 Constantes de Caracteres.


possvel, tambm, apresentar valores constantes baseados no cdigo ASCII (consulte a tabela ASCII no
Apndice A. ), bastando para tal apresentar o caractere correspondente entre aspas simples ( ). Caso queira
apresentar uma constante correspondente a mais de letra, como uma palavra ou mesmo uma frase, basta coloc-la entre aspas ( ).
Ex.: LD L,@
LD HL,KY

equivalente a

LD L,40h

equivalente a

LD HL,4B59h

DB "Jose Silva" equivalente a

DB 4Ah,6Fh,73h,65h,20h,53h,69h,6Ch,76h,61h

3.3.3 Operaes com Constantes.


Temos a possibilidade, ainda, de efetuar operaes aritmticas ou lgicas entre constantes, como apresentado a seguir:

Sugere-se utilizar preferencialmente o sufixo h minsculo, para evitar confuses com o registrador H do P.

36

Captulo 3.

Operaes algbricas: + - / *
Operaes lgicas: and, or, xor, not.

Ex.: LD A,125+4
Ex.: LD A,81h and 08h

LD A,0FFh/1Bh
LD A,not 0FFh

3.4 Comentrios.
O campo dos comentrios possui formato livre e as nicas restries so que: o incio do campo deve ter
como primeiro caractere o ponto-e-vrgula (;) e que o seu contedo deve ser de caracteres ASCII apenas. O
campo dos comentrios termina com o final da linha. Caso queira apresentar duas linhas seguidas de comentrio, ser necessrio utilizar o ponto-e-vrgula novamente.

IMPORTANTE:
O programa assembler que utilizamos, no aceita caracteres acentuados
ou caracteres de controle em qualquer campo de uma linha, incluindo-se
a o campo dos comentrios. Esta ressalva inclui tambm a cedilha ().
Portanto, o arquivo fonte em linguagem assembly dever ser criado em
editores ASCII, tais como o EDIT ou Bloco de Notas.

3.5 Pseudo-instrues.
Alm das instrues, que sero convertidas para cdigo de mquina, um programa fonte em assembly
possui instrues especiais que chamaremos de pseudo-instrues ou diretivas que so usadas para a estruturao do programa. Estas instrues no so traduzidas para cdigo de mquina, por no pertencerem ao conjunto de instrues do microprocessador. Elas tm funes especiais no programa como definir smbolos, estabelecer endereo inicial do programa na memria, etc., no sendo, portanto, processadas.
Apesar das pseudo-instrues no serem convertidas em cdigo de mquina o seu posicionamento em
uma linha de assembly deve ser o mesmo que os mnemnicos.
As pseudo-instrues que mais utilizaremos so: END, DEFSEG, SEG, ORG, EQU, DB, DW e DS. Caso deseje conhecer mais pseudo-instrues consulte o manual do pacote assembler.
Vejamos cada uma delas, apresentando sua sintaxe e descrio:

[Label:]9 END
Pseudo-instruo que indica o final da listagem do cdigo fonte. O assembler desconhecer quaisquer
outras linhas aps esta. Dentre as pseudo-instrues listadas, esta a nica que no deve faltar em
qualquer arquivo fonte de assembly. Em caso contrrio, o montador no ter como identificar com segurana o trmino da listagem e poder apresentar dois tipos de mensagens de erro, como os exemplos apresentados abaixo:
List file write error.
teste.asm Line nn - ERROR 20: END statement missing - one has been assumed

DEFSEG nome,atributo
Mnemnico para as palavras define segment;
Esta pseudo-instruo cria um novo segmento de memria cujo nome pode ser livremente especificado
pelo programador. O novo segmento pode, tambm, receber atributos como absolute. Veja um
exemplo:
Labels
1

Mnemnicos
11 12

DEFSEG

Operandos

Comentrios

18

35

codigo,absolute

;cria novo seg. de memria

A colocao dos colchetes indica que a presena do Label facultativa.

A linguagem assembly para o Z80.

37

Figura 3-2: Exemplo para a pseudo-instruo DEFSEG.

SEG nome
Mnemnico para a palavra segment ;
A diretiva informa ao programa montador que as linhas que a sucedero iro ser traduzidas dentro do
segmento especificado pelo nome. Veja um exemplo:
Labels
1

Mnemnicos
11 12

Seg

Operandos

Comentrios

18

35

cdigo
Figura 3-3: Exemplo para a pseudo-instruo SEG.

[Label:] ORG endereo


Mnemnico para a palavra origin ;
esta pseudo-instruo indica o endereo da posio de memria em que o assembler vai iniciar ou
ento, reiniciar a traduo do cdigo fonte. Veja um exemplo:
Labels
1

Mnemnicos
11 12

ORG

Operandos

Comentrios

18

35

2000h

;endereo de inicio do seg.

Figura 3-4: Exemplo para a pseudo-instruo ORG.


Nos programas que desenvolveremos, o conjunto das trs ltimas diretivas ser normalmente utilizado
em conjunto para a definio completa de um novo segmento de memria.
Labels
1

Mnemnicos
11 12

DEFSEG
SEG
ORG

Operandos

Comentrios

18

35

codigo,absolute
Codigo
2000h

;cria novo seg. de memria


;endereo de inicio do seg.

Figura 3-5: Cabealho completo para a definio de um novo segmento de memria.


Estes segmentos sero utilizados para conter tipos de informaes distintas que sempre esto presentes
em quase todos os programas: instrues e dados (ou variveis), ou seja, segmentos de dados e de programa.

Label10 EQU const


Mnemnico para a palavra equate: equiparar;
Esta pseudo-instruo tem a funo de associar ao nome do label um valor constante especificado
por const que pode ser de um byte (00h a 0FFh) ou dois bytes (0000h a 0FFFFh), ou seja, permite
criar constantes numricas. Os labels (ou smbolos) podem ento ser utilizados em qualquer ponto do
arquivo no lugar dos valores numricos que, no momento da montagem, o programa montador (assembler) ir convenientemente troc-los pelo seu valor numrico correspondente para que ento possa
ser feita a gerao do cdigo objeto. Veja a Figura 3-6;
As constantes numricas criadas por esta pseudo-instruo no implicam na reserva de posies de
memria, elas s tm funo para o momento da edio do programa, seus valores so armazenados
na tabela de smbolos criada pelo assembler e depois de terminada a montagem do cdigo fonte, estes
smbolos so descartados;
A incluso das pseudo-instrues EQU pode ser feita em qualquer ponto do arquivo fonte, no entanto,
recomenda-se que elas sejam inseridas junto com a definio do segmento de dados;

10

Para esta pseudo-instruo a presena do label obrigatria.

38

Captulo 3.

A utilizao de um labels, ao contrrio de um valor numrico, permite que se possa efetuar a troca de
um valor constante presente em vrios pontos do programa apenas trocando o valor const na linha
em que foi feita a sua definio;
Este tipo de pseudo-instruo nos permite elevar um pouco o nvel da linguagem assembly, pois assim
podemos trabalhar com nomes ao contrrio de nmeros, o que bem mais interessante.

IMPORTANTE:
O label associado pseudo-instruo EQU no deve ser seguido de dois
pontos (:), pois ele representa uma constante numrica.

Labels

Mnemnicos

11 12

Const1
Const2
Const3
PortaA
Xyz
LetraA
WWW
Digitos

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

Operandos

Comentrios

18

35

05h
01101101b
255
80h
1234h
A
13/3
12

;cria
;cria
;cria
;cria
;cria
;cria
;cria
;cria

constante
constante
constante
constante
constante
constante
constante
constante

numerica Const1 = 05h


numerica Const2 = 6Dh
numerica Const3 = FFh
numerica PortaA = 80h
numerica Xyz = 1234h
ASCII LetraA = 41h
numerica WWW = 4
ASCII Digitos = 3132h

Figura 3-6: Exemplos para a pseudo-instruo EQU.

[Label:]11 DB byte
Mnemnico de define byte;
Esta pseudo-instruo tem a funo de reservar uma posio de memria e de inicializ-la com o valor
do operando byte especificado. Em uma mesma linha podem ser reservadas mais de uma posio de
memria pela adio de mais de um operando byte separados por vrgulas. Veja a Figura 3-7;
Em termos prticos a pseudo-instruo DB nos propicia definir e inicializar variveis e vetores;
A diretiva DB que ocorre em uma linha dotada de label, alm da inicializao de uma posio memria,
efetua tambm, a atribuio do endereo desta posio ao label. No exemplo da Figura 3-7 o label
Var1 receber a atribuio do endereo 2500h e o Vet1 o endereo 2501h. Em uma linha onde h
inicializao mltipla, como o caso do Vet1, o endereo atribudo ao label o da primeira posio de
memria inicializada. Estes labels podem, ento, ser utilizados em qualquer ponto do arquivo que, no
momento da montagem, o programa montador (assembler) ir convenientemente troc-los pelo valor
do endereo que eles representam. Instrues que utilizam labels so mais interessantes pois o seu
entendimento torna-se mais intuitivo, observe:
LD A,(2500h)
LD H,2501h
Labels
1

Var1:
Vet1:
Name:
Vet2:
Conta:
Valor:
Parte:

Mnemnicos
11 12

ORG
DB
DB
DB
DB
DB
DB
DB

LD A,( Var1)
LD H,Vet1

pode ser escrita como


pode ser escrita como

Operandos

Comentrios

18

35

1200h
05h
03h, 09h, 15h, 0FFh
Joao e Maria, 00h
253, 0FFh, 12q, 111b
12*3
Const1 + Const2
33h and 0Feh

;define
;define
;define
;define
;define
;define
;define

posicao inicializada
vetor inicializado de 4 bytes
string ASCII de 13 bytes
vetor inicializado de 4 bytes
posicao inicializado de Var4 = 24h
posicao inicializada Var5 = 72h
posicao inicializada Var3 = 32h

Figura 3-7: Exemplos para a pseudo-instruo DB.

11

A incluso dos colchetes para indicar que a presena do label facultativa.

A linguagem assembly para o Z80.

39

[Label:] DW dbyte
Mnemnico de define word;
Esta pseudo-instruo tem a funo de reservar duas posies consecutivas de memria e de atribuir
a elas o valor do operando especificado (dbyte = dois bytes). O armazenamento dos bytes na memria ocorre de forma invertida: o byte mais significativo armazenado na segunda posio de memria
reservada e o byte menos significativo na primeira. Em uma mesma linha podem ser reservados outros
pares de posies de memria pela adio de mais de um operando dbyte separados por vrgulas.
Veja a Figura 3-8;
Como visto, esta diretiva permite criar variveis de 16 bits inicializadas, assim como vetores inicializados;
Nesta pseudo-instruo ocorre o mesmo que nas duas anteriores, ou seja, o label associado instruo recebe a atribuio do endereo do primeiro byte reservado.
Labels
1

Mnemnicos
11 12

DVar1:
QVar1:
C123:
Letras:

ORG
DW
DW
DW
DW

Operandos

Comentrios

18

35

1000h
1234h
5678h, 9ABCh
1295+12-35
Aa

;define
;define
;define
;define

um par de posicoes inicializadas


um par de posicoes inicializadas
pos. inicializada C123 com 04F8h
pos. inicializada Letras com 6141h

Figura 3-8: Exemplos para a pseudo-instruo DW.

[Label:] DS num
Mnemnico de define space.
Esta pseudo-instruo tem a funo de reservar num posies de memria consecutivas. As posies
de memria no so inicializadas, ou seja, mantm o seu contedo original, ao contrrio da diretiva
DB. Portanto os valores presentes nestas posies de memria so desconhecidos. O valor num
pode variar de 00h at 0FFFFh. Ou seja, com esta diretiva podemos definir variveis (sem inicializao) cujo comprimento varia de um byte at vetores de num bytes. Veja a Figura 3-9;
Nesta pseudo-instruo ocorre o mesmo que nas anteriores, ou seja, o label associado instruo recebe a atribuio do endereo do primeiro byte reservado.
Labels
1

Var2:
Var3:
Vetx:

Mnemnicos
11 12

ORG
DS
DS
DS

Operandos

Comentrios

18

35

1100h
01h
Const1
04h

;define uma posicao sem inicializao


;define vetor sem inicializacao de 5 bytes
;define vetor sem inicializacao de 4 bytes

Figura 3-9: Exemplos para a pseudo-instruo DS.


Na Figura 3-10 apresentamos o resultado gerado pelo assembler (o arquivo de listagem, .prn ) quando
reunimos todos os exemplos vistos acima.

3.6 Cuidados ao se definir variveis e constantes.


Devemos estar atentos tarefa de definir variveis e constantes, pois h vrias armadilhas neste tipo de
operao:
A primeira armadilha est exatamente em utilizarmos o ambiente do simulador para a depurao de nossos programas. Ao se definir variveis inicializadas no segmento de dados, utilizando as diretivas BD e DW, tudo funcionar perfeitamente. Entretanto, quando formos executar o mesmo programa no sistema real (chip microprocessador + chips de memria + chips de E/S) teremos problemas. Como?
Ocorre que o segmento de dados est alocado na memria RAM, que uma memria voltil. Quando
estamos trabalhando com o ambiente do simulador, ocorre a carga de valores em todas as posies de memria que foram inicializadas, seja no segmento de dados ou no segmento de programa.

40

Captulo 3.

Mas o mesmo no acontece quando estamos trabalhando com o sistema real. Neste caso, levamos o
chip ROM a um equipamento de gravao e gravamos apenas o segmento de programa. O segmento de dados no gravado porque a memria RAM voltil. Portanto, em um sistema real o segmento de dados permanecer sem inicializao. Como solucionar este problema?
Basta efetuar a definio destes valores em uma regio da memria ROM (que chamaremos de segmento de constantes). Em seguida, deve-se adicionar ao incio do seu programa uma pequena rotina que copie
estes valores da ROM para as posies da memria RAM que necessitam de inicializao.
A segunda armadilha: a definio de variveis inicializadas no segmento de programa. Para quem acabou de ler o texto anterior parece uma boa soluo para a primeira armadilha. Definindo as variveis na memria ROM no teremos o inconveniente da perda de dados, pois a memria ROM no voltil. Certo? Errado.
Ento qual o problema?
A memria ROM, como a prpria sigla apresenta, apenas de leitura (read only memory). Portanto, valores definidos na ROM, utilizando-se as diretivas DB ou DW no sero perdidos, mas tambm no podero ser
alterados. Obviamente, estas posies de memria no podero ser utilizadas como variveis. Mais uma vez,
todos os valores definidos no memria ROM tm a caracterstica de serem constantes e compem o que podemos chamar de segmento de constantes.

=1000
=0005
=006D
=00FF
=0080
=1234
=0041
=0004
=3132
1000 05
1001 03 09 15
1004 FF
1005 4A 6F 61
1008 6F 20 65
100B 20 4D 61
100E 72 69 61
1011 00
1012 FD FF 0A
1015 07
1016 24
1017 72
1018 32
1019 1234
101B 5678 9ABC
101F 04F8
1021 4161
1023 (0001)
1024 (0005)
1029 (0004)

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

$pw 130
defseg var, absolute
seg var
org 1000h
Const1 equ 05h
Const2 equ 01101101b
Const3 equ 255
PortaA equ 80h
Xyz
equ 1234h
LetraA equ 'A'
WWW
equ 13/3
Digitos equ '12'
Var1:
db 05h
Vet1:
db 03h, 09h, 15h, 0FFh

;definicao do segmento das variaveis

15

Name:

db

"Joao e Maria", 00h

;inicializa unma string ASCII de 13 bytes

16

Vet2:

db

253, 0FFh, 12q, 111b ;incializa um vetor de 4 bytes

17
18
19
20
21
22
23
24
25
26

Var4:
Var5:
Var6:
DVar1:
QVar1:
C123:
Letras:
Var2:
Var3:
Vetx:

db
db
db
dw
dw
dw
dw
ds
ds
ds

12*3
Const1 + Const2
33h and 0FEh
1234h
5678h, 9ABCh
1295+12-35
"Aa"
01h
Const1
04h

;cria constante numerica Const1 = 05h


;cria constante numerica Const2 = 6Dh
;cria constante numerica Const3 = FFh
;cria constante numerica PortaA = 80h
;cria constante numerica Xyz = 1234h
;cria constante ASCII LetraA = 41h
;cria constante numerica WWW = 4
;cria constante ASCII Digitos = 3132h
;inicializa a posicao Var1 com valor 05h
;incializa um vetor de 4 bytes

;incializa a posicao Var4 com 24h


;incializa a posicao Var5 com 72h
;incializa a posicao Var3 com 32h
;inicializa uma word DVar1 com 1234h
;incializa duas words
;inicializa uma word C123 com 04F8h
;inicializa uma word Letras com 6141h
;reserva o espaco de 01h byte sem inicializacao
;reserva o espaco de 05h bytes sem inicializacao
;reserva o espaco de 04h bytes sem inicializacao

Figura 3-10: Resultado da montagem de um segmento de dados, com definio de constantes, strings e vetores (arquivo .prn).

A linguagem assembly para o Z80.

41

CAPTULO 4.
4. AS INSTRUES DO PZ80
O microprocessador (P) que ser enfocado em nossas aulas de laboratrio o Z80. Ele dispe de um
conjunto de 158 tipos de instrues diferentes que esto ligadas a funes de controle, a operaes aritmticas
e lgicas, a entrada e sada de dados e movimentao de dados. Este conjunto de instrues pode ser dividido em 5 grupos:
Instrues de transferncia de dados;
Instrues de aritmticas e lgicas;
Instrues de desvio ou instrues de alterao do fluxo do processamento;
Instrues de entrada e sada de dados e
Instrues de controle do processador.
Neste curso no abordaremos todo o conjunto de instrues, trabalharemos com um subconjunto que
constar para instrues mais utilizadas e que tm suas correspondentes em outros sistemas microprocessados ou microcontrolados. O conjunto completo de instrues pode ser consultado no Apndice B.
A arquitetura de registradores, do P Z80 j foi apresentada no Captulo 1, mas interessante repeti-la
aqui. Em uma abordagem simplificada, a arquitetura pode ser apresentada como composta por 20 registradores:
Um contador de programa (PC) de 16 bits;
P Z80

Dois registradores para uso como ponteiros para a memria de


16 bits cada - (registradores de ndice IX e IY);

16 bits

PC

SP

Um registrador de 16 bits para uso como ponteiro de pilha - registrador stack pointer (registrador SP);

IX

IY

Um registrador de 8 bits para execuo da maioria das operaes aritmticas, lgicas, etc., - o acumulador (registrador A);
Um registrador indicador de estado de 8 bits, dos quais apenas 6
so utilizados - registrador de flags ou registrador de estado (registrador F);
E mais 6 registradores de 8 bits, chamados registradores de propsito geral - B, C, D, E, H, L. Este registradores podem, tambm,
ser utilizados ao pares (BC, DE, HL) transformando-se em 3 registradores de 16 bits;

8 bits

Figura 4-1: Arquitetura de registradores do P Z80.

E, por fim mais um grupo de 8 registradores denominado conjunto alternativo, composto por: A, F,
B, C, D, E, H, L que permutam seus valores com o acumulador, o registrador de flags e os registradores de propsito geral.

IMPORTANTE:
A utilizao dos registradores de propsito geral ao pares (16 bits), no
implica que no momento seguinte no possam ser utilizados como registradores isolados, ou seja, o agrupamento de dois registradores de 8 bits
s tem validade durante a execuo da instruo e no tem carter definitivo.

As Instrues do PZ80

43

4.1 Instrues de transferncia de 8 bits.


O conjunto de instrues que veremos a seguir permite efetuar a copia de informao entre o microprocessador e a memria. Sendo mais especfico, a cpia feita entre os registradores do P e a memria e viceversa. O tamanho da informao copiada de 8 bits, ou seja, um byte.
Descrio
simblica

Descrio

Copia o contedo armazenado em um registrador de 8 bits reg8 para


outro registrador de 8 bits reg8.
Copia o contedo armazenado na posio de memria especificada
A (end)
(end) para o registrador acumulador.
Copia o contedo armazenado no registrador acumulador para a posio
(end) A
de memria especificada por (end).
Copia o contedo armazenado na posio de memria consecutiva da
reg8 byte
instruo para um registrador de 8 bits reg8.
Onde: reg8 = A,B,C,D,E,H ou L
end = 0000h a FFFFh
byte = 00h a FFh
reg8 reg8

A apresentao das instrues ser feita da seguinte forma: primeiro a sintaxe da mesma, em seguida
da o efeito principal causado pela instruo, apresentado de forma simblica e por ltimo alguns comentrios.
Vejamos, ento, cada uma destas instrues:

;reg8 reg8

LD reg8,reg8

Copia o contedo do registrador fonte (reg8) para o registrador de destino (reg8).


Os operandos podem ser qualquer um dos registradores: A, B, C, D, E, H, L;
A instruo ocupa apenas um byte na memria;
Durante a execuo desta instruo nenhum acesso externo ( memria) feito;
Ex.: LD A,B

LD C,E

LD E,E

(veja Figura 4-2).

P Z80

Memria

16 bits

Segmento de Programa

PC=200Fh

SP

IX

IY

200Eh:

78h

8 bits

A=23h

200Fh:

??

B=23h

2010h:

??

2011h:

??

Figura 4-2: Ilustrao para a instruo LD A,B

LD A,(end)

12

;A (end)

Copia para o acumulador o contedo da posio de memria, cujo endereo especificado pelo operando end.
A Instruo ocupa 3 bytes na memria: um para o cdigo de operao e dois para o operando;
Ex.: LD A,(1900h)

12
13

LD A,(0022h)

LD A,(2500h)13

(veja a Figura 4-3).

A situao apresentada nas figuras supe que a instruo acabou de ser executada e, portanto, o PC aponta para a instruo seguinte.
interessante utilizar o sufixo minsculo h como indicador da base hexadecimal, para no ser confundido com o registrador H do P.

44

Captulo 4.

P Z80

Memria

24FFh:

Memria

16 bits

Segmento de Dados

Cdigo
hexa de
STA

Segmento de Programa

PC=2003h

SP

IX

IY

??

2000h:

3Ah

8 bits

2500h:

02h

A=02h

2001h:

00h

2501h:

??

2002h:

25h

2502h:

??

2003h:

??

Operando
2500h
armazenado
com os bytes
trocados

Figura 4-3: Ilustrao para a instruo LD A,(2500h).

;(end) A

LD (end),A

Tem funo oposta instruo anterior, ou seja, copia o contedo atual do acumulador para a posio
de memria cujo endereo especificado pelo operando end;
A Instruo ocupa 3 bytes na memria: um para o cdigo de operao e dois para o operando;
Ex.: LD (2507h),A

LD (1800h),A

(veja a Figura 4-4).

P Z80

Memria

Memria

16 bits

Segmento de Dados

2504h:

LD (3A0Ch),A

Segmento de Programa

PC=07F8h

SP

IX

IY

07F5h:

32h

07F6h:

07h

07F7h:

25h

07F8h:

??

??
8 bits

2505h:

??

A=02h

2506h:

??

2507h:

02h

A
B

Figura 4-4: Ilustrao para a instruo LD (2507h),A.

LD reg,byte

;reg byte

Copia para o registrador especificado o valor constante numrica byte.


Esta instruo necessita de dois operandos: um registrador e um valor constante numrica.
A Instruo ocupa 2 bytes na memria: a primeira posio de memria contm o cdigo de operao e
o operando reg e a posio de memria seguinte contem o operando byte;
Ex.: LD A,00h

LD B,255

LD C,0AAh

LD D,w

LD E,23*6

OBS.: A denominao imediato vem do fato de que o valor byte armazenado na memria de programa imediatamente aps ao cdigo de operao da instruo. Se, por exemplo, a instruo
LD C,0AAh estiver armazenada nas posies de memria 200Eh e 200Fh teremos (veja a Figura
4-5):
P Z80

Memria

16 bits

Segmento de Programa

PC=2010h

SP

IX

IY

200Eh:

0Eh

8 bits

200Fh:

AAh

C=AAh

2010h:

??

2011h:

??

Figura 4-5: Ilustrao para a instruo LD C,0AAh.

As Instrues do PZ80

45

4.2 Instrues de transferncia de 16 bits.


Neste grupo de instrues ocorre a cpia de informaes de 2 bytes de comprimento entre o microprocessador e a memria. Como o P tem capacidade de manipular informaes de um byte de cada vez, a operao ocorrer em duas etapas. Portanto, so operaes que demandaro um nmero mais de estados (pulsos
de clock) para serem completadas.
Uma vez que estamos abordando transferncia de 2 bytes de informao, tanto a fonte quanto o destino
devem ter esta capacidade de armazenamento. Na memria estaremos utilizando duas posies consecutivas.
Internamente ao processador, estaremos trabalhando com registradores de 16 bits. A anlise inicial da arquitetura de registradores do P Z80 nos apresenta apenas os registradores SP, IX e IY com esta capacidade. Mas
devemos nos lembrar que os registradores de propsito geral podem ser utilizados aos pares, ou seja, formando trs arranjos de 16 bits: par BC, par DE e par HL.
Descrio
simblica

Descrio

Copia o contedo armazenado nas duas posies de memria consecutivas da instruo para um registrador (ou par) de 16 bits reg16.
Copia o contedo armazenado em duas posies de memria consecutivas, cujo endereo inicial especificado por (end) para um regisreg16 (end)
trador (ou par) de 16 bits reg16.
Copia o contedo armazenado em um registrador (ou par) de 16 bits
reg16 para as duas posies de memria consecutivas, cujo endereo
(end) reg16
inicial especificado por (end).
reg16 12 reg16 Efetua a permuta do contedo do par de registradores especificado.
Onde: reg16 = BC,DE,HL,SP,IX ou IY
end = 0000h a FFFFh
dbyte = 0000h a FFFFh
reg16 dbyte

Vejamos as instrues:

LD reg16,dbyte

;reg16 dbyte

Copia para os registradores especificados, o valor constante numrica de 16 bits, especificado por
dbyte.
Pode-se especificar qualquer um dos pares de registradores: BC, DE, HL e tambm os registradores de
16 bits: SP, IX e IY.
A instruo ocupa 3 bytes na memria: a primeira posio de memria contm o cdigo de operao e
o primeiro operando e as duas posies seguintes contm o valor constante dbyte.
Ex.: LD HL,1A02h

LXI SP,1F00h

(veja a Figura 4-6).

OBS.: Supondo que a instruo LD HL,1A02h esteja armazenada a partir da posio de memria
1850h poderemos observar que o cdigo da instruo armazenado nesta posio, o valor 02h
na segunda posio, e o valor 1Ah na terceira e ltima posio. Esta inverso caracterstica em
vrios microprocessadores.

P Z80
Memria

16 bits

Segmento de Programa

1850h:

PC=1853h

SP

IX

IY

21h
8 bits

1851h:

02h

1852h:

1Ah

1853h:

??

H=1Ah

L=02h

Figura 4-6: Ilustrao para a instruo LD HL,1A02h.

LD reg16,(end)

;reg16

Low

(end)

reg16

High

(end+1)

Copia o contedo da posio de memria end para os 8 bits inferiores do registrador e o contedo da
posio de memria end+1 para os 8 bits superiores do registrador.
46

Captulo 4.

Pode-se especificar qualquer um dos pares de registradores: BC, DE, HL e tambm os registradores de
16 bits: SP, IX e IY.
Ex.: LD HL,1900h

(veja a Figura 4-7).

P Z80

Memria
Segmento de Dados

18FFh:

Memria

16 bits

PC=2506h

SP

IX

IY

Segmento de Programa

2503h:

2Ah

2504h:

00h

2505h:

19h

2506h:

??

??
8 bits

1900h:

12h

1901h:

34h

1902h:

??

H=34h

L=12h

Figura 4-7: Ilustrao para a instruo LD HL,1900h.

;(end) reg16

LD (end),reg16

Low

(end+1) reg16

High

Copia o contedo dos 8 bits inferiores do registrador para a posio de memria end e o contedo dos
8 bits superiores do registrador para a posio de memria end+1.
Pode-se especificar qualquer um dos pares de registradores: BC, DE, HL e tambm os registradores de
16 bits: SP, IX e IY.
Ex.: LD (1902h),BC

(veja a Figura 4-8).

P Z80

Memria
Segmento de Dados

1900h:

Memria

16 bits

Segmento de Programa

PC=2702h

SP

IX

IY

??
8 bits

1901h:

??

1902h:

12h

B=34h

C=12h

1903h:

34h

26FEh:

EDh

26FFh:

4Bh

2700h:

02h

2701h:

19h

2702h:

??

Figura 4-8: Ilustrao para a instruo LD (1902h),BC.

EX DE,HL

;DE 12 HL

O contedo do registrador H trocado com o do registrador D e o mesmo acontece com L e E;


Durante a execuo desta instruo nenhum acesso externo ( memria) feito;
Ex.: EX DE,HL

(veja a Figura 4-9 e a Figura 4-10).

P Z80

Memria

16 bits

PC=1A06h

SP

IX

IY

Segmento de Programa

1A06h:

EBh

8 bits

1A07h:

??

1A08h:

??

D=01h

E=00h

1A09h:

??

H=27h

L=65h

Figura 4-9: Ilustrao para a instruo EX DE,HL. Situao inicial, a instruo vai ser executada.
As Instrues do PZ80

47

P Z80

Memria

16 bits

PC=1A07h

SP

IX

IY

Segmento de Programa

1A06h:

EBh

8 bits

1A07h:

??

1A08h:

??

1A09h:

??

D=27h

E=65h

H=01h

L=00h

Figura 4-10: Ilustrao para a instruo EX DE,HL. Situao final, a instruo foi executada.

EX AF,AF

;AF 12 AF

O contedo do registrador A trocado com o contedo do registrador A e o mesmo acontece com F e


F.
Esta a nica instruo que permite alterar o contedo dos registradores alternativos A e F. No se
pode ler ou escrever diretamente em nenhum dos registradores alternativos.
Ex.: EX AF,AF

(veja a Figura 4-11 e a Figura 4-12).

P Z80

Memria

16 bits

PC=03FFh

SP

IX

IY

Segmento de Programa

03FFh:

08h

8 bits

A=12h

F=34h

A=56h

F=78h

0400h:

??

0401h:

??

0402h:

??

Figura 4-11: Ilustrao para a instruo EX AF,AF. Situao inicial, a instruo vai ser executada.

P Z80

Memria

16 bits

PC=03FFh

SP

IX

IY

Segmento de Programa

03FFh:

08h

8 bits

A=56h

F=78h

A=12h

F=34h

0400h:

??

0401h:

??

0402h:

??

Figura 4-12: Ilustrao para a instruo EX AF,AF. Situao final, a instruo foi executada.

EXX

;BC 12 BC

DE 12 DE

HL 12 HL

Ocorre a permuta entre os contedos dos registradores de propsito geral: B,C,D,E,H e L com os seus
correspondentes no banco de registradores alternativos.
Esta instruo no possui operando.
Esta a nica instruo que permite alterar o contedo destes registradores alternativos. No se pode
ler ou escrever diretamente em nenhum dos registradores alternativos.
Ex.: EXX

48

(veja a Figura 4-13 e a Figura 4-14).

Captulo 4.

P Z80
Memria

16 bits

PC=0400h

SP

IX

IY

Segmento de Programa

03FFh:

??

0400h:

D9h

B=22h

C=66h

B=AAh

C=EEh

0401h:

??

D=33h

E=77h

D=BBh

E=FFh

0402h:

??

H=44h

L=88h

H=CCh

L=00h

8 bits

Figura 4-13: Ilustrao para a instruo EXX. Situao inicial, a instruo vai ser executada.

P Z80

Memria

16 bits

PC=0401h

SP

IX

IY

Segmento de Programa

03FFh:

??

8 bits

0400h:

D9h

B=AAh

C=EEh

B=22h

C=66h

0401h:

??

0402h:

??

D=BBh

E=FFh

D=33h

E=77h

H=CCh

L=00h

H=44h

L=88h

Figura 4-14: Ilustrao para a instruo EXX. Situao final, a instruo foi executada.
H, ainda, algumas instrues de transferncia de 16 bits que operam valores de e para a pilha (stack),
que sero vistas mais frente, junto com o grupo de Instrues de alterao de fluxo do processamento (mais
especificamente: instrues de subrotina).

4.3 Instrues aritmticas e lgicas.


Veremos neste item o subgrupo de instrues aritmticas e lgicas disponveis no P Z80. Ele realiza,
atravs de sua ULA (Unidade Lgica e Aritmtica): instrues de adio, subtrao, bem como algumas instrues lgicas e instrues de comparao, utilizando operandos de 8 bits. O P dispe, ainda, de algumas instrues que efetuam operaes aritmticas com operandos de 16 bits.

4.3.1 Registrador de flags.


At o momento no havamos tratado do registrador de flags (F). Sua funo armazenar informaes
sobre o resultado da ltima operao executada pela ULA, ou seja, operaes aritmticas e lgicas. Portanto,
em instrues de transferncia, onde no se utiliza a ULA, os flags permanecem inalterados.
Cada bit do registrador sinaliza uma caracterstica do resultado obtido, tal como: o resultado da operao zero, o resultado positivo, etc. Dos oito bits do registrador, apenas 6 tm funo definida e 2 no so utilizados. Vejamos:

As Instrues do PZ80

49

bit7

bit6

bit5

bit4

bit3

bit2

bit1

Bit0

---

---

P/V

CY

Flag S:
sign flag

Indica que o resultado da operao positivo (S=0) ou negativo


(S=1). Na verdade este flag um espelho do bit mais significativo do resultado da operao (bit a7);

Flag Z:
zero flag

Indica se o resultado da operao zero (Z=1) ou diferente de


zero (Z=0). obtido atravs da funo nor de todos os bits do
valor resultado;

Flag H:
Half carry flag

Indica se ocorreu um vai-um do primeiro para o segundo nibble


do acumulador, quando da soma de dois valores. utilizado somente com a instruo DAA;

Flag P/V:
Parity/overflow
flag

Informa se a paridade do resultado par (P=1) ou mpar (P=0)


aps operaes lgicas e indica a ocorrncia de overflow aps
operaes aritmticas

Flag N:
Add/Subtract flag

Indica que a operao aritmtica anterior foi uma soma (N=0) ou


foi uma subtrao (N=1). utilizado somente com a instruo
DAA.

Flag CY:
Carry flag

Indica se ocorreu um vai-um do bit mais significativo em uma


operao de soma ou se ocorreu um emprstimo em uma operao
de subtrao.

IMPORTANTE:

A operao de subtrao , na verdade, uma operao de soma onde o


segundo operando sofreu uma transformao (complemento de dois) para ter seu sinal algbrico invertido: A-B = A+(-B). Nesta operao o bit
Co do ltimo bloco somador completo (veja a Figura 4-15):
Igual a "1" quando A>B, ou seja, no houve "pede-emprestado"
Igual a "0" quando AB, ou seja, houve "pede-emprestado"
Este comportamento exatamente o oposto para a operao de soma
(A+B). Por isso podemos observar, a porta xor ligada como inversor controlado sada do referido bit para permitir que o flag CY indique corretamente o "vai-um" e o "pede-emprestado" para as operaes de soma e
subtrao respectivamente.

B7

B6

B5

B4

B3

B2

B1

5V

B0
S1

A3 A2 A1 A0

S7 . . S4

Cout Cin

A4
A3
A2
A1
B4
B3
B2
B1
s4
s3
s2
s1

U1

74LS83A

Cout Cin

A4
A3
A2
A1
B4
B3
B2
B1
s4
s3
s2
s1

Carry
Out

74LS83A

A7 A6 A5 A4

U2

S3 . . S0

Figura 4-15: Circuito somador/subtrator de 8 bits, da ULA (verso simplificada).

50

Captulo 4.

Estes flags em conjunto com as instrues desvio condicional (Prtica 3) nos permitiro criar estruturas
de programao do tipo if - then - else , switch - case , etc.

4.3.2 Operaes aritmticas com operandos em 8 bits.


A grande maioria das operaes aritmticas utiliza obrigatoriamente o acumulador como um dos operandos e, tambm, como destino para o resultado. Isto faz o valor original do acumulador ser perdido. As operaes de soma e subtrao alteram o estado de todos os flags, j as instrues de incremento e decremento s
no alteram o estado do flag CY.
Descrio
simblica

Descrio

A A + reg8
Efetua a operao entre o contedo do acumulador e o contedo do registrador especificado por reg8.
A A - reg8
A A + byte
Efetua a operao entre o contedo do acumulador e o valor constante
numrica especificado por byte.
A A byte
A A + reg8 + CY Efetua a operao entre o contedo do acumulador, o contedo do regisA A - reg8 CY trador especificado por reg8 e o contedo do flag CY.
A A + byte + CY Efetua a operao entre o contedo do acumulador, o valor constante
A A byte CY numrica especificado por byte e o contedo do flag CY.
reg8 reg8 + 1
Incrementa/decrementa o registrador especificado por reg8.
reg8 reg8 - 1
Efetua o complemento de 2 do contedo do acumulador.
A -A
Onde: reg8 = A,B,C,D,E,H ou L
byte = 00h a FFh

Anteriormente apresentamos as instrues de forma detalhada e ilustrada para permitir uma melhor assimilao no primeiro contato com as instrues. Daqui em diante as instrues sero apresentadas de forma
mais concisa.

ADD A,reg8
ADD A,byte

;A A + reg8
;A A + byte

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

( ( (
Flags

(
P/V

0 (
N

CY

O contedo do acumulador somado com o operando especificado. O resultado copiado para acumulador;
Ex.: ADD A,A
ADD A,3Fh

SUB reg8
SUB byte

;A A + A
;A A + 3Fh

;A A - reg8
;A A byte

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

( ( (
Flags

(
P/V

1 (
N

CY

O contedo do acumulador subtrado do operando especificado. O resultado copiado para acumulador;


Ex.: SUB A,C
SUB A,33h

INC reg8
DCR reg8

;A A - C
;A A - 33h

;reg8 reg8 + 1
;reg8 reg8 - 1

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

( ( (
Flags

0
1

P/V

CY

O contedo do registrador incrementado (ou decrementado) de uma unidade;


O nico flag que no afetado o CY.
Ex.: INR E
DCR B
As Instrues do PZ80

;E E + 1
;B B - 1
51

;A 0 - A

NEG

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

( ( (
Flags

(
P/V

1 (
N

CY

O valor zero subtrado do contedo do acumulador, ou seja, obtm-se a inverso de sinal do contedo do acumulador, ou ainda, obtm-se o complemento de 2 do contedo do acumulador;
Ex.: LD A,01h
NEG

;A 01h
;A FFh

As instrues aritmticas apresentadas a seguir efetuam as operaes de soma e subtrao levando em


considerao o estado do "vai-um" (ou pede-emprestado) da operao executada anteriormente.
Estas instrues so as responsveis por permitir a execuo de operaes aritmticas com valores cujo
nmero de bits superior ao da palavra do microprocessador. A soluo implementada utilizando as instrues ADD ou SUB para operar o primeiro byte e em seguida utiliza-se ADC ou SBC para as operaes seguintes, sejam elas quantas forem. Veja o exemplo abaixo:
0
1
0
1
22
19
2A
3F
75
+ 1C
+ 99
+ F3
+ 45
+ 91
0
3D
0
B3
1
5D 0
85
1
06
CY
CY
CY
CY
CY

Figura 4-16: Soma de vrios bytes.

ADC A,reg8
ADC A,byte

;A A + reg8 + CY
;A A + byte + CY

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

( ( (
Flags

(
P/V

0 (
N

CY

O contedo do acumulador somado com o operando especificado e com o flag CY. O resultado copiado para acumulador;
Ex.: ADC A,B
ADC A,1Ah

SBC A,reg8
SBC A,byte

;A A + B + CY
;A A + 1Ah + CY

;A A reg8
;A A - byte

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

( ( (
Flags

(
P/V

1 (
N

CY

O contedo do acumulador subtrado do operando especificado e do flag CY. O resultado copiado


para acumulador;
Ex.: SBC A,C
SBC A,05h

;A A - C - CY
;A A - 05h - CY

4.3.3 Instrues de comparao.


Estas instrues, na verdade, compem um subgrupo das Operaes aritmticas com operandos de 8
bits, e esto sendo apresentadas separadamente devido sua importncia.
A comparao entre dois valores sempre toma o acumulador como um dos operandos. O segundo operando pode ser qualquer um dos registradores de propsito geral ou um valor constante.
A comparao propriamente dita feita atravs da operao aritmtica de subtrao. Ao contrrio da
operao de subtrao vista anteriormente, aqui, o contedo do acumulador preservado, ou seja, o resultado
da operao no carregado no acumulador, alterando-o. Como uma operao foi efetuada pela ULA, os bits
do registrador de flags so alterados. Portanto as instrues de comparao afetam apenas os flags.
Vejamos quais so:

52

Captulo 4.

CP reg8
CP byte

;A - reg8
;A - byte

( ( (
Flags

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

(
P/V

1 (
N

CY

O contedo do acumulador comparado com o segundo operando atravs de uma operao de subtrao no destrutiva;
Todos os flags so afetados.
Ex.: Suponha A = 01h, B
CMP B
;S
CMP C
;S
CPI 0FFh
;S

10h e C = 01h
1
Z 0
0
Z 1
0
Z 0

H 0
H 0
H 0

P 0
P 1
P 0

CY 1
CY 0
CY 1

Pergunta: Por que a operao de comparao CPI 0FFh gerou como resultado o flag S = 0 ?
Resposta: Lembre-se que esta operao baseia-se na subtrao dos valores para a atualizao dos flags, e
deve-se lembrar, ainda, que a subtrao ocorre atravs da soma do primeiro operando com o
complemento de 2 do segundo operando. O valor 0FFh, quando submetido ao complemento de 2
torna-se 01h que, ento soma do com 01h gera o valor resultado 02h, positivo, justificando o resultado S = 0.
Pergunta: Mas 01h menor que 0FFh. O flag S no deveria indicar que a comparao (subtrao) destes
dois valores negativa ?
Resposta: No. Pois quando se trabalha com subtrao o bit 7 de cada operando sempre interpretado como bit de sinal, e portanto o valor 0FFh um valor negativo, ou seja, 0FFh = -01h. A subtrao
de 01h - (-01h) = +02h.
Pergunta: Mas no meu programa 0FFh equivale a 255. Como eu fao para ter uma indicao que 01h
menor que 0FFh ?
Resposta: Toda vez que for comparar valores absolutos utilize o flag CY. Observe que na comparao feita
CY = 1. Isto indica que o valor absoluto do primeiro operando menor que o segundo operando e
houve a gerao de um "pede-emprestado" (borrow). Se a situao fosse ao contrrio o flag CY
tambm indicaria corretamente.

IMPORTANTE:

O flag S s deve ser utilizado em programas que operem valores "com sinal" em caso contrrio deve-se utilizar o flag CY para efetuar a comparao entre dois valores.

4.3.4 Operaes com valores codificados em BCD.


O circuito somador/subtrator dos microprocessadores (veja Figura 4-15) executa apenas operaes com
valores binrios puros. Contudo, a entrada de valores via teclado, no gera nmeros binrios puros, mas valores decimais codificados em binrio (BCD). Isto nos leva a pensar que, ento, teremos que efetuar a converso
destes valores para binrio para que possam ser operados. Deve-se lembrar, ainda, que depois de operados,
possvel que o resultado seja apresentado em um display. O que nos levaria a executar uma nova converso,
s que agora de binrio para BCD.
Seria muito interessante se o P pudesse operar diretamente com valores em BCD, pois isto implicaria
em um processamento um pouco mais rpido, uma vez que no seriam necessrias as converses
BCD BIN e BIN BCD. Na verdade no se opera diretamente em BCD, o que se faz efetuar as operaes dos valores em BCD utilizando as instrues normais do P e logo em seguida procede-se a um ajuste da
operao utilizando instrues do tipo DAA.

DAA

;ajuste decimal do acumulador

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

( ( (
Flags

(
P/V

- (
N

CY

Decimal adjust accumulator;

As Instrues do PZ80

53

O contedo ajustado para um valor BCD, levando-se em conta o estado dos flags CY, H, e N. O ajuste feito somando 6 a cada digito que tiver valor superior a 9 ou que apresentar um dos flags acima ativo;
O nico flag que no afetado o N.
Exemplo 1: O usurio deseja somar os valores 3510 e 2910 cujo resultado ser apresentado no display.
No entrando no mrito das rotinas de acesso ao teclado e ao display, vamos supor que no momento da operao os valores acima estejam carregados respectivamente nos registradores A e B. Vale observar que os valores lidos do teclado 35BCD (0011 01012) e 29BCD (0010 10012), sero armazenados como 35h e 29h e sero
operados inicialmente como valores hexadecimais (ou binrios, como queira). Vejamos a operao entre eles:
ADD B

;A 35h + 29h

A 5Eh

CY=0 H=0

O valor obtido no est correto, pois deveria ser 64BCD. Agora o que se deve fazer promover o ajuste
desta soma, utilizando a instruo DAA
DAA

;A 5Eh + 06h

A 64h

O resultado da execuo da instruo DAA se baseia na anlise do valor de cada um dos dgitos do valor
resultado gerado pela soma. Caso algum deles tenha valor superior a 9, faz-se a soma do fator de correo 6,
para que o resultado passe a conter apenas dgitos decimais.
Exemplo 2: Suponha, agora, que os valores a serem somados sejam 98BCD e 29BCD. Teremos:
ADD B

;A 98h + 29h

A C1h

CY=0 H=1

Novamente, o valor obtido no est correto, pois deveria ser 127BCD. Mais uma vez promoveremos o ajuste desta soma, utilizando a instruo DAA.
Deve-se observar que a soma dos dgitos menos significativos dos valores gerou um estouro no primeiro
dgito: 8h + 9h = 11h, que armazenado fazendo o flag H=1. Portanto, apesar do dgito menos significativo de
C1h ser menor que 9, a soma do fator de correo deve ser feita.
DAA

;A C1h + 66h

A 27h

CY=1 H=1

4.3.5 Operaes aritmticas com operandos em 16 bits.


Neste grupo temos poucas instrues se comparado com o grupo de 8 bits. H uma observao importante a se destacar: o par de registradores HL utilizado de forma especial. Ele funciona como um acumulador de 16 bits, ou seja, nas operaes de soma e subtrao o operando implcito (obrigatrio) o par HL.
Descrio
simblica
HL HL + reg16

Descrio
Efetua a soma entre o contedo do par HL e o contedo do par especificado por reg16.

HL HL + reg16 + CY
Efetua a operao entre o contedo do par HL, o contedo do par
especificado por reg16 e o contedo do flag CY.
HL HL - reg16 CY
reg16 reg16 + 1
Incrementa/decrementa o par especificado por reg16.
reg16 reg16 - 1
Onde: reg8 = BC,DE,HL ou SP

Vamos s instrues:

ADD HL,reg16

;HL HL + reg16

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

Flags

P/V

0 (
N

CY

O contedo do par de registradores HL somado ao contedo do par especificado e o resultado copiado para o par HL. Isto faz com que o contedo original do par HL seja perdido;
Ex.: ADD HL,BC
;HL HL + BC
ADD HL,SP
;HL HL + SP
Suponha como situao inicial, HL = 1234h e SP = 5678h, teremos:
HL 1234h + 5678h, HL 68ACh
54

Captulo 4.

ADC HL,reg16
SBC HL,reg16

;HL HL + reg16 + CY
;HL HL - reg16 CY

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

( ( ?
Flags

(
P/V

0
(
1
N

CY

O contedo do par de registradores HL somado ao contedo do par especificado e ainda soma-se o


flag CY. O resultado copiado para o par HL. Isto faz com que o contedo original do par HL seja perdido;
Ex.: ADC HL,DE
;HL HL + DE + CY
ADC HL,SP
;HL HL + SP + CY
Suponha como situao inicial, HL = 1234h, SP = 5678h e CY = 1, teremos:
HL 1234h + 5678h + 1, HL 68ADh

INC reg16
DEC reg16

;reg16 reg16 + 1
;reg16 reg16 - 1

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

Flags

P/V

CY

O contedo do par de registradores incrementado (ou decrementado) de uma unidade;


Nenhum flag afetado.
Ex.: INC H
;HL HL + 1
Suponha como situao inicial, HL = 12FFh, teremos:
HL 12FF + 1h, HL 1300h
DEC B
;BC BC - 1
Suponha como situao inicial, BC = 0000h, teremos:
BC 0000h - 1h, BC FFFFh

4.3.6 Operaes lgicas.


Este conjunto de operaes nos permite atuar no registrador acumulador de maneira bem diferente que
o conjunto de operaes aritmticas. Aqui podemos enfocar o registrador como um pacote de bits e alterar o
estado de um ou mais destes. O P Z80 possui quatro instrues lgicas: as trs elementares - AND, OR e NOT,
e uma composta XOR. Com estas instrues possvel efetuar as trs operaes bsicas com bits e uma com
o byte.
Operao

Funo Lgica

Descrio

Clear bit

AND

Ajustar o nvel lgico de um ou mais bits para "0"

Set bit

OR

Ajustar o nvel lgico de um ou mais bits para "1"

Complement bit

XOR

Alternar o nvel lgico de um ou mais bits

Complement byte

NOT

Alternar o nvel lgico de todo o byte

Assim como para as instrues aritmticas, neste grupo o acumulador participa como um dos operandos
e, tambm, como o destino do resultado da operao.

;A not (A)

CPL

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

( ( 1
Flags

(
P/V

1 (
N

CY

Todos os bits do acumulador so complementados (negao lgica);


Esta instruo no possui operando, portanto somente o acumulador pode ser complementado;
Esta instruo pode ser utilizada para efetuar a operao de complement byte;
Ex.: CPL
;A not (A )
Suponha como situao inicial, A = 3Ah, teremos:

As Instrues do PZ80

Not 0011 1010


1100 0101

55

AND reg8
AND byte

;A A and reg8
;A A and byte

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

( ( 1
Flags

P/V

CY

A operao lgica executa bit a bit entre os operandos, ou seja, a funo AND aplicada entre os
bits 0 dos operandos gerando o bit 0 do resultado, e assim acontece para os demais bits;
Todos os flags so afetados, sendo que trs flags sempre apresentaro o mesmo estado: CY e N = 0
H = 1;
Esta instruo pode ser utilizada para efetuar a operao de clear bit;
Ex.: ANI 00h
;A A and 00h
ANA C
;A A and C
Suponha como situao inicial, A = 3Ah e C = 9Fh, teremos:

OR reg8
OR byte

0011 1010
and 1001 1111
0001 1010

;A A or reg8
;A A or byte

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

( ( 0
Flags

P/V

CY

A operao lgica executa bit a bit entre os operandos, ou seja, a funo OR aplica entre os bits 0
dos operandos gerando o bit 0 do resultado, e assim acontece para os demais bits;
Todos os flags so afetados, sendo que trs flags sempre apresentaro o mesmo estado: CY, N e
H = 0;
Esta instruo pode ser utilizada para efetuar a operao de set bit;
0011 1010
or 1001 1111
1011 1111

Ex.: OR L
;A A or L
OR 9Fh
;A A or 00h
Suponha como situao inicial, A = 3Ah, teremos:

XOR reg8
XOR byte

;A A xor reg8
;A A xor byte

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

( ( 0
Flags

P/V

CY

A operao lgica executa bit a bit entre os operandos, ou seja, a funo XOR aplica entre os
bits 0 dos operandos gerando o bit 0 do resultado, e assim acontece para os demais bits;
Todos os flags so afetados, sendo que trs flags sempre apresentaro o mesmo estado: CY, N e
H = 0;
Esta instruo pode ser utilizada para efetuar a operao de complement bit;
Ex.: XRA H
;A A xor H
XRI 9Fh
;A A xor 00h
Suponha como situao inicial, A = 3Ah, teremos:

0011 1010
xor 1001 1111
1010 0101

Ha duas instrues que tambm efetuam operaes lgicas que, ao contrrio das anteriores, no tomam
o acumulador como operando. Ao contrrio, elas operam apenas um bit do registrador de flags: o bit carry (CY).
Vejamos:

CCF

;CY not (CY)

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

Flags

P/V

0 (
N

CY

Complement carry flag;


A operao lgica not executada apenas no flag carry. Entretanto, o flag N apresentar sempre o
mesmo estado: N = 0. Nenhum outro registrador ser afetado;
Esta instruo no possui operando, portanto aplicvel apenas ao flag carry. No h instrues similares para os outros flags.

56

Captulo 4.

;CY 1

SCF

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

Flags

P/V

CY

Set carry flag;


O flag Carry carregado com 1 independente do seu contedo anterior. Os flags H e N sempre apresentaro o mesmo estado H,N = 0;
Esta instruo no possui operando, portanto aplicvel apenas ao flag carry. No h instrues similares para os outros flags.

4.4 Modos de endereamento.


Em boa parte das vrias instrues que j apresentamos, possvel efetuar a seleo de operandos,
como por exemplo:
1. LD A,(end)

podemos selecionar o contedo de uma das 65.536 posies de memria;

2. LD reg8,reg8

podemos selecionar o contedo de um dos registradores de 8 bits;

3. LD reg8,byte

podemos selecionar o contedo de um dos registradores e um valor constante,


ambos de 8 bits.

4. LD reg16,dbyte

podemos selecionar o contedo de um dos registradores e um valor constante,


ambos de 16 bits.

A esta possibilidade de seleo de informao proveniente de vrios locais de armazenamento chamamos de modos de endereamento. Os exemplos apresentados acima ilustram as 3 possibilidades de seleo
que conhecemos at o momento que so: endereamento direto, de registrador e imediato. Vamos destacar,
ainda, um quarto modo de endereamento: relativo.

4.4.1.1 Endereamento direto ou estendido.


Permite a seleo do contedo de uma posio de memria utilizando como operando uma constante
numrica de 16 bits.
As instrues que utilizam este modo de endereamento ocupam 3 bytes: um para o cdigo de operao
de mais dois para o operando.
Exemplo: LD A,(1500h)
JP 2200h

;a instruo jump ser apresentada no item 4.5 .

4.4.1.2 Endereamento de registrador.


Permite a seleo de um dos registradores do P.
As instrues que utilizam este modo de endereamento, normalmente, ocupam apenas 1 byte, que
contem tanto o cdigo de operao quanto o operando.
Exemplo: LD D,H
EX DE,HL

4.4.1.3 Endereamento imediato e imediato estendido.


Permite a seleo de um valor constante numrica de 8 ou 16 bits.
As instrues que utilizam este modo de endereamento podem ocupar de 2 a 4 bytes.
Exemplo: LD D,15h
LH DE,1122h

As Instrues do PZ80

57

4.4.1.4 Endereamento relativo.


Permite fazer referncia a uma posio de memria cujo endereo pode estar at +129 bytes (posteriores ao endereo de armazenamento da instruo em questo), ou ainda at -126 bytes (anteriores).
Enquanto o endereamento absoluto utiliza um operando de 2 bytes, o endereamento relativo conta
com um operando de apenas 1 byte. Este byte interpretado como um valor com sinal (em complemento de
2). Portanto poderemos ter valores que variam entre 128 a +127.
O endereamento relativo ocorre pela soma deste valor com o contedo atual do registrado PC. bom
ressaltar que no momento em que ocorreu a busca do operando (o segundo byte da instruo), o contedo do
PC ser PC+2 se comparado com o endereo inicial (antes da busca da instruo acontecer). Ao contedo de
PC+2 que ser somado o valor relativo e, portanto, teremos um desvio que pode atingir 126 posies de
memria anteriores (126) ou 129 posies de memria posteriores (+129).
Este modo de endereamento utilizando nas instrues de desvio relativo (relative jump = JR) que enfocaremos no item seguinte. Este modo apresenta duas vantagens:
A instruo utiliza apenas 2 bytes , contra 3 bytes se fosse utilizado o endereamento direto. Isto implica em um programa mais compacto, permitindo economizar memria;
Facilita a criao de programas relocveis, pois um programa implementado apenas endereamento
relativo no tem vnculo com um endereo fixo.
Exemplo: JR 120
JR 90
JR NC,126

4.4.1.5 Endereamento indireto.


Destes quatro modos de endereamento vistos, os modos direto e imediato sempre selecionam um
mesmo valor, seja ele de uma posio de memria diretamente especificada ou uma constante numrica imediata, respectivamente.
No entanto, h casos onde necessrio efetuar a leitura (ou escrita) em vrias posies de memria,
consecutivas ou no, como por exemplo, a anlise de um vetor de valores. Para implementar um programa que
efetuasse a anlise deste vetor, com o conjunto de instrues que conhecemos at o momento, seria necessrio utilizar-se de tantas instrues LD quantos forem os valores a serem analisados. Mas surge uma outra
questo: se o nmero de elementos do vetor no for previamente conhecido, ou ainda, se o vetor tiver nmero
de elemento varivel?
Nestes dois ltimos casos no seria possvel a implementao de um programa utilizando-se das instrues que conhecemos at o momento. necessrio, portanto, que o P disponha de instrues que permitam
a solucionar estas proposies.
A soluo para o problema apresentado acima, passa pela necessidade de o P dispor de um grupo de
instrues de movimentao que no tenham operandos constantes.
O P Z80 dispe de instrues de transferncia cujos operandos esto armazenados em registradores
de 16 bits ou em pares de registradores (IX, IY, BC, DE ou HL), e como vimos, o contedo dos registradores
pode ser facilmente incrementado, decrementado, somado, etc. A estes registradores damos o nome de apontadores para a memria ou simplesmente ponteiros.
O endereamento indireto , portanto, uma forma de transferncia de dados onde o operando da instruo, ou seja, o endereo da posio de memria que vai ser acessada, no especificado diretamente na linha
da instruo. Ele deve ser definido, previamente, atravs da carga adequada (inicializao) do registrador ponteiro que ser utilizado.
Dividiremos a apresentao das instrues de endereamento indireto em dois grupos: as que utilizam
como ponteiro os pares de registradores BC e DE, que veremos a seguir, e as que utilizam o par de registradores HL. O Z80 dispe, ainda, de instrues que utilizam os registradores de indexao IX e IY, que no apresentaremos.
Vale lembrar que o registrador SP tambm um registrador ponteiro, basta lembrar que SP sigla para
stack pointer. Entretanto, sua utilizao est vinculada operao de valores de uma estrutura de memria
que, novamente indicada pelo seu nome: a pilha.

58

Captulo 4.

4.4.2 Endereamento indireto utilizando os pares BC e DE.


Este subgrupo de instrues bem limitado e tem como caracterstica principal a utilizao exclusiva do
registrador acumulador como elemento de ligao entre o P e a memria.

;A (BC)
;A (DE)

LD A,(BC)
LD A,(DE)

Esta instruo semelhante LD A,(end) no fato de que ambas copiam o contedo de uma determinada posio de memria para o acumulador. A diferena ocorre que para LD A,(end) o endereo
da posio de memria um valor numrico constante (fixo, invarivel) definido pelo operando. J para esta instruo, o endereo da posio de memria obtido atravs do contedo do par de registradores especificado;
Os pares BC e DE s podem ser especificados como ponteiros para transferncia de dados envolvendo
o acumulador. Os demais registradores no podem ser especificados como operandos;
A instruo ocupa apenas um byte na memria;
Ex.: LD BC,23AAh
LD A,(BC)

(veja a Figura 4-17).

Lembre-se: A inicializao do contedo do registrador ponteiro deve preceder, em algum momento, a


utilizao do mesmo.
P Z80

Memria
Segmento de Dados

23A9h:

Memria

16 bits

Segmento de Programa

PC=2002h

SP

IX

IY

??

2000h:

??

8 bits

23AAh:

82h

A=82h

2001h:

0Ah

23ABh:

??

B=23h

C=AAh

2002h:

??

23ACh:

??

2003h:

??

Figura 4-17: Ilustrao para a instruo LD A,(BC).

LD (BC),A
LD (DE),A

;(BC) A
;(DE) A

Esta instruo semelhante LD (end),A no fato de que ambas copiam o contedo do acumulador
para uma determinada posio de memria. A diferena ocorre que para LD (end),A o endereo da
posio de memria um valor numrico constante (fixo, invarivel) definido pelo operando. J para
esta instruo, o endereo da posio de memria obtido atravs do contedo do par de registradores especificado;
Os pares BC e DE s podem ser especificados como ponteiros para transferncia de dados envolvendo
o acumulador. Os demais registradores no podem ser especificados como operandos;
A instruo ocupa apenas um byte na memria;
Ex.: LD DE,2765h
LD (DE),A

(veja a Figura 4-18).

Lembre-se: A inicializao do contedo do registrador ponteiro deve preceder, em algum momento, a


utilizao do mesmo.

As Instrues do PZ80

59

P Z80

Memria
Segmento de Dados

2762h:

Memria

16 bits

Segmento de Programa

PC=1B02h

SP

IX

IY

??

1B00h:

??

8 bits

2763h:

1B01h:

??

2764h:

??

??

1B02h:

12h

B=23h

C=AAh

2765h:

82h

D=27h

E=65h

1B03h:

??

A=82h

Figura 4-18: Ilustrao para a instruo LD (DE),A.

4.4.3 Endereamento indireto utilizando o par HL.


Em oposio ao subgrupo de instrues que utiliza os pares BC e DE, a utilizao do par de registradores
HL permite:
A transferncia de informao entre o P e a memria utilizando qualquer um dos registradores de 8
bits,
A cpia de um valor constante (imediato de 8 bits) diretamente para uma posio de memria;
A realizao de operaes aritmticas e lgicas entre o contedo do acumulador e a memria;
A realizao de operaes de comparao entre o contedo do acumulador e a memria.
H, ainda, subgrupos de instrues que no foram apresentadas, mas que tambm trabalham com o
ponteiro HL. Elas logo sero abordadas.

IMPORTANTE:
Uma regra prtica que apresenta poucas excees: Pode-se especificar
como operando o ponteiro HL em substituio a qualquer um dos registradores de 8 bits: A, B, C, D, E, H ou L.

Na bibliografia do P 8085 [04], o concorrente do Z80, o contedo apontado pelo par HL recebe a denominao de pseudo-registrado M.
A lista completa das instrues que utilizam o ponteiro HL apresentada abaixo. Devido grande quantidade de instrues, e de algumas j terem sido apresentadas anteriormente, selecionamos apenas alguns
exemplos. Para o detalhamento das demais instrues, consulte a tabela do conjunto de instrues do processador.
ADC
ADD
AND
BIT
CP
DEC

A,(HL)
A,(HL)
(HL)
n,(HL)
(HL)
(HL)

INC
JP
LD
LD
OR
RES

(HL)
(HL)
(HL),reg8
reg8,(HL)
(HL)
n,(HL)

RL
RLC
RR
RRC
SBC
SET

(HL)
(HL)
(HL)
(HL)
A,(HL)
n,(HL)

SLA
SRA
SRL
SUB
XOR

(HL)
(HL)
(HL)
(HL)
(HL)

Figura 4-19: Lista das instrues de endereamento indireto que utilizam o ponteiro HL.

LD reg8,(HL)
LD (HL), reg8

;reg8 (HL)
;(HL) reg8

A transferncia de informao feita entre o registrador de 8 bits especificado e o contedo da posio


de memria apontada pelo para de registradores HL;
Podem ser especificados como registrador de 8 bits: A, B, C, D, E, H ou L;
60

Captulo 4.

Deve-se ter cuidado ao transferir qualquer contedo da memria para os registradores H ou L, pois isto
implica na possvel alterao de seus contedos, e conseqentemente do endereo para o qual apontam;
A instruo ocupa apenas um byte na memria;
Ex.: Analise o seguinte
guir:
LD HL,2200h
LD D,(HL)
INC HL
LD (HL),E
INC HL
LD (HL),0FFh

fragmento de programa abaixo e acompanhe os resultados nas figuras a se-

(veja a Figura 4-20)


(veja a Figura 4-21)
(veja a Figura 4-20).

Lembre-se: A inicializao do contedo do registrador ponteiro deve preceder, em algum momento, a


utilizao do mesmo.

P Z80

Memria
Segmento de Dados

21FFh:

Memria

16 bits

Segmento de Programa

PC=1B56h

SP

IX

IY

??

1B55h:

56h

8 bits

2200h:

05h

1B56h:

23h

2201h:

1Bh

1B57h:

??

2202h:

CAh

D=05h

E=55h

1B58h:

??

H=22h

L=00h

Figura 4-20: Ilustrao para a instruo LD D,(HL).

P Z80

Memria

21FFh:

Memria

16 bits

Segmento de Dados

Segmento de Programa

PC=1B58h

SP

IX

IY

??

1B55h:

56h

1B56h:

23h

1B57h:

73h

1B58h:

23h

8 bits

2200h:

05h

2201h:

55h

2202h:

CAh

D=05h

E=55h

H=22h

L=01h

Figura 4-21: Ilustrao para a instruo LD (HL),E.

P Z80

Memria
Segmento de Dados

21FFh:

Memria

16 bits

Segmento de Programa

PC=1B5Bh

SP

IX

IY

??

1B59h:

36h

8 bits

2200h:

05h

1B5Ah:

FFh

2201h:

55h

1B5Bh:

??

2202h:

CAh

1B5Ch:

??

H=22h

L=02h

Figura 4-22: Ilustrao para a instruo LD (HL),0FFh.

As Instrues do PZ80

61

ADD A,(HL)

;A A + (HL)

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

( ( (
Flags

(
P/V

0 (
N

CY

O contedo do acumulador somado com o contedo da posio de memria apontada pelo par HL.
O resultado copiado para acumulador;
Ex.: LD HL,1500h
ADD A,(HL)

INC (HL)

;A A + (1500h)

;(HL) (HL) + 1

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

( ( (
Flags

P/V

CY

O contedo da posio de memria apontada pelo para HL incrementado de uma unidade;


O nico flag que no afetado o CY.
Ex.: LD HL, 1000h
INR (HL)

XOR (HL)

;(1000h) (1000h) + 1

;A A xor (HL)

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

( ( 0
Flags

P/V

CY

A operao lgica executa bit a bit entre os operandos, ou seja, a funo XOR aplica entre os
bits 0 dos operandos gerando o bit 0 do resultado, e assim acontece para os demais bits;
Todos os flags so afetados, sendo que trs flags sempre apresentaro o mesmo estado: CY, N e
H = 0;
Esta instruo pode ser utilizada para efetuar a operao de complement bit;
Ex.: LD HL, 1200h
XRA H

CP (HL)

;A A xor (1200h)

;A (HL)

Legenda: ( r e f l e t e r e s u l t a d o d a o p e r a o ; ? i n d e t e r m i n a d o ; n o a f e t a d o

( ( (
Flags

(
P/V

1 (
N

CY

O contedo do acumulador comparado com o segundo operando atravs de uma operao de subtrao no destrutiva;
Todos os flags so afetados.

4.5 Instrues de desvio.


As instrues de desvio, de uma forma geral, podem ser divididas em dois grupos: instrues do tipo
jump e instrues do tipo call/return. Neste item veremos as do tipo jump. O outro grupo ser visto posteriormente.
O registrador F (flags) foi implementado no microprocessador para fornecer informaes a respeito do
resultado da ltima operao executada pela ULA, como vimos no item 4.3.1 . O P dispe de um conjunto de
instrues que, em funo destas condies, rompe ou no a seqncia natural de execuo das instrues. A
este tipo instrues damos o nome de instrues de desvio condicional. Com elas poderemos criar as estruturas de programao do tipo if - then - else e outras. o P possui, ainda, instrues que efetuam o desvio de
processamento independente de qualquer condio, so as instrues de desvio incondicional.
As instrues de desvio do tipo jump, sejam condicionais ou incondicionais podem, ainda, ser subdivididas em desvio absoluto e desvio relativo, veja a Figura 4-23.
As instrues de desvio absoluto utilizam o modo de endereamento direto (tambm chamado de estendido, consulte o item 4.4.1.1 ), que tem como caracterstica fazer referncia a uma posio de memria especfica, atravs da utilizao de um operando constante numrica de 16 bits.
As instrues de desvio relativo utilizam o modo de endereamento relativo (consulte o item 4.4.1.4 ) e,
portanto, o endereo apontado constitui uma referncia a uma posio de memria anterior ou posterior a posio da instruo atual.

62

Captulo 4.

Instrues de Desvio

Call
Return

Jump

Absoluto

Incondicional

Absoluto

Relativo

Condicional

Incondicional

Condicional

Incondicional

Condicional

Figura 4-23: Tipos de instruo de desvio.

4.5.1 Instrues de desvio absoluto incondicional.


JP end

;PC end

O endereo especificado como operando da instruo carregado no registrador PC, fazendo com que
o processamento prossiga a partir da posio de memria especificada por end. Nenhum flag testado para se efetuar o desvio, assim como nenhum flag afetado pela execuo da instruo.
Ex.: JP 2200h

JP (HL)

;PC 2200h

;PC HL

14

O contedo do par de registradores HL copiado para o registrador PC, fazendo com que o processamento prossiga a partir da posio de memria especificada pelo contedo de HL. Nenhum flag
testado para se efetuar o desvio;
Deve-se o tomar cuidado de inicializar corretamente o par de registradores HL, pois seu contedo determinar o endereo de prosseguimento da execuo do programa. Caso seja feita de forma inadequada, pode resultar em perda do processamento;
Esta instruo no possui operando.
Ex.: JP (HL)

;Suponha como situao inicial, HL = 0600h, teremos:


;PC 0600h

4.5.2 Instrues de desvio absoluto condicional.


Para cada bit do registrador de flags podemos ter duas condies, como por exemplo: o resultado zero (flag Z = 1) ou o resultado no zero (flag Z = 0). O P utiliza 4 bits do registrador F para implementar as
instrues de desvio teremos, portanto, oito instrues de desvio condicional. Vejamos:

JP P,end

;PC end

se flag S = 0

Jump if positive;
O desvio do processamento cumprido se o resultado da ltima operao foi positivo (flag S = 0), em
caso contrrio o processamento continua na instruo seguinte;

14

Indicador para instrues perigosas. So instrues que podem causar efeitos imprevisveis no processamento se utilizadas de forma
inadequada.

As Instrues do PZ80

63

Ex.: JP P,2100h

JP M,end

;PC 2100h se S = 0

;PC end

se flag S = 1

Jump if minus;
O desvio do processamento cumprido se o resultado da ltima operao foi negativo (flag S = 1),
em caso contrrio o processamento continua na instruo seguinte;
Ex.: JP M,2200h
;PC 2200h se S = 1
(para as demais instrues os exemplos so semelhantes).

JP NZ,end

;PC end

se flag Z = 0

Jump if not zero;


O desvio do processamento cumprido se o resultado da ltima operao foi diferente de zero
(flag Z = 0), em caso contrrio o processamento continua na instruo seguinte;

JP Z,end

;PC end

se flag Z = 1

Jump if zero;
O desvio do processamento cumprido se o resultado da ltima operao foi igual a zero (flag Z = 1),
em caso contrrio o processamento continua na instruo seguinte;

JP PO,end

;PC end

se flag P = 0

Jump if parity odd;


O desvio do processamento cumprido se o resultado da ltima operao implicou no flag P = 0.
Caso tenha sido uma operao lgica, o flag est sinalizando paridade par. Caso tenha sido operao
aritmtica o flag est sinalizando que no ocorreu overflow;

JP PE,end

;PC end

se flag P = 1

Jump if parity even;


O desvio do processamento cumprido se o resultado da ltima operao implicou no flag P = 1.
Caso tenha sido uma operao lgica, o flag est sinalizando paridade mpar. Caso tenha sido operao aritmtica o flag est sinalizando que ocorreu overflow;

JP NC,end

;PC end

se flag CY = 0

Jump if no carry;
O desvio do processamento cumprido se o resultado da ltima operao no implicou em vai-um ou
emprstimo (flag CY = 0). Tendo ocorrido emprstimo ou vai-um (flag CY = 1) o processamento
continua na instruo seguinte;

JP C,end

;PC end

se flag CY = 1

Jump if carry;
O desvio do processamento cumprido se o resultado da ltima operao implicou em vai-um ou
emprstimo (flag CY = 1). Se no ocorreu emprstimo ou vai-um (flag CY = 0) o processamento
continua na instruo seguinte;

4.5.3 Instrues de desvio relativo incondicional.


O desvio calculado pela soma do contedo atual do registrador PC com o operando ee. O valor de ee
deve estar na faixa de 128 a +127. Portanto, esta instruo permite desvios curtos, ou seja, para posies
de memria distante pouco mais de uma centena de bytes anteriores ou posteriores.
64

Captulo 4.

O endereamento relativo conta com um operando de apenas 1 byte. Este byte interpretado como um
valor com sinal (em complemento de 2). Portanto poderemos ter valores que variam entre 128 a +127. O endereamento relativo ocorre pela soma deste valor com o contedo atual do registrado PC. bom ressaltar
que no momento em que ocorreu a busca do operando (o segundo byte da instruo), o contedo do PC ser
PC+2 se comparado com o endereo inicial (antes da busca da instruo acontecer). Ao contedo de PC+2
que ser somado o valor relativo e, portanto, teremos um desvio que pode atingir 126 posies de memria anteriores (126) ou 129 posies de memria posteriores (+129). Veja mais detalhes no item 4.4.1.4 .

JR ee

;PC PC + ee

Jump relative;
Ex.: Assumindo que a instruo esteja armazenada nas posies de memria 1300h e 1301h, teremos:
1300h:
JR 25h
;PC PC+25h
PC 1300h+2+25h

4.5.4 Instrues de desvio relativo condicional.


Veja mais detalhes no item anterior.

JR NC,end

;PC end

se flag CY = 0

Jump relative if no carry;


O endereamento relativo conta com um operando de apenas 1 byte. Este byte interpretado como
um valor com sinal (em complemento de 2). Portanto poderemos ter valores que variam entre 128 a
+127. O endereamento relativo ocorre pela soma deste valor com o contedo atual do registrado PC.
bom ressaltar que no momento em que ocorreu a busca do operando (o segundo byte da instruo),
o contedo do PC ser PC+2 se comparado com o endereo inicial (antes da busca da instruo acontecer). Ao contedo de PC+2 que ser somado o valor relativo e, portanto, teremos um desvio que
pode atingir 126 posies de memria anteriores (126) ou 129 posies de memria posteriores
(+129). Veja mais detalhes no item 4.4.1.4 .
O desvio do processamento cumprido se o resultado da ltima operao no implicou em vai-um ou
emprstimo (flag CY = 0). Tendo ocorrido emprstimo ou vai-um (flag CY = 1) o processamento
continua na instruo seguinte;
Ex.: Assumindo que a instruo esteja armazenada nas posies de memria 1300h e 1301h e flag
CY=1, teremos
1300h:
JR C,25h
;PC PC+25h
PC 1300h+2+25h

JR C,ee

;PC PC + ee

se flag CY = 1

Jump relative if carry;


O desvio do processamento cumprido se o resultado da ltima operao implicou em vai-um ou
emprstimo (flag CY = 1). Se no ocorreu emprstimo ou vai-um (flag CY = 0) o processamento
continua na instruo seguinte;

JR NZ,ee

;PC PC + ee

se flag Z = 0

Jump relative if not zero;


O desvio do processamento cumprido se o resultado da ltima operao foi diferente de zero
(flag Z = 0), em caso contrrio o processamento continua na instruo seguinte;

JR Z,ee

;PC PC + ee

se flag Z = 1

Jump relative if zero;


O desvio do processamento cumprido se o resultado da ltima operao foi igual a zero (flag Z = 1),
em caso contrrio o processamento continua na instruo seguinte;

As Instrues do PZ80

65

4.6 Instrues de subrotina e de pilha.


Na execuo de um programa, muitas vezes necessrio efetuar o mesmo procedimento (clculo ou
operao) em momentos distintos do processamento. Uma soluo simplista para tal fato seria, ao elaborar o
programa, repetir a mesma poro de cdigo quantas vezes fosse necessrio. No entanto, isto implica em um
aumento do tamanho do programa e conseqentemente da memria despendida. Uma soluo mais interessante seria alocar esta poro de cdigo em uma regio de memria, parte do programa principal, de forma
que quando necessrio, pudesse ser utilizada em qualquer momento da execuo. A esta poro de cdigo
chamamos de subrotina.
Para a implementao de programas que utilizem subrotinas, o microprocessador deve dispor de instrues apropriadas para gerar desvios de processamento com possibilidade de retorno, pois o processamento da
subrotina no deve implicar em alterao do fluxo principal da execuo. importante, ainda, que a execuo
de subrotinas possa acontecer de forma aninhada, ou seja, que a execuo de uma subrotina possa ser composta, tambm, pela execuo de outras subrotinas. Veja a Figura 4-24.
As instrues que promovem a chamada e o retorno de subrotinas so do tipo: CALL, RET.
Se a execuo de uma subrotina um tipo de desvio com retorno garantido, o P deve, de alguma forma, guardar o endereo do ponto de onde estava na execuo do programa, antes de gerar o desvio, o que
chamamos de endereo de retorno. Em seguida, deve executar a subrotina (ou subrotinas se ocorrer aninhamento) e ento retomar o processamento de onde havia deixado. A execuo de subrotinas aninhadas pode
demandar o armazenamento de vrios endereos de retorno. Portanto, o P deve dispor de recursos para
permitir tal ocorrncia. Isto nos leva a apresentar a pilha (stack) que uma regio da memria RAM, reservada
pelo programador, utilizada para armazenamento vrios tipos de dados, entre eles, os endereos de retorno
das subrotinas.
Sendo a subrotina um mdulo de programa parte do processamento principal, podem ser passados a
ela os valores com base nos quais o seu processamento ser efetuado. A estes valores chamamos de parmetros de entrada da subrotina. A subrotina, por sua vez, depois de terminado o seu processamento, deve fornecer ao programa principal o(s) valor(es) resultante(s) de seu processamento, que chamamos de parmetros de
sada da subrotina. H, ainda, situaes em que dispomos de subrotinas que no demandam parmetros.
A passagem de parmetros (valores), normalmente, feita atravs do armazenamento destes valores
nos registradores do P. Isto se faz em situaes onde a quantidade
destes valores compatvel com a quantidade de registradores do P.
Caso o nmero de parmetros seja superior, deve-se lanar mo da
Incio
memria RAM, uma boa sugesto utilizar-se da pilha, que permite a
ampliao do nmero dos parmetros de entrada e sada, sendo limitados apenas pela quantidade de memria do equipamento. Utilizando
a pilha, possvel implementar subrotinas que podem chamar a si
call subrot1
prprias, ou seja subrotinas recursivas.
Como acabamos de descrever, durante a execuo de uma subrotina, fatalmente ser necessrio utilizar os registradores do microprocessador para armazenar operandos e resultados. No entanto, fatalmente, nos depararemos com a seguinte situao: estes mesmos
registradores j estavam sendo utilizados pelo processamento do programa principal, ou para a passagem de parmetros, ou armazenam
valores outros que no podem ser perdidos. Teremos, ento, um problema. A soluo para este conflito utilizar um grupo de instrues
que capaz de salvar uma cpia do contedo dos registradores na
memria e depois recuper-la. A regio de memria utilizada para este
salvamento , novamente, a pilha. Este grupo composto das instrues: PUSH e POP. H, ainda, duas outras instrues que se referem
pilha: LD SP,reg16 e EX SP,reg16 que tambm sero vistas nesta seo.
Os dois grupos de instrues que apresentamos acima utilizam
a pilha, uma regio reservada da RAM, para guardar seus dados. Mas,
especificamente, em que posio da memria RAM est a pilha? A indicao da regio da memria que ser utilizada para conter este novo
segmento funo do registrador ponteiro de pilha SP (stack pointer).
Da, imprescindvel que, antes da utilizao de qualquer uma destas
instrues, o registrador SP seja inicializado adequadamente.
At o momento, estvamos trabalhando com apenas 2 tipos diferentes de informao armazenada na memria: programa (ou cdi66

Fim

subrot1:
call subrot2

ret
subrot2:

ret

Figura 4-24: Fluxo de execuo de um


programa com subrotinas.
Captulo 4.

go) e dados, ou seja, a memria estava dividida em dois segmentos. Agora vemos h mais um: o segmento de
pilha. Portanto, um programa possui normalmente trs segmentos de memria: cdigo e dados e pilha.

4.6.1 Instrues de subrotina.


Para efetuar a chamada de uma subrotina temos o grupo de instrues do tipo call que podem ser condicionais ou incondicionais. O mesmo acontece para o retorno da subrotina com o grupo return.
E, mais uma vez, deve-se ressaltar que imprescindvel a inicializao adequada do registrador SP, antes da utilizao de qualquer uma das instrues de subrotina ou de pilha. Devido importncia desta inicializao, um bom estilo de programao colocar a linha de inicializao do SP sempre como a primeira do programa. Veja a Figura 4-25

Inicio:

defseg codigo, absolute


seg codigo
org 0100h
lxi SP,1400h

.....

Figura 4-25: Exemplo de inicializao do registrador SP.

LEMBRETE:

O endereo de retorno de uma chamada de subrotina sempre o endereo da instruo seguinte. Se considerarmos que a instruo do tipo
call est armazenada a partir do endereo end o valor do endereo de
retorno ser end+3.

4.6.1.1 Chamada de subrotina incondicional.

;(SP-1) PCHigh

CALL end

(SP-2) PCLow

PC end

Call subroutine;
A seqncia de eventos que ocorre para a chamada incondicional de uma subrotina a seguinte:
O registrador SP decrementado;
O contedo do byte superior do registrador contador de programa (PCH) copiado para a posio de memria apontada por SP;
O registrador SP decrementado novamente;
O contedo do byte inferior do registrador contador de programa (PCL) copiado para a nova
posio de memria apontada por SP. Enquanto nenhuma outra instruo alterar o contedo
do registrador SP, ele apontar para este ltimo byte empilhado, que chamamos de topo da pilha;
O operando end copiado para o registrador PC;
O processamento desviado para o endereo correspondente ao operando end.
Esta instruo no afeta flags;
Ex.: Assumindo que PC = 1910h e SP = 1F00h, teremos
1910h: CALL

As Instrues do PZ80

0600h

;(1EFFh) 13h (1EFEh) 19h

PC 0600h

67

P Z80

Memria

1910h:

Memria RAM

16 bits

Segmento de Programa

Segmento de Pilha

PC=1910h

SP=1F00h

IX

IY

1EFDh:

??

1EFEh:

??
??
??

CDh
8 bits

1911h:

00h

1912h:

06h

1EFFh:

1913h:

??

1F00h:

Figura 4-26: Ilustrao para a instruo CALL 0600h - O processador vai iniciar a execuo da instruo.

P Z80

Memria
Segmento de Programa

0600h:

Memria RAM

16 bits

Segmento de Pilha

PC=0600h

SP=1EFEh

IX

IY

1EFDh:

??

1EFEh:

13h

1EFFh:

19h

1F00h:

??

??
8 bits

0601h:

??

0602h:

??

0603h:

??

A
B

Figura 4-27: Ilustrao para a instruo CALL 0600h - O processador terminou de executar a instruo.

4.6.1.2 Chamada de subrotina condicional.


A seqncia de eventos que ocorre para a chamada condicional de uma subrotina difere-se da chamada
incondicional apenas pelo fato de que primeiramente feito o teste do flag em questo, para verificar se a
chamada deve ocorrer ou no. Se a condio do flag foi satisfeita, a seqncia de eventos a mesma de apresentada para a instruo CALL end. Como as condies so as mesmas apresentadas nas instrues de
desvio condicional, apresentaremos abaixo apenas a sintaxe das instrues. Em caso de dvidas consulte o item 4.5 na pgina 62.

CALL
CALL
CALL
CALL
CALL
CALL
CALL
CALL

P,end
M,end
NZ,end
Z,end
PO,end
PE,end
NC,end
C,end

;(SP-1)
;(SP-1)
;(SP-1)
;(SP-1)
;(SP-1)
;(SP-1)
;(SP-1)
;(SP-1)

PCHigh
PCHigh
PCHigh
PCHigh
PCHigh
PCHigh
PCHigh
PCHigh

(SP-2)
(SP-2)
(SP-2)
(SP-2)
(SP-2)
(SP-2)
(SP-2)
(SP-2)

PCLow
PCLow
PCLow
PCLow
PCLow
PCLow
PCLow
PCLow

PC
PC
PC
PC
PC
PC
PC
PC

end
end
end
end
end
end
end
end

se
se
se
se
se
se
se
se

flag
flag
flag
flag
flag
flag
flag
flag

S = 0
S = 1
Z = 0
Z = 1
P = 0
P = 1
CY = 0
CY = 1

4.6.1.3 Retorno de subrotina incondicional.

RET

;PCLow (SP)

PCHigh (SP+1)

Return from subroutine;


A seqncia de eventos que ocorre para o retorno incondicional de uma subrotina a seguinte:
O contedo da posio de memria apontada por SP carregado no byte inferior do registrador contador de programa (PCL);
O registrador SP incrementado;
O contedo da nova posio de memria apontada por SP carregado no byte superior do registrador contador de programa (PCH);

68

Captulo 4.

O registrador SP incrementado mais uma vez; O SP passa, agora, a apontar para um byte
que o novo topo da pilha;
O processamento prossegue a partir do endereo correspondente ao contedo dos bytes que
estavam copiados da pilha.
Ex.: RET
Obs.: Suponha que est ocorrendo o retorno da chamada de subrotina ilustrada na Figura 4-26.

P Z80

Memria

1910h:

Memria RAM

16 bits

Segmento de Programa

Segmento de Pilha

PC=1913h

SP=1F00h

IX

IY

1EFDh:

??

1EFEh:

13h
19h
??

CDh
8 bits

1911h:

00h

1912h:

06h

1EFFh:

1913h:

??

1F00h:

Figura 4-28: Ilustrao para a instruo RET, supondo que havia ocorrido um CALL 0600h anteriormente - O
processador terminou de executar a instruo

LEMBRETE:
Um cuidado especial deve ser tomado quando da utilizao das instrues do tipo CALL e RET. Uma regra bsica deve ser seguida:
A todo CALL deve corresponder um RET.
Mais especificamente, quer dizer que em um procedimento, toda vez que
se empilhar um par de bytes eles devem ser desempilhados antes do
trmino do procedimento.

4.6.1.4 Retorno de subrotina condicional.


O grupo de instrues de retorno de subrotina tambm podem ser divido em condicionais e incondicionais, como vimos acima para as chamadas de subrotina. De mesma forma, a diferena na seqncia de eventos ocorridos entre um retorno incondicional e um retorno condicional, que neste ltimo feito o teste do flag
em questo para verificar se o retorno deve ser executado ou no.

RET
RET
RET
RET
RET
RET
RET
RET

P
M
NZ
Z
PO
PE
NC
C

;PCLow
;PCLow
;PCLow
;PCLow
;PCLow
;PCLow
;PCLow
;PCLow

(SP)
(SP)
(SP)
(SP)
(SP)
(SP)
(SP)
(SP)

PCHigh
PCHigh
PCHigh
PCHigh
PCHigh
PCHigh
PCHigh
PCHigh

(SP+1)
(SP+1)
(SP+1)
(SP+1)
(SP+1)
(SP+1)
(SP+1)
(SP+1)

se
se
se
se
se
se
se
se

flag
flag
flag
flag
flag
flag
flag
flag

S = 0
S = 1
Z = 0
Z = 1
P = 0
P = 1
CY = 0
CY = 1

4.6.2 Instrues de pilha.


Como j foi apresentado, a pilha (stack) uma regio da memria RAM reservada, inicialmente, para o
armazenamento de endereos de retorno das subrotinas. Mas existem outras atribuies para a pilha, como a
de armazenar cpias do contedo dos registradores de uso geral do P, ou seja, um tipo de memria rascunho. A pilha pode, ainda, ser utilizada para a passagem de parmetros para as subrotinas.
As Instrues do PZ80

69

O nome pilha vem, exatamente, da sua estrutura de funcionamento, os valores vo sendo armazenados
na memria RAM, um aps o outro, sem que um novo sobrescreva aquele que j havia sido empilhado anteriormente. O ponteiro da pilha, registrador SP, sempre aponta para o ltimo valor empilhado. A este valor chamamos de topo da pilha.
No momento em que necessrio recuperar os valores empilhados, o desempilhamento feito na ordem inversa do empilhamento, como em uma pilha de pratos. Isto caracteriza a pilha como uma estrutura do
tipo LIFO (last in first out).
Outro ponto a destacar sobre a pilha que o empilhamento ocorre no sentido decrescente dos endereos de memria, ou seja, medida que os valores vo sendo empilhados, o ponteiro SP vai sendo decrementado. Uma forma de procurar garantir que sempre haja espao para a pilha inicializar o SP nos endereos
mais elevados da memria RAM.
As instrues de pilha PUSH e POP, tm a funo de permitir salvar uma cpia do contedo de um par
de registradores na pilha e a de recuper-los, respectivamente. Com estas instrues possvel, de certa forma, aumentar a quantidade de registradores da CPU. No existe restrio para o uso destas instrues, e
quase impossvel no us-las na elaborao de subrotinas bem projetadas, pois com o pequeno nmero de registradores disponveis, em uma mudana de contexto, que o caso de uma subrotina, a necessidade de liberar alguns registradores para a execuo do procedimento quase inevitvel.
Veremos mais duas instrues de pilha que podemos classificar como instrues perigosas, pois elas alteram o contedo do registrador SP. Para utiliz-las, o programador deve certificar-se que esta alterao do SP
no implique em uma relocao da pilha para posies de memria que j estejam ocupadas ou que no tenham capacidade de reter corretamente os dados, tais como regies de memria ROM ou regies vazias do
mapa de memria.
Vejamos a sintaxe das instrues:

PUSH reg16

;(SP-1) reg16

High

(SP-2) reg16

Low

Push register pair;


Tem a funo de salvar uma cpia do contedo do par de registradores especificado, na memria;
A seqncia de eventos que ocorre para o empilhamento de um par de registradores a seguinte:
O registrador SP decrementado;
A cpia do contedo do registrador mais significativo (regH) armazenada na posio de memria apontada por SP;
O registrador SP decrementado mais uma vez;
A cpia do contedo do registrador menos significativo (regL) armazenada na nova posio
de memria apontada por SP; Enquanto nenhuma instruo alterar o SP esta posio de memria ser o topo da pilha.
Pode-se especificar como operando qualquer um dos pares registradores: AF, BC, DE, HL, IX ou IY.
Ex.: PUSH HL

PUSH DE

PUSH AF.
P Z80

Memria

1CF3h:

Memria RAM

16 bits

Segmento de Programa

Segmento de Pilha

PC=1CF3h

SP=1F33h

IX

IY

??

1E30h:

??
??

8 bits

1CF3h:

E5h

1E31h:

1CF4h:

??

1E32h:

??

1CF5h:

??

1F33h:

??

H=1Ah

L=02h

Figura 4-29: Ilustrao para a instruo PUSH HL - O processado vai executar a instruo.

70

Captulo 4.

P Z80

Memria

1CF3h:

Memria RAM

16 bits

Segmento de Programa

Segmento de Pilha

PC=1CF4h

SP=1F31h

IX

IY

1E30h:

??

??

8 bits

1E31h:

02h

1E32h:

1Ah

1F33h:

??

1CF3h:

E5h

1CF4h:

??

1CF5h:

??

H=1Ah

L=02h

Figura 4-30: Ilustrao para a instruo PUSH HL - O processador terminou de executar a instruo.

POP reg16

;reg16

Low

(SP)

reg16

High

(SP+1)

Pop register pair;


Tem a funo de recuperar a cpia do contedo de um par de registradores que foi anteriormente salvo na memria;
A seqncia de eventos que ocorre para o desempilhamento de um par de registradores a seguinte:
O contedo da posio de memria apontada por SP copiado para o registrador menos significativo (regL);
O registrador SP incrementado;
O contedo da nova posio de memria apontada por SP copiado para o registrador mais
significativo (regH);
O registrador SP incrementado mais uma vez; O SP passa, agora, a apontar para um byte
que o novo topo da pilha;
Os valores armazenados na pilha no so alterados, apenas o ponteiro SP que sofre alterao.
Pode-se especificar como operando qualquer um dos pares registradores: AF, BC, DE, HL, IX ou IY.
Ex.: POP HL

POP BC

POP AF.
P Z80

Memria

2220h:

Memria RAM

16 bits

Segmento de Programa

Segmento de Pilha

PC=2221h

SP=1E31h

IX

IY

1E30h:

??

??

8 bits

1E31h:

02h

1E32h:

1Ah

1F33h:

??

2221h:

F1h

2222h:

??

2223h:

??

Figura 4-31: Ilustrao para a instruo POP HL - O processador vai executar a instruo.

P Z80

Memria
Segmento de Programa

2220h:

Memria RAM

16 bits

Segmento de Pilha

PC=2222h

SP=1E33h

IX

IY

1E30h:

??

??

8 bits

1E31h:

02h

1E32h:

1Ah

1F33h:

??

2221h:

F1h

2222h:

??

2223h:

??

H=1Ah

L=02h

Figura 4-32: Ilustrao para a instruo POP HL - O processador terminou de executar a instruo.
As Instrues do PZ80

71

IMPORTANTE:

EX.

Um cuidado especial deve ser tomado quando da utilizao das


instrues PUSH e POP. Uma regra bsica deve ser seguida:
A todo PUSH deve corresponder um POP.
Mais especificamente, quer dizer que no fim de um procedimento o tamanho da pilha deve ser o mesmo que o do incio.

Este um exemplo para ilustrar o que no deve ser feito, de acordo com o quadro acima.

Veja que no fragmento de cdigo abaixo a falta da instruo POP BC far com que o processamento se perca.
2010: ...
2011: ...
2012: call 2100h
2015: ...
2016: ...

2100: push BC
2101: push DE
2102: ...
...
...
...
...
2120: pop DE
2121: ret

;SP reg16

LD SP,reg16

Esta uma instruo de transferncia de 16 bits, mas foi includa neste subgrupo devido ao seu
efeito sobre a pilha;
Efetua a copia do contedo do de registrador reg16 para o registrador SP;
Deve-se tomar o cuidado de inicializar adequadamente o registrador fonte, com endereos relativos
que apontem para a rea de memria RAM adequada;
Podem ser especificados como operando reg16 os registradores: HL, IX e IY.
Ex.: LD SP,HL

(veja a Figura 4-33 e a Figura 4-34).

P Z80

Memria
Segmento de Programa

2220h:

Memria RAM

16 bits

Segmento de Pilha

PC=2222h

SP=1F33h

IX

IY

??

1E30h:

??

8 bits

2221h:

??h

1E31h:

??

2222h:

F9h

1E32h:

??

1F33h:

??

2223h:

??

H=11h

L=22h

Figura 4-33: Ilustrao para a instruo LD SP,HL - O processador vai executar a instruo.
.

P Z80

Memria

2220h:

Memria RAM

16 bits

Segmento de Programa

Segmento de Pilha

PC=2223h

SP=1122h

IX

IY

111Fh:

??

1120h:

??
??
??

??
8 bits

2221h:

??h

2222h:

F9h

1121h:

2223h:

??

1122h:

H=11h

L=22h

Figura 4-34: Ilustrao para a instruo LD SP,HL - O processador terminou de executar a instruo.

72

Captulo 4.

EX (SP),reg16

;(SP) 12 reg16

(SP-1) reg16

Low

High

Exchange reg16 with top of stack;


Esta uma instruo de transferncia de 16 bits, mas foi includa neste subgrupo devido ao seu efeito
sobre a pilha;
Efetua a permuta entre o contedo do par de registradores reg16 e as posies de memria apontadas
por SP e SP+1 (TOS - topo da pilha);
Deve-se tomar cuidado na utilizao desta instruo, pois o topo da pilha pode conter o endereo de
retorno de alguma subrotina, e a alterao deste valor constitui um procedimento perigoso, pois pode
implicar na perda da seqncia de processamento.
A alterao causada por esta instruo ocorre apenas no contedo apontado por SP. O registrador SP
propriamente, no alterado;
Podem ser especificados como operando reg16 os registradores: HL, IX e IY.
Ex.: EX (SP),HL

(veja a Figura 4-35 e a Figura 4-36).

P Z80

Memria

22A8h:

Memria RAM

16 bits

Segmento de Programa

Segmento de Pilha

PC=22AAh

SP=1121h

IX

IY

111Fh:

??

1120h:

??

1121h:

BBh

1122h:

AAh

L=66h

??
8 bits

22A9h:

??h

22AAh:

E3h

22ABh:

??

D
H=55h

Figura 4-35: Ilustrao para a instruo EX (SP),HL - O processador vai executar a instruo.
.

P Z80

Memria
Segmento de Programa

22A8h:

Memria RAM

16 bits

Segmento de Pilha

PC=22AAh

SP=1121h

IX

IY

111Fh:

??

1120h:

??

1121h:

66h

1122h:

55h

??
8 bits

22A9h:

??h

22AAh:

E3h

22ABh:

??

A
B

F
C

A
B

H=AAh

L=BBh

Figura 4-36: Ilustrao para a instruo EX (SP),HL - O processador terminou de executar a instruo.

4.7 Instrues de rotao e deslocamento.


As instrues de rotao permitem que se faa a rotao dos bits do acumulador para a esquerda ou para a direita, efeito semelhante ao funcionamento de um shift register. A rotao pode ser feita utilizando-se apenas os oito bits do acumulador, ou com nove bits, onde o flag CY assume o papel de bit mais significativo.

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit 0

CY

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit 0

Figura 4-37: Exemplos de rotaes direita com 8 e 9 bits.


A rotao dos bits pode implicar na diviso inteira, por dois, do valor do registrador em questo, se for
direita, e em uma multiplicao por dois se a rotao for para a esquerda. Para que isto acontea necessrio
uma condio importante: o bit que circula (aquele que empurrado para fora do acumulador) deve ter nvel
As Instrues do PZ80

73

lgico 0, pois em caso contrrio, a rotao no refletir uma multiplicao, ou diviso, por 2. Como nem sempre o possvel garantir estas condies, criou-se o subgrupo das instrues de deslocamento.
O subgrupo de instrues de deslocamento pode ser subdividido em deslocamento lgico e deslocamento aritmtico:
Deslocamento lgico: Empurra-se sempre um bit em nvel lgico 0 para dentro do registrador. Isto
garante a ocorrncia de multiplicaes ou divises por 2;
Deslocamento aritmtico: Quando o deslocamento direita (diviso por 2), promove-se a extenso
de sinal, que obtida atravs da cpia do nvel lgico do bit 7 (bit de sinal) para o bit 6. Isto garante a
manuteno do sinal + ou -. Quando o deslocamento para a esquerda (multiplicao por 2) acontece o mesmo que no deslocamento lgico: um bit em nvel 0 empurrado para dentro do registrador
atravs do bit 0.

4.7.1 Instrues de rotao.


RLCA

;rotaciona acumulador esquerda

Rotate accumulator left with copy to carry;


Instruo especfica para o acumulador. Foi includa no projeto do Z80 para permitir a compatibilidade
com o P 8080;
O contedo do acumulador rotacionado esquerda. O bit 7 empurrado para fora e realimentado
ao acumulador no lugar do bit 0. O bit 7 tambm copiado para o bit CY do registrador de flags;
Ex.: LD A,21h
RLCA

;A 42h

CY

bit 7

CY 0

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit 0

Acumulador

Figura 4-38: Ilustrao do funcionamento da instruo RLCA.

RRCA

;rotaciona acumulador direita

Rotate accumulator right with copy to carry;


Instruo especfica para o acumulador. Foi includa no projeto do Z80 para permitir a compatibilidade
com o P 8080;
O contedo do acumulador rotacionado direita. O bit 0 empurrado para fora e realimentado ao
acumulador no lugar do bit 7. O bit 0 tambm copiado para o bit CY do registrador de flags;
Ex.: LD A,21h
RRCA

;A 10h

CY

bit 7

CY 1

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit 0

Acumulador

Figura 4-39: Ilustrao do funcionamento da instruo RRCA.

RLA

;rotaciona CY e acumulador esquerda


Rotate left accumulator;
Instruo especfica para o acumulador. Foi includa no projeto do Z80 para permitir a compatibilidade
com o P 8080;

74

CAPTULO 4.

O contedo do acumulador e o bit CY so rotacionados esquerda. O bit 7 empurrado para fora do


acumulador e copiado para o CY. O contedo anterior do CY empurrado para o acumulador no
lugar do bit 0;
Ex.: LD A,21h
SCF
RLA

;CY 1
;A 43h

CY

bit 7

CY 0

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit 0

Acumulador

Figura 4-40: Ilustrao para o funcionamento da instruo RLA.

RRA

;rotaciona CY e acumulador direita


Rotate right accumulator;
Instruo especfica para o acumulador. Foi includa no projeto do Z80 para permitir a compatibilidade
com o P 8080;
O bit CY e o contedo do acumulador so rotacionados direita. O bit 0 empurrado para fora do
acumulador e copiado para o CY.O contedo anterior do CY empurrado para o acumulador no
lugar do bit 7;
Ex.: LD A,21h
SCF
RRA

;CY 1
;A 90h

CY

bit 7

CY 1

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit 0

Acumulador

Figura 4-41: Ilustrao para o funcionamento da instruo RRA.

RLC reg8
RLC (HL)

;rotaciona o registrador esquerda


;rotaciona posio de memria esquerda

Rotate register (or memory contents) left with copy to carry;


O operando reg8 corresponde a um dos registradores de 8 bits: A, B, D, D, E, H e L;
H variantes desta instruo que utilizam os ponteiros IX e IY;
O contedo do registrador (ou da posio memria) rotacionado esquerda. O bit 7 empurrado
para fora e realimentado ao registrador (ou da posio memria) no lugar do bit 0. O bit 7 tambm
copiado para o bit CY do registrador de flags;
Ex.: LD B,21h
RLC B

;B

CY

42h

bit 7

CY 0

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit 0

Registrador ou memria

Figura 4-42: Ilustrao do funcionamento da instruo RLC.

RRC reg8
RRC (HL)

;rotaciona o registrador direita


;rotaciona posio de memria direita

Rotate register (or memory contents) right with copy to carry;


O operando reg8 corresponde a um dos registradores de 8 bits: A, B, D, D, E, H e L;
H variantes desta instruo que utilizam os ponteiros IX e IY;
As Instrues do PZ80

75

O contedo do registrador (ou da posio memria) rotacionado direita. O bit 0 empurrado para
fora e realimentado ao registrador (ou da posio memria) no lugar do bit 7. O bit 0 tambm copiado para o bit CY do registrador de flags;
Ex.: LD D,21h
RRC D

;D

CY

10h

bit 7

CY 1

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit 0

Registrador ou memria

Figura 4-43: Ilustrao do funcionamento da instruo RRC.

RL reg8
RL (HL)

;rotaciona CY e registrador esquerda


;rotaciona CY e memria esquerda

Rotate left;
O operando reg8 corresponde a um dos registradores de 8 bits: A, B, D, D, E, H e L;
H variantes desta instruo que utilizam os ponteiros IX e IY;
O contedo do registrador (ou da posio memria) e o bit CY so rotacionados esquerda. O bit 7
empurrado para fora do registrador (ou da posio memria) e copiado para o CY.O contedo anterior do CY empurrado para o registrador (ou para a posio memria) no lugar do bit 0;
Ex.: LD E,21h
SCF
RL E

;CY 1
;E 43h

CY

bit 7

CY 0

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit 0

Registrador ou memria

Figura 4-44: Ilustrao para o funcionamento da instruo RL.

RR reg8
RR (HL)

;rotaciona CY e registrador direita


;rotaciona CY e memria direita

Rotate right;
O operando reg8 corresponde a um dos registradores de 8 bits: A, B, D, D, E, H e L;
H variantes desta instruo que utilizam os ponteiros IX e IY;
O bit CY e o contedo do registrador (ou da posio memria) so rotacionados direita. O bit 0
empurrado para fora do registrador (ou da posio memria) e copiado para o CY. O contedo anterior do CY empurrado para o registrador (ou para a posio memria) no lugar do bit 7;
Ex.: LD E,21h
SCF
RR E

;CY 1
;E 90h

CY

bit 7

CY 1

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit 0

Registrador ou memria

Figura 4-45: Ilustrao para o funcionamento da instruo RR.

76

CAPTULO 4.

4.7.2 Instrues de deslocamento.


SLA reg8
SLA (HL)

;deslocamento aritmtico do reg. esquerda


;deslocamento aritmtico da memria esquerda

Shift left arithmetic;


O operando reg8 corresponde a um dos registradores de 8 bits: A, B, D, D, E, H e L;
H variantes desta instruo que utilizam os ponteiros IX e IY;
O contedo do registrador (ou da posio memria) deslocado para a esquerda. O bit 7 empurrado para fora do registrador (ou da posio memria) e copiado para o CY.Os demais bits so empurrados para a esquerda. O bit 0 levado ao nvel 0.
Ex.: LD A,21h
SLA A

;A

CY

42h

bit 7

CY 0

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit 0

Registrador ou memria

Figura 4-46: Ilustrao para o funcionamento da instruo SLA.

SRA reg8
SRA (HL)

;deslocamento aritmtico do reg. direita


;deslocamento aritmtico da memria direita

Shift right arithmetic;


O operando reg8 corresponde a um dos registradores de 8 bits: A, B, D, D, E, H e L;
H variantes desta instruo que utilizam os ponteiros IX e IY;
O contedo do registrador (ou da posio memria) deslocado direita. O bit 0
O bit 0 empurrado para fora do registrador (ou da posio memria) e copiado para o CY.Os demais bits so deslocados direita, exceto o bit 7 que ter seu contedo copiado para o bit 6;
Ex.: LD A,81h
SLA A

;A

CY

C0h

bit 7

CY 1

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit 0

Registrador ou memria

Figura 4-47: Ilustrao para o funcionamento da instruo SRA.

4.8 Instrues de entrada e sada.


No incio deste captulo vimos que o P dispe de instrues que viabilizam a movimentao dados entre seus registradores e a memria. O grupo que apresentaremos a seguir, permite ao microprocessador transferir dados, agora, para dispositivos perifricos ligados a ele, as portas de entrada e sada15, e assim comunicar-se com o mundo exterior. Reveja a Figura 1-7 na pgina 9.
Assim como ocorre para as posies de memria que so identificadas atravs de nmeros - endereos
de memria, os dispositivos de E/S tambm so numerados, portanto temos tambm endereos de E/S. Mas
como os dispositivos de memria e de E/S, que esto todos interligados aos barramentos do P conseguem
discernir se o endereo que o P colocou no barramento (de endereos) corresponde a uma posio de memria para ou a um dispositivo de E/S. A resposta : o processador dispe de dois pinos de controle: MREQ e

IORQ que respectivamente sinalizam para os dispositivos uma requisio (RQ = request) para memria ou para

15

O termo original em ingls I/O port, cuja traduo literal porto de E/S. No entanto, comum utilizar porta de E/S.

As Instrues do PZ80

77

E/S (ou I/O). Veja na figura abaixo, um recorte da Figura 1-5, da pgina 7, que apresenta o detalhamento da
pinagem do Z80.

Figura 4-48: Detalhe dos pinos de controle do Z80.


Dependendo do tipo de instruo de E/S utilizada, o P Z80 pode chegar a enderear at 216 dispositivos de E/S (capacidade que pouco utilizada). Novamente, assim como h um mapa de memria, tem-se
tambm, o mapa de E/S.

IN A,(port)

;A (port)

O acumulador carregado com o contedo de 8 bits lido do dispositivo de E/S cujo endereo especificado pelo operando port. Ou em outras palavras: o P efetua uma operao de leitura da porta de
E/S de endereo port.
Ex.: IN A,(07h)

OUT (port),A

;A (ES_07h)16

;(port) A

O contedo do acumulador copiado para o dispositivo de E/S cujo endereo especificado pelo operando port. Ou em outras palavras: o P efetua a uma operao de escrita na porta de endereo
port.
Ex.: OUT (80h),A

IN reg8,(C)

;(ES_80h) A

;reg8 (port_BC)

O operando reg8 corresponde a um dos registradores de 8 bits: A, B, D, D, E, H e L;


O registrador especificado carregado com o contedo de 8 bits lido do dispositivo de E/S cujo endereo de 16 bits especificado pelo contedo par de registradores BC. Ou em outras palavras: o P efetua uma operao de leitura da porta de E/S de endereo apontado por BC.
Esta instruo, por utilizar o endereamento de um par de registradores e permite que se possa selecionar at 216 = 65.536 dispositivos de E/S;
Ex.: LD BC,1122h
IN D,(C)

OUT (C),reg8

;D (ES_1122h)

;(port_BC) reg8

O operando reg8 corresponde a um dos registradores de 8 bits: A, B, D, D, E, H e L;


O contedo do registrador especificado copiado para o dispositivo de E/S cujo endereo de 16 bits
especificado pelo contedo par de registradores BC. Ou em outras palavras: o P efetua uma operao
de escrita na porta de E/S de endereo apontado por BC.
Esta instruo, por utilizar o endereamento de um par de registradores, permite que se possa selecionar at 216 = 65.536 dispositivos de E/S;
Ex.: LD BC,3344h
IN (C),H

16

;(ES_3344h) H

A incluso do prefixo ES_ tem apenas a funo de ressaltar que a especificao de um endereo de E/S.

78

CAPTULO 4.

O Z80 dispe ainda de mais 4 pares de instrues de E/S que no sero abordadas.

4.9 Instrues de controle da CPU.


NOP

;nenhuma operao executada


Esta instruo tem o propsito de gerar um atraso no processamento, uma vez que nenhuma operao
executada, assim como nenhum flag alterado.

HALT

;parar o processamento

Esta instruo tem o propsito de gerar um atraso no processamento, uma vez que nenhuma operao
executada, assim como nenhum flag alterado.

As Instrues do PZ80

79

APNDICE A.
A. O CDIGO ASCII.
Principais caractersticas. o cdigo padro para a representao de caracteres alfanumricos; Pode ser utilizado para troca de informaes entre qualquer tipo
de sistema computacional; Inicialmente utilizou-se de 7 bits e, portanto, permitia representar um elenco de 128 caracteres alfabticos, numricos, pontuao, etc.; Atualmente foi expandido e utiliza 8 bits. Os 128 caracteres que foram acrescidos no so padronizados, e podem variar de pas para pas.
Veja, abaixo um exemplo da Tabela ASCII para o idioma portugus (PC860):

D
E
C
I
M
A
L

H
E
X
A
D
E
C
I
M
A
L

O Cdigo ASCII.

81

Apndice B.
B. O CONJUNTO COMPLETO DE INSTRUES DO Z80.
B.1 Instrues de Transferncia de 8 bits.
Mnemonic

Symbolic
Operation

Flags
S Z F5 H F3 P/V N C

LD r, r
LD p, p*

r r
p p

LD q, q*
LD r, n
LD p, n*

LD q, n*

LD r, (HL)
LD r, (IX + d)

LD r, (IY + d)

LD (HL), r
LD (IX + d), r

LD (IY + d), r

LD (HL), n
LD (IX + d), n

LD (IY + d), n

LD A, (BC)
LD A, (DE)
LD A, (nn)

LD (BC), A
LD (DE), A
LD (nn), A

LD A, I
LD A, R
LD I, A
LD R, A
Notes:

Flag Notation:

Opcode
76 543 210

Hex

No. of
Bytes

No. of
M
Cycles
1
2

No. of
T
States
4
8

Comments

01 r
r
1
r, r Reg.
11 011 101
DD
2
000 B
01 p p
001 C

11 111 101
FD
2
2
8
010 D
q q
01 q q
011 E

00 r 110
2
2
7
100 H
rn
101 L
n

11 011 101
DD
3
3
11
111 A
pn
00 p 110
p, p Reg.
n

11 111 101
FD
3
3
11
000 B
qn
00 q 110
001 C
010 D
n

01 r 110
1
2
7
011 E
r (HL)

11 011 101
DD
3
5
19
100 IXH
r (IX + d)
101 IXL
01 r 110
111 A
d

11 111 101
FD
3
5
19
r (IY + d)
01 r 110
q, q Req.
000 B
d

01 110 r
1
2
7
001 C
(HL) r

11 011 101
DD
3
5
19
010 D
(IX + d) r
01 110 r
011 E
100 IYH
d

11 111 101
FD
3
5
19
101 IYL
(IY + d) r
111 A
01 110 r
d

00 110 110 36
2
3
10
(HL) n
n
11 011 101
DD
4
5
19
(IX + d) n
00 110 110
36
d
n
11 111 101
FD
4
5
19
(IY + d) n
00 110 110
36
d
n

00 001 010 0A
1
2
7
A (BC)

00 011 010 1A
1
2
7
A (DE)

00 111 010 3A
3
4
13
A (nn)
n
n

00 000 010 02
1
2
7
(BC) A

00 010 010 12
1
2
7
(DE) A

00 110 010 32
3
4
13
(nn) A
n
n
11 101 101
ED
2
2
9
AI
b b b 0 b IFF2 0
01 010 111
57
11 101 101
ED
2
2
9
R is read after it
AR
b b b 0 b IFF2 0
01 011 111
5F
is increased.

11 101 101
ED
2
2
9
IA
01 000 111
47

11 101 101
ED
2
2
9
R is written after
RA
01 001 111
4F
it is increased.
r, r means any of the registers A, B, C, D, E, H, L.
p, p means any of the registers A, B, C, D, E, IXH, IXL.
q, q means any of the registers A, B, C, D, E, IYH, IYL.
ddL, ddH refer to high order and low order eight bits of the register respectively.
* means unofficial instruction.
= flag is not affected, 0 = flag is reset, 1 = flag is set,
b = flag is set according to the result of the operation, IFF2 = the interrupt flip-flop 2 is copied.

O Conjunto Completo de Instrues do Z80.

83

B.2 Instrues de Transferncia de 16 bits.


Mnemonic
LD dd, nn

Symbolic
Operation
dd nn

Flags
S Z F5 H F3 P/V N C

LD IX, nn

IX nn

LD IY, nn

IY nn

LD HL, (nn)

L (nn)
H (nn+1)

LD dd, (nn)

ddL (nn)
ddH (nn+1)

LD IX, (nn)

IXL (nn)
IXH (nn+1)

LD IY, (nn)

IYL (nn)
IYH (nn+1)

LD (nn), HL

(nn) L
(nn+1) H

LD (nn), dd

(nn) ddL
(nn+1) ddH

LD (nn), IX

(nn) IXL
(nn+1) IXH

LD (nn), IY

(nn) IYL
(nn+1) IYH

LD SP, HL
LD SP, IX

SP HL
SP IX

LD SP, IY

SP IY

PUSH qq


1
3
11
qq Pair
SP SP - 1
00 BC
(SP) qqH
01 DE
SP SP - 1
10 HL
(SP) qqL

11 011 101 DD
2
4
15
11 AF
SP SP - 1
11 100 101 E5
(SP) IXH
SP SP - 1
(SP) IXL

11 111 101 FD
2
4
15
SP SP - 1
11 100 101 E5
(SP) IYH
SP SP - 1
(SP) IYL

11 qq0 001
1
3
10
(SP) qqL
SP SP + 1
(SP) qqH
SP SP + 1

11 011 101 DD
2
4
14
(SP) IXL
11 100 001 E1
SP SP + 1
(SP) IXH
SP SP + 1

11 111 101 FD
2
4
14
(SP) IYL
11 100 001 E1
SP SP + 1
(SP) IYH
SP SP + 1
dd is any of the register pair BC, DE, HL, SP.
qq is any of the register pair BC, DE, HL, AF.
= flag is not affected, 0 = flag is reset, 1 = flag is set, b = flag is set according to the result of the operation.

PUSH IX

PUSH IY

POP qq

POP IX

POP IY

Notes:
Flag Notation:
84

Opcode
76 543 210
00 dd0 001
n
n
11 011 101
00 110 001
n
n
11 111 101
00 110 001
n
n
00 101 010
n
n
11 101 101
01 dd1 011
n
n
11 011 101
00 101 010
n
n
11 111 101
00 101 010
n
n
00 100 010
n
n
11 101 101
01 dd0 011
n
n
11 011 101
00 100 010
n
n
11 111 101
00 100 010
n
n
11 111 001
11 011 101
11 111 001
11 111 101
11 111 001
11 qq0 101

No. of
Bytes
3

No. of M
Cycles
3

No. of T
States
10

DD
21

14

FD
21

14

2A

16

ED

20

DD
2A

20

FD
2A

20

22

16

DD

20

DD
22

20

FD
22

20

F9
DD
F9
FD
F9

1
2

1
2

6
10

10

Hex

Comments
dd Pair
00 BC
01 DE
02 HL
03 SP

Apndice B.

B.3 Instrues de Permuta, Transferncia de blocos e Pesquisa de grupos.


Mnemonic
EX DE, HL
EX AF, AF
EXX

EX (SP), HL
EX (SP), IX
EX (SP), IY
LDI

LDIR

LDD

LDDR

CPI

CPIR

CPD

CPDR

Notes:

Flag Notation:

Symbolic
Flags
Opcode
No.of
No.of M No.of T
Operation
S Z F5 H F3 P/V N C
76 543 210 Hex
Bytes
Cycles
States
Comments

11 101 011 EB
1
1
4
DE HL

00 001 000 08
1
1
4
AF AF

11 011 001 D9
1
1
4
BC BC
DE DE
HL HL

11 100 011 E3
1
5
19
(SP+1) H
(SP) L
11 011 101 DD
2
6
23
(SP+1) IXH
11 100 011 E3
(SP) IXL
11 111 101 FD
2
6
23
(SP+1) IYH
11 100 011 E3
(SP) IYL
1
2
3
11 101 101 ED
2
4
16
(DE) (HL)
b 0 b b 0
10 100 000 A0
DE DE+ 1
HL HL + 1
BC BC - 1
1
2
11 101 101 ED
2
5
21
if BC 0
(DE) (HL)
b 0 b 0 0
10 110 000 B0
2
4
16
if BC = 0
DE DE + 1
HL HL + 1
BC BC - 1
repeat until:
BC = 0
1
2
3
11 101 101 ED
2
4
16
(DE) (HL)
b 0 b b 0
10 101 000 A8
DE DE - 1
HL HL - 1
BC BC - 1
1
2
11 101 101 ED
2
5
21
(DE) (HL)
if BC 0
b 0 b 0 0
10 111 000 B8
2
4
16
if BC = 0
DE DE - 1
HL HL - 1
BC BC - 1
repeat until:
BC = 0
4
4
5
4
6
3
11 101 101 ED
2
4
16
A - (HL)
b b b b b b 1
10 100 001 A1
HL HL + 1
BC BC -1
4
4
5
4
6
3
A - (HL)
11 101 101 ED
2
5
21
if BC 0 and
b b b b b b 1
10 110 001 B1
HL HL + 1
A (HL).
2
4
16
BC BC -1
if BC = 0 or
A = (HL)
Repeat until:
A = (HL) or
BC = 0
4
4
5
4
6
3
A - (HL)
11 101 101 ED
2
4
16
b b b b b b 1
10 101 001 A9
HL HL - 1
BC BC -1
4
4
5
4
6
3
A - (HL)
11 101 101 ED
2
5
21
if BC 0 and
b b b b b b 1
10 111 001 B9
HL HL - 1
A (HL).
2
4
16
BC BC -1
if BC = 0 or
A = (HL)
Repeat until:
A = (HL) or
BC = 0
1
F5 is a copy of bit 1 of A + last transferred byte, thus (A + (HL))1
2
F3 is a copy of bit 3 of A + last transferred byte, thus (A + (HL))3
3
P/V flag is 0 if the result of BC - 1 = 0, otherwise P/V = 1.
4
These flags are set as in CP (HL)
5
F5 is copy of bit 1 of A - last compared address - H, thus (A - (HL) - H)1. H is as in F after the comparison.
6
F3 is copy of bit 3 of A - last compared address - H, thus (A - (HL) - H)3. H is as in F after the comparison.
= flag is not affected, 0 = flag is reset, 1 = flag is set, b = flag is set according to the result of the operation.

O Conjunto Completo de Instrues do Z80.

85

B.4 Instrues Aritmticas de 8 bits.


Mnemonic
ADD A, r
ADD A, p*

Symbolic
Operation
AA+r
AA+p

Flags
S Z F5 H F3 P/V N C
b b b b b V 0 b
b b b b b V 0 b

ADD A, q*

AA+q

b b

ADD A, n

AA+n

b b

ADD A, (HL)
A A + (HL)
ADD A, (IX + d) A A + (IX + d)

b b
b b

b
b

b
b

b
b

V
V

0
0

b
b

ADD A, (IY + d) A A + (IY + d)

b b

ADC A, s
SUB A, s
SBC A, s
AND s
OR s

A A + s + CY
AA- s
A A - s - CY
A A AND s
A A OR s

b
b
b
b
b

b
b
b
b
b

b
b
b
b
b

b
b
b
1
0

b
b
b
b
b

V
V
V
P
P

0
1
1
0
0

b
b
b
0
0

XOR s
CP s
INC r
INC p*

A A XOR s
A-s
rr+1
pp+1

b
b
b
b

b
b
b
b

b
1
b
b
b

0
b
b
b

b
1
b
b
b

P
V
V
V

0
1
0
0

0
b

INC q*

qq+1

b b

INC (HL)
INC (IX + d)

(HL) (HL) + 1
(IX + d)
(IX + d) + 1

b b
b b

b
b

b
b

b
b

V
V

0
0

INC (IY + d)

(IY + d)
(IY + d) + 1

b b

DEC m

mm-1

b b

Notes:

Flag Notation:

Opcode
76 543 210
10 000 r
11 011 101
10 000 p
11 111 101
10 000 q
11 000 110
n
10 000 110
11 011 101
10 000 110
d
11 111 101
10 000 110
d
001
010
011
100
110
101
111
00 r 100
11 011 101
00 p 100
11 111 101
00 q 100
00 110 100
11 011 101
00 110 100
d
11 111 101
00 110 100
d
101

DD

No.of
Bytes
1
2

No.of M
Cycles
1
2

FD

DD

1
3

2
5

No.of T
States Comments
4
r
Reg. p
8
000 B
000
001 C
001
8
010 D
010
011 E
011
8
100 H
100
101 L
101
7
111 A
111
19

FD

19

Hex

Reg.
B
C
D
E
IXH
IXH
A

s is any of r, n, (HL),
(IX+d), (IY+d), p, q
as shown for the ADD
instruction. The
underlined bits replace
the underlined bits in
the ADD set.
DD

1
2

1
2

4
8

FD

DD

1
3

3
6

11
23

FD

23

q
000
001
010
011
100
101
111

Reg.
B
C
D
E
IYH
IYL
A

m is any of r, p, q,
(HL), (IX+d), (IY+d),
as shown for the INC
instruction. DEC same format and states
as INC. Replace 100
with 101 in opcode.

F5 and F3 are copied from the operand (s), not from the result of (A - s).
The V symbol in the P/V flag column indicates that the P/V flags contains the overflow of the operation. Similarly the P symbol indicates parity.
r means any of the registers A, B, C, D, E, H, L.
p means any of the registers A, B, C, D, E, IXH, IXL.
q means any of the registers A, B, C, D, E, IYH, IYL.
ddL, ddH refer to high order and low order eight bits of the register respectively.
CY means the carry flip-flop.
* means unofficial instruction.
= flag is not affected, 0 = flag is reset, 1 = flag is set, b = flag is set according to the result of the operation.

B.5 Instrues Aritmticas de 16 bits.


Flags
S Z F5 H F3 P/V N C
2
2
2
1
b b b 0 b
1
1
2
2
2
1
1
b b b b b V 0 b

SBC HL, ss

Symbolic
Operation
HL HL + ss
HL HL + ss +
CY
HL HL - ss - CY

b b

ADD IX, pp

IX IX + pp

ADD IY, rr

IY IY + rr

INC ss
INC IX

ss ss + 1
IX IX + 1

Mnemonic
ADD HL, ss
ADC HL, ss

86

Opcode
76 543 210
00 ss1 001
11 101 101
01 ss1 010
11 101 101
01 ss0 010
11 011 101
00 pp1 001
11 111 101
00 rr1 001
00 ss0 011
11 011 101
00 100 011

ED

No.of
Bytes
1
2

No.of M
Cycles
3
4

No.of T
States
11
15

ED

15

DD

15

FD

15

1
2

1
2

6
10

Hex

DD
23

Comments
ss
Reg.
00 BC
01 DE
10 HL
11 SP
pp
00
01
10
11

Reg.
BC
DE
IX
SP

Apndice B.

Symbolic
Operation
IY IY + 1

Mnemonic
INC IY
DEC ss
DEC IX
DEC IY
Notes:

Flag Notation:

Flags
S Z F5 H F3 P/V N C

Opcode
No.of
No.of M No.of T
76 543 210 Hex
Bytes Cycles States
Comments
11 111 101 FD
2
2
10
rr
Reg.
00 BC
00 100 011 23

00 ss1 011
1
1
6
01 DE
ss ss - 1

11 011 101 DD
2
2
10
10 IY
IX IX - 1
00 101 011 2B
11 SP

11 111 101 FD
2
2
10
IY IY - 1
00 101 011 2B
The V symbol in the P/V flag column indicates that the P/V flags contains the overflow of the operation.
ss means any of the registers BC, DE, HL, SP.
pp means any of the registers BC, DE, IX, SP.
rr means any of the registers BC, DE, IY, SP.
16 bit additions are performed by first adding the two low order eight bits, and then the two high order eight bits.
1
Indicates the flag is affected by the 16 bit result of the operation.
2
Indicates the flag is affected by the 8 bit addition of the high order eight bits.
CY means the carry flip-flop.
= flag is not affected, 0 = flag is reset, 1 = flag is set, b = flag is set according to the result of the operation.

B.6 Instrues de propsito geral e de controle da CPU


Mnemonic
DAA

CPL
4
NEG
CCF
SCF
NOP
HALT
3
DI
3

EI

IM 0

Symbolic
Operation
Converts A into packed BCD following
add or subtract with
BCD operands.
__
AA
A0-A
__
CY CY
CY 1
No operations
CPU halted
IFF1 0
IFF2 0
IFF1 1
IFF2 1
Set interrupt mode 0

Flags
Opcode
S Z F5 H F3 P/V N C 76 543 210
b b b b b P b 00 100 111

1
b


b b

b
b

1
1

b
b

Hex
27

No.of
Bytes
1

No.of M No.of T
Cycles States Comments
1
4

2F
ED
44
3F

1
2

1
2

4
8

Ones complement.
Twos complement.

00 101 111
b 11 101 101
01 000 100
b 00 111 111

Complement carry
flag.

00 110 111
00 000 000
01 110 110
11 110 011

37
00
76
F3

1
1
1
1

1
1
1
1

4
4
4
4

11 111 011

FB

11 101 101 ED
2
2
8
01 000 110 46
4
IM 1
Set interrupt mode 1 11 101 101 ED
2
2
8
01 010 110 56
4
IM 2
Set interrupt mode 2 11 101 101 ED
2
2
8
01 011 110 5E
Notes:
The V symbol in the P/V flag column indicates that the P/V flags contains the overflow of the operation. Similarly the
P symbol indicates parity.
1
F5 and F3 are a copy of bit 5 and 3 of register A
_
2
H contains the previous carry state (after instruction H C)
3
No interrupts are issued directly after a DI or EI.
4
This instruction has other unofficial opcodes, see Opcodes list.
CY means the carry flip-flop.
Flag Notation:
= flag is not affected, 0 = flag is reset, 1 = flag is set, b = flag is set according to the result of the operation.

B.7 Instrues de Rotao e Deslocamento


Flags
S Z




b b

F5
b
b
b
b
b

H
0
0
0
0
0

F3
b
b
b
b
b

P/V

N
0
0
0
0
0

RLC (HL)

b b

RLC (IX + d)

b b

RLC (IY + d)

b b

Mnemonic
RLCA
RLA
RRCA
RRA
RLC r

Symbolic
Operation

O Conjunto Completo de Instrues do Z80.

Opcode
76 543 210
00 000 111
00 010 111
00 001 111
00 011 111
11 001 011
00 000 r
b 11 001 011
00 000 110
b 11 011 101
11 001 011
d
00 000 110
b 11 111 101
11 001 011

C
b
b
b
b
b

Hex
07
17
0F
1F
CB

No. of
Bytes
1
1
1
1
2

No. of M
Cycles
1
1
1
1
2

No. of T
States
4
4
4
4
8

CB

15

DD
CB

23

FD
CB

23

Comments

r
000
001
010
011
100
101
111

Reg.
B
C
D
E
H
L
A

87

Symbolic
Operation

Mnemonic

LD r,RLC (IX + d)* r (IX + d)


RLC r
(IX + d) r
LD r,RLC (IY + d)* r (IY + d)
RLC r
(IY + d) r
RL m
RRC m
RR m
SLA m
SLL m*
SRA m
SRL m
RLD
RRD

Flags
Opcode
S Z F5 H F3 P/V N C 76 543 210
d
00 000 110
b b b 0 b P 0 b 11 011 101
11 001 011
d
00 000 r
b b b 0 b P 0 b 11 111 101
11 001 011
d
00 000 r
010
b b b 0 b P 0 b
001
b b b 0 b P 0 b
011
b b b 0 b P 0 b
100
b b b 0 b P 0 b
110
b b b 0 b P 0 b
101
b b b 0 b P 0 b
111
b b b 0 b P 0 b
b b b 0 b P 0 11 101 101
01 101 111
b b

Notes:

11 101 101
01 100 111

No. of
Bytes

No. of M No. of T
Cycles
States

DD
CB

23

FD
CB

23

Hex

Comments

Instruction format
and states are the
same as RLC.
Replace 000 with
new number.

ED
6F

18

ED
67

18

The P symbol in the P/V flag column indicates that the P/V flags contains the parity of the result.
r means any of the registers A, B, C, D, E, H, L.
* means unofficial instruction.
CY means the carry flip-flop.
= flag is not affected, 0 = flag is reset, 1 = flag is set, b = flag is set according to the result of the operation.

Flag Notation:

B.8 Instrues de Manipulao de bit.


Mnemonic
BIT b, r
BIT b, (HL)
5

BIT b, (IX + d)

Symbolic
Operation
_
Z rb
___
Z (HL)b
_____
Z (IX + d)b

Flags
Opcode
S Z F5 H F3 P/V N C 76 543 210
1
2
3
4
b b b 1 b b 0 11 001 011
01 b r
1
2
3
4
b b b 1 b b 0 11 001 011
01 b 110
1
2
3
4
b b b 1 b b 0 11 011 101
11 001 011
d
01 b 110
1
2
3
4
b b b 1 b b 0 11 111 101
11 001 011
d
01 b 110
11 001 011
11 b r

BIT b, (IY + d)

_____
Z (IY + d)b

SET b, r

rb 1

SET b, (HL)

(HL)b 1

SET b, (IX + d)

(IX + d)b 1

SET b, (IY + d)

(IY + d)b 1

LD r,SET b, (IX + d)*

r (IX + d)
rb 1
(IX + d) r

LD r,SET b, (IY + d)*

r (IY + d)
rb 1
(IY + d) r

RES b, m

mb 0
m r, (HL),
(IX+d), (IY+d)

88

11 001 011
11 b 110
11 011 101
11 001 011
d
11 b 110
11 111 101
11 001 011
d
11 b 110
11 011 101
11 001 011
d
11 b r
11 111 101
11 001 011
d
11 b r
10

Hex
CB

No. of No. of M No. of T


Bytes Cycles
States
2
2
8

CB

12

DD
CB

20

FD
CB

20

CB

CB

15

DD
CB

23

FD
CB

23

DD
CB

23

FD
CB

23

Comments
r
Reg.
000 B
001 C
010 D
011 E
100 H
101 L
111 A

b
000
001
010
011
100
101
110
111

Bit.
0
1
2
3
4
5
6
7

To form new
opcode replace 11 of
SET b, s with
10. Flags and
states are the
same.

Apndice B.

Mnemonic
Notes:

Flag Notation:

Symbolic
Flags
Opcode
No. of No. of M No. of T
Operation
S Z F5 H F3 P/V N C 76 543 210 Hex
Bytes Cycles
States
Comments
The notation mb indicates bit b (0 to 7) of location m.
BIT instructions are performed by an bitwise AND.
1
S is set if b = 7 and Z = 0
2
F5 is set if b = 5 and Z = 0
3
F3 is set if b = 3 and Z = 0
4
P/V is set like the Z flag
5
This instruction has other unofficial opcodes
* means unofficial instruction.
= flag is not affected, 0 = flag is reset, 1 = flag is set, b = flag is set according to the result of the operation.

B.9 Instrues de Entrada e Sada


Mnemonic
IN A, (n)

Symbolic
Operation
A (n)

Flags
S Z F5 H F3 P/V N C

IN r, (C)

r (C)

b b

IN (C)* or
IN F, (C)*
INI

b b

b b

0 1

OUT (n), A

Just affects flags,


value is lost.
(HL) (C)
HL HL + 1
BB-1
(HL) (C)
HL HL + 1
BB-1
Repeat until
B=0
(HL) (C)
HL HL - 1
BB-1
(HL) (C)
HL HL - 1
BB-1
Repeat until
B=0
(n) A

OUT (C), r

INIR

IND

Opcode
76 543 210
11 011 011
n
11 101 101
01 r 000
11 101 101
01 110 000
11 101 101
10 100 010

Hex
DB

No.of
Bytes
2

No.of M
Cycles
3

No.of T
States
11

ED

12

ED
70
ED
A2

12

16

11 101 101
10 110 010

ED
B2

2
2

5
4

21
16

11 101 101
10 101 010

ED
AA

16

Comments
r
Reg.
000 B
001 C
010 D
011 E
100 H
101 L
111 A
if B 0
if B = 0

b b

0 1

11 101 101
10 111 010

ED
BA

2
2

5
4

21
16

D3

11

(C) r

ED

12

OUT (C), 0*

(C) 0

ED
71
ED
A3

12

OUTI

11 010 011
n
11 101 101
01 r 001
11 101 101
01 110 001
11 101 101
10 100 011

1
1
1
1
2
4
16
(C) (HL)
b b b X b X X X
HL HL + 1
BB-1
0 1 0 X 0 X X X 11 101 101 ED
2
5
21
(C) (HL)
if B 0
10 110 011 B3
2
4
16
if B = 0
HL HL + 1
BB-1
Repeat until
B=0
1
1
1
1
2
4
16
(C) (HL)
b b b X b X X X 11 101 101 ED
10 101 011 AB
HL HL - 1
BB-1
0 1 0 X 0 X X X 11 101 101 ED
2
5
21
(C) (HL)
if B 0
10 111 011 BB
2
4
16
if B = 0
HL HL - 1
BB-1
Repeat until
B=0
The V symbol in the P/V flag column indicates that the P/V flags contains the overflow of the operation. Similarly
the P symbol indicates parity.
r means any of the registers A, B, C, D, E, H, L.
1
flag is affected by the result of B B - 1 as in DEC B.
2
N is a copy bit 7 of the last value from the input (C).
3
this flag contains the carry of ( ( (C + 1) AND 255) + (C) )
4
this flag contains the carry of ( ( (C - 1) AND 255) + (C) )
* means unofficial instruction.
= flag is not affected, 0 = flag is reset, 1 = flag is set, X = flag is unknown,
b = flag is set according to the result of the operation.

INDR

OTIR

OUTD

OTDR

Notes:

Flag Notation:

O Conjunto Completo de Instrues do Z80.

if B 0
if B = 0

89

B.10 Instrues de Desvio


Symbolic
Operation
PC nn

Flags
S Z F5 H F3 P/V N C

JP cc, nn

if cc is true,
PC nn

JR e

PC PC + e

JR ss, e

JP HL
JP IX

if ss is true
PC PC + e
PC HL
PC IX

JP IY

PC IY

DJNZ e

2
2
8

BB-1
2
3
13
if B 0
PC PC + e
e is a signed two-complement number in the range <-126, 129>
e - 2 in the opcode provides an effective number of PC + e as PC incremented by 2 prior to the addition of e.
= flag is not affected, 0 = flag is reset, 1 = flag is set, b = flag is set according to the result of the operation.

Mnemonic
JP nn

Notes:
Flag Notation:

Opcode
76 543 210
11 000 011
n
n
11 ccc 010
n
n
00 011 000
e -2
00 ss 000
e -2
11 101 001
11 011 101
11 101 001
11 111 101
11 101 001
00 010 000
e -2

Hex
C3

18

E9
DD
E9
FD
E9
10

No.of
Bytes
3

No.of M
Cycles
3

No.of T
States
10

10

12

2
2
1
2

3
2
1
2

12
7
4
8

Comments
ccc Condition
000 NZ
001 Z
010 NC
011 C
100 PO
101 PE
110 P
111 M
if ss is true
if ss is false
ss
Condition
111 C
110 NC
101 Z
100 NZ
if B = 0
if B 0

B.11 Instrues de Chamada e Retorno de subrotina.


Mnemonic
CALL nn

CALL cc, nn

RET

RET cc

RETI

1,2

RETN

RST p

Notes:

Symbolic
Operation
SP SP - 1
(SP) PCH
SP SP - 1
(SP) PCL
PC nn
if cc is true,
SP SP - 1
(SP) PCH
SP SP - 1
(SP) PCL
PC nn
PCL (SP)
SP SP + 1
PCH (SP)
SP SP + 1
if cc is true,
PCL (SP)
SP SP + 1
PCH (SP)
SP SP + 1
PCL (SP)
SP SP + 1
PCH (SP)
SP SP + 1
PCL (SP)
SP SP + 1
PCH (SP)
SP SP + 1
IFF1 IFF2
SP SP - 1
(SP) PCH
SP SP - 1
(SP) PCL
PC p

Flags
S Z F5 H F3 P/V N C

Opcode
76 543 210
11 001 101
n
n

11 ccc 100
n
n

11 001 001

11 ccc 000

11 101 101
01 001 101

11 101 101
01 000 101

11 t 111

No.of
Bytes
3

No.of M
Cycles
5

No.of T
States
17

Comments

3
3

3
5

10
17

if cc is false
if cc is true

10

1
1

1
3

5
11

if cc is false
if cc is true

ED
4D

14

ED
45

14

cc
000
001
010
011
100
101
110
111

Condition
NZ
Z
NC
C
PO
PE
P
M

11

t
000
001
010
011
100
101
110
111

p
0h
8h
10h
18h
20h
28h
30h
38h

Hex
CD

C9

This instruction has other unofficial opcodes, see Opcode list.


Instruction also IFF1 IFF2
= flag is not affected, 0 = flag is reset, 1 = flag is set, b = flag is set according to the result of the operation.
2

Flag Notation:
90

Apndice B.

BIBLIOGRAFIA
C. REFERNCIAS BIBLIOGRFICAS.
Livro texto: Livros que sugerimos para consulta.
[01]

CYPRIANO, L. B., Microprocessador Z-80 - Hardware, Vol. I, 3a ed., Ed. rica, 1984.

[02]

CYPRIANO, L. B., Microprocessador Z-80 - Software, Vol. II, 3a ed., Ed. rica, 1984.

[03]

ZILOG, Z80 Family CPU User Manual, 2001.

Bibliografia auxiliar: Material complementar que foi utilizado na gerao do texto desta apostila.
[04]

INTEL CORPORATION, 8080/8085 Assembly Language Programming,1979.

[05]

INTEL CORPORATION, Microsystem Components Handbook, Vol.II, 1984.

[06]

MALVINO, A. P., Microcomputadores e Microprocessadores, Ed. McGraw Hill do Brasil, 1985.

[07]

TOKHEIM, R. L., Introduo aos Microprocessadores, Ed. McGraw Hill do Brasil, 1985.

[08]

TOCCI, R. J., Microcoprocessadores e microcomputadores: Hardware e Software, 2a ed., Ed. Prentice


Hall, 1983.

[09]

VISCONTI, A. C., Microprocessadores 8080/8085 - Hardware, Vol. I, 3a ed., Ed. rica, 1981.

[10]

VISCONTI, A. C., Microprocessadores 8080/8085 - Software, Vol. II, 3a ed., Ed. rica, 1981.

[11]

ZILOG, Z80 Family - Discrete Devices and Embedded Controllers Databook, 1995.

Sites sugeridos:

Referncias Bibliogrficas..

[12]

ZILOG Inc., www.zilog.com

[13]

Thomas Scherrer, Official Support-Page: Hardware, Software,


Utilities, FAQ and Docs for Z80-Family, www.z80.info

[14]

CPU-World: All about CPUs, www.cpu-world.com

[15]

CPU Museum, www.cpu-museum.com

91