Escolar Documentos
Profissional Documentos
Cultura Documentos
LABORATRIO
DE
SISTEMAS
MICROPROCESSADOS I
Introduo Terica
Junho/2007
ndice Analtico
1. Introduo aos Computadores. __________________________________________________________ 5
1.1 O computador.
27
28
28
29
30
30
30
31
31
31
32
33
33
[10] ________________________________________________ 35
36
36
36
36
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.
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.
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.
[08]
Do mundo
exterior
Unidade de
Entrada
U. C. P.
Unidade de
Sada
Para o
mundo
exterior
Memria
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.
H, ainda, os registradores de 8 bits: I(interrupt vector) e R(refresh register) que no sero abordados neste curso.
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
Captulo 1.
Do mundo
exterior
Unidade de
Entrada
U. C. P.
Unidade de
Sada
Para o
mundo
exterior
+V
GND
CLK
Memria
RAM + ROM
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.
Memria primria
RAM esttica
(SRAM)
RAM dinmica
(DRAM)
Memrias permanentes
Memrias apagveis
RAM no voltil
(NVRAM)
ROM Mascarvel
(Masked ROM)
ROM Programvel
(PROM)
Memria Flash
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.
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.
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.
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.
Segmento de programa
vazio
vazio
Segmento de dados
vazio
vazio
FFFFh
Vazio
Convm ressaltar que o prefixo K, aqui difere do usado em engenharia k por ter valor multiplicador de 1024.
12
CAPTULO 1.
[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
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
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.
[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.
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
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
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).
[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.
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.
Incio
y = x +5
sin(x)
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,
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.
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\
MREQ\
A13...A11
Y0
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
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
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
Document Number
HMZ80
Date:
Rev
1
Sheet
of
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.
Etapa 1
Programa: editor de texto
Funo: edio do arquivo fonte
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
22
Captulo 2.
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.
Etapa 2
Programa: assembler
Funo: traduo para cdigo objeto
Resultado: arquivo objeto ".obj"
Caso esteja lendo este texto em verso preto e branco, poder ser observada a variao nos tons de cinza.
23
Figura 2-6: Resultado da execuo do assembler para a primeira verso do programa P1.
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.
25
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.
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.
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.
27
LABEL
0000H
0003H
0004H
0007H
0008H
000BH
OPERATION
LD
A,(1000H)
LD
B,A
LD
A,(1001H)
ADD
A,B
LD
(1002H),A
HALT
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:
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.
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.
PINS
Int 1
NMI 1
IFF1 0
FF:_:11111111
FF:_:11111111
FF:_:11111111
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
________
________
________
________
30
Captulo 2.
IO
Load
View
--space--
ESC to screen
eXecute --space--
ESC to screen
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.
31
) : 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.
Close file
ESC to screen
32
Captulo 2.
ESC to screen
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
)
(
d 1 a ou d 2 a
rc
hs
qe
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
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_
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
(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
Ex.: LD A,(BC)
Ex.: LD A,00h
Um label.
Ex.: JP INICIO
LD HL,1234h
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:
equivalente a
LD L,40h
equivalente a
LD HL,4B59h
DB 4Ah,6Fh,73h,65h,20h,53h,69h,6Ch,76h,61h
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
37
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.
Mnemnicos
11 12
ORG
Operandos
Comentrios
18
35
2000h
Mnemnicos
11 12
DEFSEG
SEG
ORG
Operandos
Comentrios
18
35
codigo,absolute
Codigo
2000h
10
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
[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
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
11
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
[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
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
15
Name:
db
16
Vet2:
db
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
Figura 3-10: Resultado da montagem de um segmento de dados, com definio de constantes, strings e vetores (arquivo .prn).
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
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
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
Descrio
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
LD C,E
LD E,E
P Z80
Memria
16 bits
Segmento de Programa
PC=200Fh
SP
IX
IY
200Eh:
78h
8 bits
A=23h
200Fh:
??
B=23h
2010h:
??
2011h:
??
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
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
;(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
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
LD reg,byte
;reg byte
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:
??
As Instrues do PZ80
45
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
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
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
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
;(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
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:
??
EX DE,HL
;DE 12 HL
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
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
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).
As Instrues do PZ80
49
bit7
bit6
bit5
bit4
bit3
bit2
bit1
Bit0
---
---
P/V
CY
Flag S:
sign flag
Flag Z:
zero flag
Flag H:
Half carry flag
Flag P/V:
Parity/overflow
flag
Flag N:
Add/Subtract flag
Flag CY:
Carry flag
IMPORTANTE:
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
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.
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
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
;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
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
;A A - C - CY
;A A - 05h - CY
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.
DAA
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
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
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
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
Funo Lgica
Descrio
Clear bit
AND
Set bit
OR
Complement bit
XOR
Complement byte
NOT
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
As Instrues do PZ80
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
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
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
2. LD reg8,reg8
3. LD reg8,byte
4. LD reg16,dbyte
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.
As Instrues do PZ80
57
58
Captulo 4.
;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)
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:
??
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
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
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
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
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
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
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
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
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.
62
Captulo 4.
Instrues de Desvio
Call
Return
Jump
Absoluto
Incondicional
Absoluto
Relativo
Condicional
Incondicional
Condicional
Incondicional
Condicional
;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)
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
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
JP PE,end
;PC end
se flag P = 1
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;
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
JR NC,end
;PC end
se flag CY = 0
JR C,ee
;PC PC + ee
se flag CY = 1
JR NZ,ee
;PC PC + ee
se flag Z = 0
JR Z,ee
;PC PC + ee
se flag Z = 1
As Instrues do PZ80
65
Fim
subrot1:
call subrot2
ret
subrot2:
ret
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.
Inicio:
.....
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.
;(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
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.
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
RET
;PCLow (SP)
PCHigh (SP+1)
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.
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
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 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 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.
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
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
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.
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
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.
;A 42h
CY
bit 7
CY 0
bit 6
bit 5
bit 4
bit 3
bit 2
bit1
bit 0
Acumulador
RRCA
;A 10h
CY
bit 7
CY 1
bit 6
bit 5
bit 4
bit 3
bit 2
bit1
bit 0
Acumulador
RLA
74
CAPTULO 4.
;CY 1
;A 43h
CY
bit 7
CY 0
bit 6
bit 5
bit 4
bit 3
bit 2
bit1
bit 0
Acumulador
RRA
;CY 1
;A 90h
CY
bit 7
CY 1
bit 6
bit 5
bit 4
bit 3
bit 2
bit1
bit 0
Acumulador
RLC reg8
RLC (HL)
;B
CY
42h
bit 7
CY 0
bit 6
bit 5
bit 4
bit 3
bit 2
bit1
bit 0
Registrador ou memria
RRC reg8
RRC (HL)
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
RL reg8
RL (HL)
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
RR reg8
RR (HL)
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
76
CAPTULO 4.
;A
CY
42h
bit 7
CY 0
bit 6
bit 5
bit 4
bit 3
bit 2
bit1
bit 0
Registrador ou memria
SRA reg8
SRA (HL)
;A
CY
C0h
bit 7
CY 1
bit 6
bit 5
bit 4
bit 3
bit 2
bit1
bit 0
Registrador ou memria
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.
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)
OUT (C),reg8
;D (ES_1122h)
;(port_BC) reg8
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.
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.
83
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.
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.
85
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
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.
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.
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.
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
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
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:
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
r (IX + d)
rb 1
(IX + d) r
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
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.
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
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:
if B 0
if B = 0
89
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
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
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]
Bibliografia auxiliar: Material complementar que foi utilizado na gerao do texto desta apostila.
[04]
[05]
[06]
[07]
TOKHEIM, R. L., Introduo aos Microprocessadores, Ed. McGraw Hill do Brasil, 1985.
[08]
[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]
[13]
[14]
[15]
91