28
LINGUAGEM ASSEMBLY

Z80 Linguagem Assembly 2

Embed Size (px)

Citation preview

Page 1: Z80 Linguagem Assembly 2

LINGUAGEM ASSEMBLY

Page 2: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 1

1. GENERALIDADES 1.1 – Histórico do início dos microprocessadores Em 1971, a INTEL lançou o primeiro microprocessador no mercado, o 4004. Com repertório de 46 instruções, era adequado para aplicações de controle de processos que necessitavam de tomadas de decisões e operações aritméticas simples. O microprocessador 4004 tinha um “DATA BUS” de 4 bits e tinha capacidade de realizar até 100.000 operações de adições por segundo, em 2 operandos de 4 bits de extensão. A geração seguinte de microprocessadores, caracterizou-se principalmente, por um “DATA BUS” de 8 bits. Em 1972, a INTEL lançou o 8008, encabeçando os microprocessadores desta geração. Tal microprocessador apresentava um repertório de 48 instruções, podendo endereçar até 16K de memória, e podendo realizar aproximadamente 80.000 operações de adição por segundo, em 2 operandos de 8 bits de extensão. Após o seu lançamento, o microprocessador 8008 foi largamente difundido através da indústria eletrônica num curto espaço de tempo, principalmente porque não havia mais nada do gênero de outros fabricantes. Ainda dentro da linha de microprocessadores de 8 bits, em 1973 a INTEL lançou o 8080, que se tornou um dos microprocessadores mais usados, assumindo uma posição privilegiada em relação aos numerosos concorrentes, posteriormente disseminados no mercado mundial. O repertório de instruções do 8080, incluía o conjunto de instruções do microprocessador 8008 e 30 instruções adicionais. Desta forma, o usuário do 8008 poderia evoluir para o 8080 aproveitando todo o software já desenvolvido para o 8008. Do ponto de vista de velocidade de processamento, o 8080 podia executar até 500.000 instruções de soma por segundo, com 2 operandos de 8 bits. A capacidade máxima de endereçamento do 8080 era de 64k de memória. Em 1976, a INTEL desenvolveu uma série de melhorias no 8080, lançando o microprocessador 8085. Esse microprocessador atingiu um índice maior de integração, incorporando algumas simplificações de hardware. No entanto, manteve o repertório de instruções semelhante ao 8080, adicionando apenas duas instruções (RIM e SIM). O microprocessador Z-80, lançado pela ZILOG, logo após ao 8085, veio trazer novos aperfeiçoamentos. O repertório de instruções do Z-80, inclui o conjunto de instruções do microprocessador 8080 e 80 instruções adicionais. Desta forma, o software do Z-80 é compatível com a linha 8008 e 8080, permitindo o aproveitamento de todos os programas já desenvolvidos. Além da compatibilidade de software as seguintes melhorias foram implementadas:

Page 3: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 2

- Duplicação do número de registros de uso geral. - A incorporação de novas técnicas para otimizar o endereçamento de

memória. - O acréscimo no microprocessador de um hardware que, no 8080 e 8085,

tinha que ser realizado externamente. Igualmente aos microprocessadores fabricados pela INTEL (8080 e 8085) o Z-80 utiliza tecnologia NMOS e necessita apenas uma alimentação de 5V, apresenta saídas e entradas compatíveis com a lógica TTL. 1.2 – Características dos microprocessadores Os principais componentes dos microprocessadores estão apresentados na Figura 1.1. ULA = Unidade Lógica Aritmética R E/S = Registro de Entrada / Saída RDM = Registro de Dado da Memória REM = Registro de Endereço da Memória CI = Contador de Instrução RI = Registro de Instrução

Figura 1.1 – Componentes dos microprocessadores

ULA

AC

R E/S

R D M

REM

CI

SAÍDAS ENTRADAS

RI UNIDADE DE CONTROLE

Page 4: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 3

a) Unidade Lógica e Aritmética (ULA)

A ULA contém o acumulador, o registro de flags e alguns registros temporários que são inacessíveis ao programador. Operações aritméticas, lógicas e de rotação são executadas pela ULA. O resultado destas operações podem ser depositadas no acumulador ou podem ser transferidas para a Via de Dados interna para serem usadas em outros registros.

b) Acumulador (AC)

É o registro de maior versatibilidade sendo referenciado explicitamente ou implicitamente por um grande número de instruções, as quais incluem instruções lógicas, aritméticas, carregar, armazenar, deslocamentos, rotações e transferências de E/S.

c) Unidade de Controle (UC)

Usualmente esta unidade, utilizando sinais de clocks externos, mantém uma sequência própria de eventos necessários à realização de uma dada tarefa. Normalmente esta unidade é capaz de responder à sinais externos, tais como: pedido de interrupção do processamento de uma tarefa, pedido de espera de um dispositivo lento, etc.

d) Registro de Instrução (RI)

Sob o controle da UC o código de operação é trazido da memória para o microprocessador durante o ciclo de busca (fetch) sendo armazenado no RI.

e) Contador de Instrução (CI)

É o registro que mantém o endereço da próxima instrução a ser executada.

f) Registro de Endereço da Memória (REM) Mantém o endereço presente na Via de Endereços durante leitura/escrita em memória. O número de bits do REM determina o espaço de endereçamento do microprocessador.

g) Registro de Dado da Memória (RDM)

Funciona como buffer de interface entre a Via de Dados interna do microprocessador e a via externa. O número de bits do RDM caracteriza a largura da Via de Dados do microprocessador.

Page 5: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 4

h) Registro de Entrada/Saída (R E/S) Utilizado nas transferências de dados entre o microprocessador e periféricos.

1.3 – Conceitos Básicos de Programação As informações manipuladas pelos microcomputadores são de dois tipos: Instruções e Dados. As instruções são comandos que governam a transferência de informação dentro da máquina e especificam a operação lógica ou aritmética a ser realizada, bem como onde buscar o operando. Especificam também a transferência de informações, entre a máquina e o meio exterior. Um grupo de instruções logicamente relacionadas para realizar uma dada tarefa é denominado Programa. O microprocessador tem o seu comportamento governado por instruções as quais encontram-se armazenadas na memória. O microprocessador é o responsável em buscar a instrução, decodificá-la e realizar as operações exigidas pela mesma. Estas operações são realizadas sequencialmente, sendo que as micro-operações realizadas em cada passo, são determinadas pela Unidade de Controle do microprocessador. A tarefa de buscar (fetch) e executar uma única instrução é denominada Ciclo de Instrução. Na Figura 1.2 é apresentado um fluxograma caracterizando o modo de operação do microprocessador. As instruções que formam um programa são armazenadas na memória, sendo utilizadas pelo microprocessador para determinar as ações específicas deste. Assim sendo, este precisa conhecer a localização da próxima instrução a ser executada, e para isto, o microprocessador possui um registro que mantém o endereço da próxima instrução a ser executada, registro este denominado Contador de Instrução. Cada operação que o microprocessador pode realizar é identificada por uma palavra binária conhecida como código de operação. O mecanismo pelo qual o microprocessador converte o código de operação em atividades específicas de processamento é realizado pela Unidade de Controle (UC). Sob o controle da UC o código de operação é trazido da memória para o microprocessador durante o ciclo de busca sendo armazenado no registro de instrução. O decodificador de instrução e circuitos de controle, utilizando a palavra binária disponível no RI, mantém durante o ciclo de execução uma sequencia própria de eventos necessários a tarefa de processamento da instrução corrente. A sequencialização dos eventos tem por base o sinal de relógio fornecido ao microprocessador.

Page 6: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 5

Figura 1.2 – Modo de Operação do Microprocessador

HÁ INTERRUPÇÕES

AGUARDANDO O ATENDIMENTO?

INÍCIO

START

ATIVADO?

BUSCAR A INSTRUÇÃO

EXECUTAR A INSTRUÇÃO

TRANSFERIR CONTROLE P/ PROGRAMA QUE

ATENDE INTERRUPÇÕES

CIC

LO D

E B

US

CA

C

ICLO

DE

EX

EC

ÃO

CIC

LO D

E I

NS

TR

ÃO

FE

TC

H

N

S

N

S

Page 7: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 6

1.4 – Mapa de Registros do Microprocessador Z-80 1.4.1 – Introdução Os registros que o Z-80 possui estão apresentados na Figura 1.3.

Registro de Condição (F)

Acumulador (A)

Registro B (B) Registro C (C)

Registro D (D) Registro E (E)

Registro H (H) Registro L (L)

Registro de Condição (F’)

Acumulador’ (A’)

Registro B’ (B’) Registro C’ (C’)

Registro D’ (D’) Registro E’ (E’)

Registro H’ (H’) Registro L’ (L’)

Contador de Programa (PC)

Ponteiro de Pilha (SP)

Registro de Índice X (IX)

Registro de Índice Y (IY)

Registro I

Registro R

Figura 1.3 – Mapa de Registros do Z-80 1.4.2 – Registros de Uso Geral O Z-80 possui 14 registros de uso geral, de 8 bits cada um, e estão divididos em 2 grupos de 7 registros cada.

ATIVOS PASSIVOS A A’ B B’ C C’ D D’ E E’ H H’ L L’

Figura 1.4 – Registros de Uso Geral do Z-80

Registro de Condição Ativo

Registros Ativos de Uso Geral

Registro de Condição Passivo

Registros Passivos de Uso Geral

Registros de Uso Específico

8 bits 8 bits

Page 8: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 7

Os registros de uso geral e os registros F e F’, são também classificados, durante a execução de um programa em ativos e passivos. Em qualquer instante tem-se 8 registros ativos e 8 registros passivos. Os registros passivos só podem ser alterados quando tornarem-se ativos. Uma vantagem de se ter 2 blocos de registros de uso geral é a maior disponibilidade de registros no interior do Z-80, o que permite o acesso mais rápido às informações do que as mesmas estivessem armazenadas na memória. Outra vantagem é que o programador pode trocar rapidamente de um bloco de registro para outro. Isto é usado, principalmente, na troca de contexto durante o atendimento de interrupções. 1.4.3 – Registros de Flags O Z-80 possui 2 registros de flags (F e F’) sendo que, um deles é ativo e outro passivo. Cada registro de flags tem 8 bits, dos quais somente 6 são usados. O registro de flags ativo funciona associado ao acumulador e à ULA, e cada um de seus bits indica uma situação definida, resultante basicamente de operações lógicas e aritméticas. A figura 1.5 apresenta o registro de flags.

D7 D0 S Z H P/V N C

Figura 1.5 – Registro de Flags

Descrição dos bits do registro de flags: a) Bit C (Carry bit)

Indica a ocorrência de “VAI UM” ou “TRANSBORDO”, no 8º bit, após a realização de uma soma, ou de empréstimo (BORROW) quando se efetua uma subtração, assumindo o valor “1” se houver tal ocorrência, ou o valor “0”, se não houver.

b) Bit N (Subtract bit)

De uma maneira geral, assume o valor “0” após as instruções de soma, e o valor “1” após as instruções de subtração.

Page 9: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 8

c) Bit P/V (Parity/Overflow bit)

Representa paridade ou transbordo, dependendo da instrução executada. No caso de representar paridade temos: - P/V = 1 indica paridade par

No caso de representar transbordo temos: - P/V = 1 indica que houve transbordo (normalmente usada depois de

uma operação aritmética). d) Bit H (Half-carry bit)

Indica a ocorrência de “VAI UM”, ou “EMPRÉSTIMO” do quarto para o quinto bit do resultado, na realização de uma soma ou uma subtração. Assume valor “1” se houver tal ocorrência.

e) Bit Z (Zero bit)

Normalmente usado após uma operação lógica ou aritmética e indica o seguinte: - Z = 1 quando o resultado é nulo.

f) Bit S (Sinal bit)

Representa o sinal de um resultado (em complemento de 2) e indica o seguinte: - S = 1 significa que o resultado é um número negativo.

1.4.4 – Registros de Uso Específico O Z-80 possui 4 registros de 16 bits e 2 de 8 bits, que operam com finalidades específicas. Os registros de 16 bits são: - Contador de programa (PC) - Ponteiro da pilha (SP) - Registros de índice (IX e IY) Os registros de 8 bits são: - Registro de interrupção (I) - Registro de refrescamento (R)

Page 10: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 9

1.4.4.1 – Descrição dos 4 registros de 16 bits a) Contador de Programa (PC)

O PC é atualizado ao término de cada instrução, de modo a conter o endereço da próxima instrução a ser executada. As instruções do Z-80 podem ocupar de 1 a 4 bytes consecutivos da memória. Desta forma, a Unidade de Controle incrementa automaticamente o conteúdo do PC de 1,2,3 ou 4, dependendo do número de bytes da instrução que está em execução. Esta atualização seqüencial do PC é quebrada quando o Z-80 executa instruções que alteram o curso normal do programa. Estas instruções, por exemplo: JP, CALL, RET e RST, carregam o PC com um novo valor.

b) Ponteiro da Pilha (SP)

O SP endereça o último dado inserido ou o seguinte ao que foi retirado, isto é, o topo da pilha. Nos microcomputadores, uma das utilizações da pilha é o armazenamento temporário de registros, de uma maneira sistemática e organizada (estrutura LIFO – último a entrar e o primeiro a sair). Outra aplicação da pilha é o armazenamento do endereço de retorno em chamadas de subrotinas e no tratamento de pedidos de interrupções.

c) Registros de Índice (IX e IY)

São registros que permitem ao Z-80 calcular endereços de operandos de instruções que utilizam a técnica de endereçamento indexado. Estes registros armazenam um valor de 16 bits que é o endereço base para uma região da memória, onde um dado será gravado ou lido. Um byte adicional , incluso numa instrução indexativa, é usado para especificar o deslocamento do endereço, em relação a base fixa. As instruções com endereçamento indexado são usadas principalmente em aplicações com listas e tabelas.

1.4.4.2 – Descrição dos 2 registros de 8 bits a) Registro de Interrupção (I)

O registro I é usado no atendimento de interrupção. O seu conteúdo é previamente carregado pelo programador e representa os 8 bits mais significativos do endereço do vetor de interrupção. A parte menos

Page 11: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 10

significativa deste endereço é gerada pelo dispositivo de E/S que requisitou o pedido de interrupção. O vetor de interrupção é o endereço da primeira instrução da rotina de tratamento de interrupção. Associado a uma instrução de desvio leva o Z-80 a executar esta rotina.

b) Registro de Refrescamento (R)

O registro R tem como função controlar o refrescamento automático de memórias dinâmicas, é incrementado, automaticamente, a cada ciclo de busca de instruções. O dado contido no registro R é enviado para a memória, através dos 7 bits menos significativos da via de endereços (A0 a A6), durante o sinal de controle de refrescamento. Isto ocorre em paralelo com o processamento interno da instrução, justamente nos intervalos de tempo em que a execução da instrução não requer o uso das vias. Este modo de refrescamento é totalmente transparente ao programador e não diminui o tempo de processamento.

Page 12: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 11

2. CONJUNTO DE INSTRUÇÕES 2.1 – Generalidades

- n indica valor Constante de 8 bits (00H a FFH)

- nn indica valor Constante de 16 bits (0000H a FFFFH)

- o valor do flag depende do resultado da operação

- • o valor do flag não é alterado pela operação

- 0 o valor do flag é resetado (colocado em “0”) pela operação

- 1 o valor do flag é setado (colocado em “1”) pela operação

- X o valor do flag é “don’t care”

- r um dos registros: A, B, C, D, E, H, L

- s conteúdo de 8 bits (A, B, C, D, E, H, L, (HL), (IX+d), (IY+d), constante de 8 bits)

- ss um dos pares de registros: BC, DE, HL ou SP

- ii um dos registros de índice: IX ou IY

- R registro R

- m conteúdo de 8 bits (A, B, C, D, E, H, L, (HL), (IX+d), (IY+d) )

- IFF flip-flop de interrupção

- dd um dos pares de registros: BC, DE, HL ou SP

- qq um dos pares de registros: BC, DE, HL, AF

- d uma constante de 8 bits em complemento de 2

- pp um dos pares de registros: BC, DE ou IX ou SP

- rr um dos pares de registros: BC, DE ou IY ou SP

2.2 – Instruções do Z-80

Page 13: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 12

MNEMÔNICO DESCRIÇÃO OPERAÇÃO COND. DE FLAGS Nº DE

C Z P/V S N H EST.

LD r,r Carrega o registro r com o registro r r←r • • • • • • 4

LD r,n Carrega o registro r com a constante n r←n • • • • • • 7

LD r, (HL) Carrega o registro r com o conteúdo da posição de memória endereçada pelo par HL

r←(HL) • • • • • • 7

LD r,(IX+d) Carrega o registro r com o conteúdo da posição de memória endereçada por IX + d

r ← (IX + d) • • • • • • 19

LD r, (IY+d) Carrega o registro r com o conteúdo da posição de memória endereçada por IY + d

r ← (IY+d) • • • • • • 19

LD (HL),r Carrega o conteúdo da posição de memória endereçada pelo par HL com o registro r

(HL) ← r • • • • • • 7

LD (IX + d),r Carrega o conteúdo da posição de memória endereçada por IX + d com o registro r

(IX+d) ← r • • • • • • 19

LD (HL),n Carrega o conteúdo da posição de memória endereçada pelo par HL com a constante n

(HL) ← n • • • • • • 10

LD (IX + d),n Carrega o conteúdo da posição de memória endereçada por IX + d com a constante n

(IX + d) ← n • • • • • • 19

LD (IY + d),n Carrega o conteúdo da posição de memória IY + d, com a constante n

(IY + d) ← n • • • • • • 19

LD A, (BC) Carrega o Acumulador com o conteúdo da posição de memória endereçada pelo par BC

A ← (BC) • • • • • • 7

LD A, (DE) Carrega o Acumulador com o conteúdo da posição de memória endereçada pelo par DE

A ← (DE) • • • • • • 7

LD A, (nn) Carrega o Acumulador com o conteúdo da posição de memória nn

A ← (nn) • • • • • • 13

LD (BC), A Carrega o conteúdo da posição de memória endereçada pelo par BC com o Acumulador

(BC) ← A • • • • • • 7

LD (DE), A Carrega o conteúdo da posição de memória endereçada pelo par DE com o Acumulador

(DE) ← A • • • • • • 7

LD (nn), A Carrega o conteúdo da posição de memória nn com o Acumulador

(nn) ← A • • • • • • 13

LD A,I Carrega o Acumulador com o registro I A ← I • ↔

IFF ↔

• • 9

LD A, R Carrega o Acumulador com o registro R A ← R • ↔

IFF ↔

• • 9

LD I,A Carrega o registro I com o Acumulador I ← A • • • • • • 9

LD R,A Carrega o registro R com o Acumulador R ← A • • • • • • 9

LD dd,nn Carrega o par de registros dd com a constante nn dd ← nn • • • • • • 10

LD IX,nn Carrega o registro IX com a constante nn IX ← nn • • • • • • 14

LD IY,nn Carrega o registro IY com a constante nn IY ← nn • • • • • • 14

LD HL,(nn) Carrega o registro L com o conteúdo da posição de memória nn e carrega o registro H com o conteúdo da posição de memória nn+1

H ← (nn+1)

L ← (nn)

• • • • • • 16

LD dd,(nn) Carrega o registro ddL com o conteúdo da posição de memória nn e carrega o registro ddH com o conteúdo da posição de memória nn+1

ddH ← (nn+1)

ddL ← (nn)

• • • • • • 20

Page 14: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 13

MNEMÔNICO DESCRIÇÃO OPERAÇÃO COND. DE FLAGS Nº DE

C Z P/V S N H EST.

LD IX,(nn) Carrega IXL com o conteúdo da posição de memória nn e carrega IXH com o conteúdo da posição de memória nn+1

IXH ← (nn+1)

IXL ← (nn)

• • • • • • 20

LD IY,(nn) Carrega IYL com o conteúdo da posição de memória nn e carrega IYH com o conteúdo da posição de memória nn+1

IYH ← (nn+1)

IYL ← (nn)

• • • • • • 20

LD (nn), HL Carrega o conteúdo da posição de memória nn com o registro L e carrega o conteúdo da posição de memória nn+1 com o registro H

(nn+1) ← H

(nn) ← L

• • • • • • 16

LD (nn), dd Carrega o conteúdo da posição de memória nn+1 com o registro ddH e carrega o conteúdo da posição de memória nn com o registro ddL.

(nn+1) ← ddH

(nn) ← ddL

• • • • • • 20

LD (nn), IX Carrega o conteúdo da posição de memória nn+1 com IXH e carrega o conteúdo da posição de memória nn com IXL.

(nn+1) ← IXH

(nn) ← IXL

• • • • • • 20

LD (nn), IY Carrega o conteúdo da posição de memória nn+1 com IYH e carrega o conteúdo da posição de memória nn com IYL.

(nn+1) ← IYH

(nn) ← IYL

• • • • • • 20

LD SP, HL Carrega o registro SP com o registro HL. SP ← HL • • • • • • 6

LD SP, IX Carrega o registro SP com o registro IX. SP ← IX • • • • • • 10

LD SP, IY Carrega o registro SP com o registro IY. SP ← IY • • • • • • 10

PUSH qq Carrega o conteúdo da posição de memória SP-1 com o registro qqH e carrega o conteúdo da posição de memória SP-2 com o registro qqL.

(SP-2) ← qqL

(SP-1) ← qqH

• • • • • • 11

PUSH IX Carrega o conteúdo da posição de memória SP-1 com IXH e carrega o conteúdo da posição de memória SP-2 com IXL.

(SP-2) ← IXL

(SP-1) ← IXH

• • • • • • 15

PUSH IY Carrega o conteúdo da posição de memória SP-1 com IYH e carrega o conteúdo da posição de memória SP-2 com IYL.

(SP-2) ← IYL

(SP-1) ← IYH

• • • • • • 15

POP qq Carrega o registro qqL com o conteúdo da posição de memória SP e carrega o registro qqH com o conteúdo da posição de memória SP+1.

qqH ← (SP+1)

qqL ← (SP)

• • • • • • 10

POP IX Carrega IXL com o conteúdo da posição de memória SP e carrega IXH com o conteúdo da posição de memória SP+1.

IXH←(SP+1)

IXL ← (SP)

• • • • • • 14

POP IY Carrega IYL com o conteúdo da posição de memória SP e carrega IYH com o conteúdo da posição de memória SP+1.

IYH ← (SP+1)

IYL ← (SP)

• • • • • • 14

EX DE, HL Troca simultânea dos conteúdos dos pares de registros DE e HL.

DE ↔ HL • • • • • • 4

EX AF, AF Troca simultânea dos conteúdos dos pares de registros AF e AF’.

AF ↔ AF’ • • • • • • 4

EXX Troca simultânea dos conteúdos dos pares de registros: BC com BC’, DE com DE’ e HL com HL’

BC ↔ BC’

DE ↔ DE’

HL ↔ HL’

• • • • • • 4

Page 15: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 14

MNEMÔNICO DESCRIÇÃO OPERAÇÃO COND. DE FLAGS Nº DE

C Z P/V S N H EST.

EX (SP), HL Troca simultânea do conteúdo da posição de memória SP com L e do conteúdo da posição de memória SP+1 com H.

H ↔ (SP+1)

L ↔ (SP)

• • • • • • 19

EX (SP), IX Troca simultânea do conteúdo da posição de memória SP com IXL e do conteúdo da posição de memória SP+1 com IXH.

IXH ↔ (SP+1)

IXL ↔ (SP)

• • • • • • 23

EX (SP), IY Troca simultânea do conteúdo da posição de memória SP com IHL e do conteúdo da posição de memória SP+1 com IYH.

IYH ↔ (SP+1)

IYL ↔ (SP)

• • • • • • 23

LDI Carrega o conteúdo da posição de memória endereçada por DE com o conteúdo da posição endereçada por HL.

Incrementa DE e HL. Decrementa BC.

(DE) ← (HL)

DE ← DE + 1

HL ← HL + 1

BC ← BC - 1

• • ↔

• 0 0 16

LDIR Carrega o conteúdo da posição de memória endereçada por DE com o conteúdo da posição endereçada por HL.

Incrementa DE e HL. Decrementa BC.

Repete estas operações até BC = 0000H.

(DE) ← (HL)

DE ←DE + 1

HL ← HL + 1

BC ← BC-1

repete até

BC = 0

• • 0 • 0 0 21

16

LDD Carrega o conteúdo da posição de memória endereçada por DE com o conteúdo da posição endereçada por HL.

Decrementa DE, HL e BC.

(DE) ← (HL)

DE ← DE – 1

HL ← HL –1

BC ← BC-1

• • ↔ • 0 0 16

LDDR Carrega o conteúdo da posição de memória endereçada por DE com o conteúdo da posição endereçada por HL.

Decrementa DE, HL e BC.

Repete estas operações até BC = 0000H.

(DE) ←(HL)

DE ← DE-1

HL ← HL-1

BC ← BC-1

repete até

BC=0

• • 0 • 0 0 21

CPI Compara o Acumulador com o conteúdo da posição de memória endereçada pelo par de registros HL.

Incrementa HL e decrementa BC.

A : (HL)

HL ← HL+1

BC ← BC-1

↔ ↔

↑ ↔

16

CPIR Compara o Acumulador com o conteúdo da posição de memória endereçada pelo par de registros HL.

Incrementa HL e decrementa BC.

Repete estas operações até A = (HL) ou BC = 0000H.

A : (HL)

HL ← HL+1

BC ← BC-1

repete até

A = (HL) ou

BC = 0

• ↔

↑ ↔

21

16

CPD Compara o Acumulador com o conteúdo da posição de memória endereçada pelo par de registro HL.

Decrementa HL e BC.

A : (HL)

HL ← HL –1

BC ← BC-1

• ↔

↑ ↔

16

Page 16: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 15

MNEMÔNICO DESCRIÇÃO OPERAÇÃO COND. DE FLAGS Nº DE

C Z P/V S N H EST.

CPDR Compara o Acumulador com o conteúdo da posição de memória endereçada pelo par de registros HL.

Decrementa HL e BC.

Repete estas operações até A = (HL) ou BC = 0000H.

A : (HL)

HL ← HL – 1

BC ← BC – 1

repete até

A = (HL) ou

BC = 0

• ↔

1 ↔

21

16

ADD A, r Soma o Acumulador com o registro r. O resultado é armazenado no Acumulador.

A ← A + r ↔

V ↔

0 ↔

4

ADD A, n Soma o Acumulador com a constante n. O resultado é armazenado no Acumulador.

A ← A + n ↔

V ↔

0 ↔

7

ADD A, (HL) Soma o Acumulador com o conteúdo da posição de memória endereçada pelo par de registros HL. O resultado é armazenado no Acumulador.

A ← A + (HL) ↔

V ↔

0 ↔

7

ADD A,(IX+d) Soma o Acumulador com o conteúdo da posição de memória endereçada por IX+d. O resultado é armazenado no Acumulador.

A ← A+(IX+d) ↔

V ↔

0 ↔

19

ADD A,(IY+d) Soma o Acumulador com o conteúdo da posição de memória endereçada por IY+d. O resultado é armazenado no Acumulador.

A ← A+(IY+d) ↔

V ↔

0 ↔

19

ADC A,s Soma o Acumulador com um conteúdo de 8 bits e com o flag CY. O resultado é armazenado no Acumulador.

A ← A+s+CY ↔

V ↔

0 ↔

SUB s Subtrai do Acumulador um conteúdo de 8 bits. O resultado é armazenado no Acumulador.

A ← A-s ↔

V ↔

1 ↔

SBC A,s Subtrai do Acumulador um conteúdo de 8 bits e o flag CY. O resultado é armazenado no Acumulador.

A ← A-s-CY ↔

V ↔

1 ↔

AND s Operação “E” entre o Acumulador e um conteúdo de 8 bits. O resultado é armazenado no Acumulador.

A ← A ∧ s 0 ↔

P ↔

0 1

OR s Operação “OU” entre o Acumulador e um conteúdo de 8 bits. O resultado é armazenado no Acumulador.

A ← A ∨ s 0 ↔

P ↔

0 0

XOR s Operação “OU EXCLUSIVO” entre o Acumulador e um conteúdo de 8 bits. O resultado é armazenado no Acumulador.

A ← A ⊗ s 0 ↔

P ↔

0 0

CP s Compara o Acumulador com um conteúdo de 8 bits. Altera os flags. Não altera o Acumulador, nem o conteúdo de 8 bits.

A : s ↔

V ↔

1 ↔

INC r Soma 1 ao registro r. r ← r + 1 ↔

V ↔

0 ↔

4

INC (HL) Soma 1 ao conteúdo da posição de memória endereçada pelo par de registros HL.

(HL) ← (HL)+1 ↔

V ↔

0 ↔

11

INC (IX+d) Soma 1 ao conteúdo da posição de memória endereçada por IX + d

(IX+d)←(IX+d)+1 ↔

V ↔

0 ↔

23

INC (IY+d) Soma 1 ao conteúdo da posição de memória endereçada por IY + d

(IY+d)←(IY+d)+1 • ↔

V ↔

0 ↔

23

DEC m Subtrai 1 do conteúdo de 8 bits. m ← m – 1 • ↔

V ↔

0 ↔

Page 17: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 16

MNEMÔNICO DESCRIÇÃO OPERAÇÃO COND. DE FLAGS Nº DE

C Z P/V S N H EST.

ADD HL, ss Soma o par de registros HL com ss. O resultado é armazenado em HL.

HL ← HL + ss ↔ • • • 0 X 11

ADC HL, ss Soma o par de registros HL com ss e com o flag CY. O resultado é armazenado em HL.

HL←HL+ss+CY ↔

↔ V ↔ 0 X 15

SBC HL, ss Subtrai do par de registros HL o valor de ss e do flag CY. O resultado é armazenado em HL.

HL→HL-ss-CY ↔

↔ V ↔ 0 X 15

ADD IX,pp Soma o registro IX com pp. O resultado é armazenado em IX.

IX ← IX+pp ↔ • • • 0 X 15

ADD IY, rr Soma o registro IY com rr. O resultado é armazenado em IY.

IY ← IY+rr ↔ • • • 0 X 15

INC ss Soma 1 a ss. ss ← ss + 1 • • • • • • 6

INC IX Soma 1 ao registro IX. IX ← IX + 1 • • • • • • 10

INC IY Soma 1 ao registro IY. IY ← IY + 1 • • • • • • 10

DEC ss Subtrai 1 de ss. ss ← ss – 1 • • • • • • 6

DEC IX Subtrai 1 do registro IX. IX ← IX – 1 • • • • • • 10

DEC IY Subtrai 1 do registro IY. IY ← IY – 1 • • • • • • 10

RLCA Rotação do Acumulador para esquerda sem o flag CY.

An+1 ← An

CY ← A7

A0 ← A7

↔ • • • 0 0 4

RLA Rotação do Acumulador para esquerda através do flag CY.

An+1 ← An

CY ← A7

A0 ← CY ↔

• • • 0 0 4

RRCA Rotação do Acumulador para direita sem o flag CY. An ← An+1

CY ← A7

A0 ← A7

↔ • • • 0 0 4

RRA Rotação do Acumulador para direita através do flag CY. An ← An+1

CY ← A0

A7 ← CY

↔ • • • 0 0 4

RLC r Rotação do registro r para esquerda sem o flag CY. rn+1 ← rn CY ← r7 r0 ← r7

↔ p

↔ 0 0 8

RLC (HL) Rotação do conteúdo da posição de memória endereçada pelo par de registro HL sem o flag CY.

(HL)n+1←(HL)n CY←(HL)7 (HL)0 ← (HL)7

↔ p

↔ 0 0 15

RLC (IX+d) Rotação do conteúdo da posição de memória endereçada pelo IX+d sem o flag CY

(IX+d)n+1←(IX+d)n CY←(IX+d)7 (IX+d)0 ← (IX+d)7

↔ p

↔ 0 0 23

RLC (IY+d) Rotação do conteúdo da posição de memória endereçada pelo IY+d sem o flag CY

(IY+d)n+1←(IY+d)n CY←(IY+d)7 (IY+d)0 ← (IY+d)7

↔ p

↔ 0 0 23

RL m Rotação de m para esquerda através do flag CY. mn+1←mn CY← m7 m0 ← CY

↔ p

↔ 0 0

Page 18: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 17

MNEMÔNICO DESCRIÇÃO OPERAÇÃO COND. DE FLAGS Nº DE

C Z P/V S N H EST.

RRC m Rotação de m para direita sem o flag CY mn←mn+1 CY← m0 m7 ← m0

↔ p

↔ 0 0

RR m Rotação de m para direita através do flag CY. mn←mn+1 CY← m0 m7 ← CY

p ↔

0 0

SLA m Deslocamento de m para esquerda. mn+1←mn m0 ← “0” CY ← m7

p ↔

0 0

SRA m Deslocamento de m para direita. mn←mn+1 m7 ← m7 CY ← m0

p ↔

0 0

SRL m Deslocamento de m para direita. mn←mn+1 m7 ← “0” CY ← m0

p ↔

0 0

RLD Rotação para esquerda entre o Acumulador e o conteúdo da posição de memória endereçada pelo par HL

(HL)7-4←(HL)3-0 A3-0←(HL)7-4 (HL)3-0←A3-0

• ↔

P ↔ 0 0 18

RRD Rotação para direita entre o Acumulador e o conteúdo da posição de memória endereçada pelo par HL.

(HL)7-4←A3-0 (HL)3-0←(HL)7-4 A3-0←(HL)3-0

• ↔

P ↔ 0 0 18

DAA Ajusta o valor do Acumulador para decimal A10 ← Abin ↔

P ↔ • ↔ 4

CPL Complemento de 1 do Acumulador A ← A • • • • 1 1 4

NEG Complemento de 2 do Acumulador A ← A+1 ↔

V ↔

1 ↔

8

CCF Complementa o flag CY CY ← CY ↔

• • • 0 X 4

SCF Seta o flag CY CY ← “1” ↔

• • • 0 0 4

NOP Sem operação. - • • • • • • 4

HALT Parada do Z-80 Fim • • • • • • 4

DI Desabilita interrupções. IFF ← “0” • • • • • • 4

EI Habilita interrupções. IFF ← “1” • • • • • • 4

IM 0 Seta interrupção Modo 0 I ← M0 • • • • • • 8

IM 1 Seta interrupção Modo 1 I ← M1 • • • • • • 8

IM 2 Seta interrupção Modo 2 I ← M2 • • • • • • 8

BIT b, r Verifica bit b do registro r. Resultado fica no flag Z. Z ← rb • ↔

X X 0 1 8

BIT b, (HL) Verifica bit b do conteúdo da posição de memória endereçada pelo par de registros HL. Resultado fica no flag Z

Z ← (HL)b • ↔

X X 0 1 12

BIT b, (IX+d) Verifica bit b do conteúdo da posição de memória endereçada por IX+d. Resultado fica no flag Z

Z ← (IX+d) • ↔

X X 0 1 20

BIT b, (IY+d) Verifica bit b do conteúdo da posição de memória endereçada por IY+d. Resultado fica no flag Z

Z ← (IY+d) • ↔

X X 0 1 20

Page 19: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 18

MNEMÔNICO DESCRIÇÃO OPERAÇÃO COND. DE FLAGS Nº DE

C Z P/V S N H EST.

SET b, r Seta o bit b do registro r rb ← 1 • • • • • • 8

SET b, (HL) Seta o bit b do conteúdo da posição de memória endereçada pelo registro HL

(HL)b ←1 • • • • • • 15

SET b, (IX+d) Seta o bit b do conteúdo da posição de memória endereçada pelo registro IX+d

(IX+d)b ← 1 • • • • • • 23

SET b, (IY+d) Seta o bit b do conteúdo da posição de memória endereçada pelo registro IY+d

(IY+d)b ← 1 • • • • • • 23

RES b, m Resseta o bit do conteúdo m (m)b ← 0 • • • • • •

JP nn Desvia incondicionalmente para a posição de memória nn PC ← nn • • • • • • 10

JP cc, nn Desvia para a posição de memória nn se a condição cc for verdadeira, caso contrário vai para a posição de memória seguinte

se cc = verd. PC ← nn

• • • • • • 10

JR e Desvia incondicionalmente para a posição de memória atual +e

PC ← PC+e • • • • • • 12

JR C, e Desvia para a posição de memória atual +e, se o flag CY = 1

se CY = 1 PC ← PC + e

• • • • • • 7 12

JR NC, e Desvia para a posição de memória atual +e, se o flag CY = 0

se CY = 0 PC ← PC+e

• • • • • • 7 12

JR Z, e Desvia para a posição de memória atual +e, se o flag Z = 1

se Z = 1 PC ← PC+e

• • • • • • 7 12

JR NZ, e Desvia para a posição de memória atual +e, se o flag Z = 0

se Z = 0 PC ← PC +e

• • • • • • 7 12

JP (HL) Desvia incondicionalmente para a posição de memória endereçada pelo par de registros HL

PC ← HL • • • • • • 4

JP (IX) Desvia incondicionalmente para a posição de memória endereçada pelo par de registros IX

PC ← IX • • • • • • 8

JP (IY) Desvia incondicionalmente para a posição de memória endereçada pelo par de registros IY

PC ← IY • • • • • • 8

DJNZ e Decrementa o registro B. Se B ≠ 0, desvia para a posição de memória atual +e. Caso B = 0, vai para a posição de memória seguinte

B ← B-1 se B ≠0, PC←PC+e se B =0, PC←PC+2

• • • • • • 8 13

CALL nn Chama subrotina que começa na posição de memória nn. Guarda endereço de retorno na pilha

(SP-1) ← PCH (SP-2) ← PCL PC ← nn

• • • • • • 17

CALL cc, nn Chama subrotina que começa na posição de memória nn, se condição cc for verdadeira. Guarda endereço de retorno na pilha

Se cc=Verd. (SP-1) ←PCH (SP-2) ← PCL PC ← nn

• • • • • • 10 17

RET Retorno incondicional de subrotina PCL ← (SP) PCH ← (SP+1)

• • • • • • 10

RET cc Retorno condicional de subrotina, se condição cc for verdadeira, retorna ao programa principal

se cc = Verd. PCL ← (SP) PCH ← (SP+1)

• • • • • • 5 11

RETI Retorno de subrotina de tratamento de interrupção mascarável

PCL ← (SP) PCH ← (SP+1)

• • • • • • 14

RETN Retorno de subrotina de tratamento de interrupção não mascarável

PCL ← (SP) PCH ← (SP+1)

• • • • • • 14

RST p Desvia para subrotina de endereço fixo. Guarda endereço de retorno na pilha

(SP-1) ←PCH (SP-2) ←PCL PCH ← 00H PCL ← p

• • • • • • 11

IN A, (n) Carrega no Acumulador o conteúdo do dispositivo de entrada de endereço n

A ← (n) • • • • • • 11

Page 20: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 19

MNEMÔNICO DESCRIÇÃO OPERAÇÃO COND. DE FLAGS Nº DE

C Z P/V S N H EST.

IN r, (C) Carrega no registro r o conteúdo do dispositivo de entrada cujo endereço é fornecido pelo registro C

r ← (C) • ↔

P ↔

0 0 12

INI Carrega o conteúdo da posição de memória endereçada pelo par de registros HL com o conteúdo do dispositivo de entrada cujo endereço é fornecido pelo registro C. Decrementa o registro B. Incrementa o par de registros HL

(HL) ← (C) B ← B-1 HL ← HL+1

• ↔

X X 1 X 16

INIR Carrega o conteúdo da posição de memória endereçada pelo par de registros HL com o conteúdo do dispositivo de entrada cujo endereço é fornecido pelo registro C. Decrementa o registro B. Incrementa o par de registros HL. Repete até B = 00H

(HL) ← (C) B ← B-1 HL ← HL+1 repete até B=00H

• 1 X X 1 X 21 16

IND Carrega o conteúdo da posição de memória endereçada pelo par de registros HL com o conteúdo do dispositivo de entrada cujo endereço é fornecido pelo registro C. Decrementa o registro B. Decrementa o par de registros HL

(HL) ← (C) B ← B-1 HL ← HL-1

• ↔

X X 1 X 16

INDR Carrega o conteúdo da posição de memória endereçada pelo par de registros HL com o conteúdo do dispositivo de entrada cujo endereço é fornecido pelo registro C. Decrementa o registro B. Incrementa o par de registros HL. Repete até B = 00H

(HL) ← (C) B ← B-1 HL ← HL-1 repete até B=00H

• 1 X X 1 X 21 16

OUT (n), A Carrega no dispositivo de saída de endereço n o conteúdo do Acumulador

(N) ← A • • • • • • 11

OUT (C), r Carrega no dispositivo de saída cujo endereço é fornecido pelo registro C o conteúdo do registro r

(C) ← r • • • • • • 12

OUTI Carrega no dispositivo de saída cujo endereço é fornecido pelo registro C o conteúdo da posição de memória endereçada pelo par de registros HL. Decrementa o registro B. Incrementa o par de registros HL

(C) ← (HL) B ← B-1 HL ← HL +1

• ↔

X X 1 X 16

OTIR Carrega no dispositivo de saída cujo endereço é fornecido pelo registro C o conteúdo da posição de memória endereçada pelo par de registros HL. Decrementa o registro B. Incrementa o par de registros HL. Repete até B = 00H

(C) ← (HL) B ← B-1 HL ← HL +1 repete até B=00H

• 1 X X 1 X 21 16

OUTD Carrega no dispositivo de saída cujo endereço é fornecido pelo registro C o conteúdo da posição de memória endereçada pelo par de registros HL. Decrementa o registro B. Decrementa o par de registros HL

(C) ← (HL) B ← B-1 HL ← HL -1

• ↔

X X 1 X 16

OTDR Carrega no dispositivo de saída cujo endereço é fornecido pelo registro C o conteúdo da posição de memória endereçada pelo par de registros HL. Decrementa o registro B. Decrementa o par de registros HL. Repete até B = 00H

(C) ← (HL) B ← B-1 HL ← HL –1 Repete até B=00H

• 1 X X 1 X 21 16

Page 21: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 20

8E ADC A, (HL) DD8E_ ADC A, (IX+d) FD8E_ ADC A, (IY+d) 8F ADC A,A 88 ADC A,B 89 ADC A,C 8A ADC A,D 8B ADC A,E 8C ADC A,H 8D ADC A,L CE_ ADC A,n ED4A ADC HL, BC ED5A ADC HL, DE ED6A ADC HL,HL ED7A ADC HL, SP 86 ADD A, (HL) DD86_ ADD A, (IX+d) FD86_ ADD A, (IY+d) 87 ADD A,A 80 ADD A,B 81 ADD A,C 82 ADD A,D 83 ADD A,E 84 ADD A,H 85 ADD A,L C6_ ADD A,n 09 ADD HL, BC 19 ADD HL, DE 29 ADD HL, HL 39 ADD HL, SP DD09 ADD IX, BC DD19 ADD IX, DE DD29 ADD IX, IX DD39 ADD IX, SP FD09 ADD IY, BC FD19 ADD IY, DE FD29 ADD IY, IY FD39 ADD IY, SP A6 AND (HL) DDA6_ AND (IX+d) FDA6_ AND (IY+d) A7 AND A A0 AND B A1 AND C A2 AND D A3 AND E A4 AND H A5 AND L E6_ AND n CB46 BIT 0,(HL) DDCB_46 BIT 0,(IX+d) FDCB_46 BIT 0, (IY+d) CB47 BIT 0,A CB40 BIT 0,B CB41 BIT 0,C CB42 BIT 0,D CB43 BIT 0,E CB44 BIT 0,H CB45 BIT 0,L CB4E BIT 1,(HL) DDCB_4E BIT 1,(IX+d) FDCB_4E BIT 1,(IY+d) CB4F BIT 1,A CB48 BIT 1,B

CB49 BIT 1, C CB4A BIT 1,D CB4B BIT 1,E CB4C BIT 1,H CB4D BIT 1,L CB56 BIT 2, (HL) DDCB_56 BIT 2, (IX+d) FDCB_56 BIT 2, (IY+d) CB57 BIT 2,A CB50 BIT 2,B CB51 BIT 2,C CB52 BIT 2,D CB53 BIT 2,E CB54 BIT 2,H CB55 BIT 2,L CB5E BIT 3, (HL) DDCB_5E BIT 3, (IX+d) FDCB_5E BIT 3, (IY+d) CB5F BIT 3,A CB58 BIT 3,B CB59 BIT 3,C CB5A BIT 3,D CB5B BIT 3,E CB5C BIT 3,H CB5D BIT 3,L CB66 BIT 4, (HL) DDCB_66 BIT 4, (IX+d) FDCB_66 BIT 4, (IY+d) CB67 BIT 4,A CB60 BIT 4,B CB61 BIT 4,C CB62 BIT 4,D CB63 BIT 4,E CB64 BIT 4,H CB65 BIT 4,L CB6E BIT 5, (HL) DDCB_6E BIT 5, (IX+d) FDCB_6E BIT 5, (IY+d) CB6F BIT 5,A CB68 BIT 5,B CB69 BIT 5,C CB6A BIT 5,D CB6B BIT 5,E CB6C BIT 5,H CB6D BIT 5,L CB76 BIT 6, (HL) DDCB_76 BIT 6, (IX+d) FDCB_76 BIT 6, (IY+d) CB77 BIT 6,A CB70 BIT 6,B CB71 BIT 6,C CB72 BIT 6,D CB73 BIT 6,E CB74 BIT 6,H CB75 BIT 6,L CB7E BIT 7, (HL) DDCB_7E BIT 7, (IX+d) FDCB_7E BIT 7, (IY+d) CB7F BIT 7,A CB78 BIT 7,B CB79 BIT 7,C CB7A BIT 7,D CB7B BIT 7,E CB7C BIT 7,H

CB7D BIT 7,L DC_ _ CALL C,nn FC_ _ CALL M,nn D4_ _ CALL NC,nn CD_ _ CALL nn C4_ _ CALL NZ,nn F4_ _ CALL P,nn EC_ _ CALL PE,nn E4_ _ CALL P0,nn CC_ _ CALL Z,nn 3F CCF BE CP (HL) DDBE_ CP (IX+d) FDBE_ CP (IY+d) BF CP A B8 CP B B9 CP C BA CP D BB CP E BC CP H BD CP L FE_ CP n EDA9 CPD ED89 CPDR EDA1 CPI EDB1 CPIR 2F CPL 27 DAA 35 DEC (HL) DD35_ DEC (IX+d) FD35_ DEC (IY+d) 3D DEC A 05 DEC B 0B DEC BC 0D DEC C 15 DEC D 1B DEC DE 1D DEC E 25 DEC H 2B DEC HL DD2B DEC IX FD2B DEC IY 2D DEC L 3B DEC SP F3 DI 10_ DJNZ e FB EI E3 EX (SP), HL DDE3 EX (SP), IX FDE3 EX (SP), IY 08 EX AF, AF’ EB EX DE, HL D9 EXX 76 HALT ED46 IM 0 ED56 IM 1 ED5E IM 2 ED78 IN A, (C) DB_ IN A, (n) ED40 IN B, (C) ED48 IN C, (C) ED50 IN D, (C) ED58 IN E, (C) ED60 IN H, (C)

ED68 IN L, (C) 34 INC (HL) DD34_ INC (IX+d) FD34_ INC (IY+d) 3C INC A 04 INC B 03 INC BC 0C INC C 14 INC D 13 INC DE 1C INC E 24 INC H 23 INC HL DD23 INC IX FD23 INC IY 2C INC L 33 INC SP EDAA IND EDBA INDR EDA2 INI EDB2 INIR E9 JP (HL) DDE9 JP (IX) FDE9 JP (IY) DA_ _ JP C, nn FA_ _ JP M, nn D2_ _ JP NC, nn C3_ _ JP nn C2_ _ JP NZ, nn F2_ _ JP P, nn EA_ _ JP PE,nn E2_ _ JP P0, nn CA_ _ JP Z, nn 38_ JR C, e 18_ JR e 30_ JR NC, e 20_ JR NZ, e 28_ JR Z, e 02 LD (BC), A 12 LD (DE), A 77 LD (HL), A 70 LD (HL), B 71 LD (HL), C 72 LD (HL), D 73 LD (HL), E 74 LD (HL), H 75 LD (HL), L 36_ LD (HL), n DD77_ LD (IX+d), A DD70_ LD (IX+d), B DD71_ LD (IX+d), C DD72_ LD (IX+d), D DD73_ LD (IX+d), E DD74_ LD (IX+d), H DD75_ LD (IX+d), L DD36_ LD (IX+d), n FD77_ LD (IY+d), A FD70_ LD (IY+d), B FD71_ LD (IY+d), C FD72_ LD (IY+d), D FD73_ LD (IY+d), E FD74_ LD (IY+d), H FD75_ LD (IY+d), L

Page 22: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 21

FD36_ _ LD (IY+d),n 32_ _ LD (nn), A ED43_ _ LD (nn), BC ED53_ _ LD (nn), DE 22_ _ LD (nn), HL DD22_ _ LD (nn), IX FD22_ _ LD (nn), IY ED73_ _ LD (nn), SP 0A LD A, (BC) 1A LD A, (DE) 7E LD A, (HL) DD7E_ LD A, (IX+d) FD7E_ LD A, (IY+d) 3A_ _ LD A, (nn) 7F LD A,A 78 LD, A,B 79 LD A,C 7A LD A,D 7B LD A,E 7C LD A,H ED57 LD A,I 7D LD A,L 3E_ LD A,n 46 LD B, (HL) DD46_ LD B, (IX+d) FD46_ LD B, (IY+d) 47 LD B,A 40 LD B,B 41 LD B,C 42 LD B,D 43 LD B,E 44 LD B,H 45 LD B,L 06_ LD B,n ED48_ _ LD BC, (nn) 01_ _ LD BC, nn 4E LD C, (HL) DD4E_ LD C, (IX+d) FD4E_ LD C, (IY+d) 4F LD C,A 48 LD C,B 49 LD C,C 4A LD C,D 4B LD C,E 4C LD C,H 4D LD C,L 0E_ LD C,n 56 LD D, (HL) DD56_ LD D, (IX+d) FD56_ LD D, (IY+d) 57 LD D,A 50 LD D,B 51 LD D,C 52 LD D,D 53 LD D,E 54 LD D,H 55 LD D,L 10_ LD D,n ED58_ _ LD DE, (nn) 11_ _ LD DE, nn 5E LD E, (HL) DD5E_ LD E, (IX+d) FD5E_ LD E, (IY+d) 5F LD E,A 58 LD E,B 59 LD E,C 5A LD E,D 5B LD E,E 5C LD E,H 5D LD E,L

1E_ LD E,n 66 LD H, (HL) DD66_ LD H, (IX+d) FD66_ LD H, (IY+d) 67 LD H,A 60 LD H,B 61 LD H,C 62 LD H,D 63 LD H,E 64 LD H,H 65 LD H,L 26_ LD H,n 2A_ _ LD HL, (nn) 21_ _ LD HL, nn ED47 LD I,A DD2A_ _ LD IX, (nn) DD21_ _ LD IX, nn FD2A_ _ LD IY, (nn) FD21_ _ LD IY, nn 6E LD L, (HL) DD6E_ LD L, (IX+d) FD6E_ LD L, (IY+d) 6F LD L,A 66 LD L,B 67 LD L,C 6A LD L,D 6B LD L,E 6C LD L,H 6D LD L,L 2E_ LD L,n ED78_ _ LD SP, (nn) F9 LD SP, HL DDF9 LD SP, IX FDF9 LD SP, IY 31_ _ LD SP, nn EDA8 LDD ED88 LDDR EDA0 LDI EDB0 LDIR ED44 NEG 00 NOP B6 OR (HL) DDB6_ OR (IX+d) FDB6_ OR (IY+d) B7 OR A B0 OR B B1 OR C B2 OR D B3 OR E B4 OR H B5 OR L F6_ OR n EDBB OTDR EDB3 OTIR ED79 OUT (C), A ED41 OUT (C), B ED49 OUT (C), C ED51 OUT (C), D ED59 OUT (C), E ED61 OUT (C), H ED69 OUT (C), L D3_ OUT (n), A EDAB OUTD EDA3 OUTI F1 POP AF C1 POP BC D1 POP DE E1 POP HL DDE1 POP IX FDE1 POP IY

F5 PUSH AF C5 PUSH BC D5 PUSH DE E5 PUSH HL DDE5 PUSH IX FDE5 PUSH IY CB86 RES 0, (HL) D0CB_86 RES 0, (IX+d) FDCB_86 RES 0, (IY+d) CB87 RES 0,A CB80 RES 0,B CB81 RES 0,C CB82 RES 0,D CB83 RES 0,E CB84 RES 0,H CB85 RES O,L CB8E RES 1, (HL) DDCB_8E RES 1, (IX+d) FDCB_8E RES 1, (IY+d) CB8F RES 1,A CB88 RES 1,B CB89 RES 1,C CB8A RES 1,D CB8B RES 1,E CB8C RES 1,H CB8D RES 1,L CB96 RES 2, (HL) D0CB_96 RES 2, (IX+d) FDCB_96 RES 2, (IY+d) CB97 RES 2,A CB90 RES 2,B CB91 RES 2,C CB92 RES 2,D CB93 RES 2,E CB94 RES 2,H CB95 RES 2,L CB9E RES 3, (HL) DDCB_9E RES 3, (IX+d) FDCB_9E RES 3, (IY+d) CB9F RES 3,A CB98 RES 3,B CB99 RES 3,C CB9A RES 3,D CB9B RES 3,E CB9C RES 3,H CB9D RES 3,L CBA6 RES 4, (HL) DDCB_AB RES 4, (IX+d) FDCB_AB RES 4, (IY+d) CBA7 RES 4,A CBA0 RES 4,B CBA1 RES 4,C CBA2 RES 4,D CBA3 RES 4,E CBA4 RES 4,H CBA5 RES 4,L CBAE RES 5, (HL) DDCB_AE RES 5, (IX+d) FDCB_AE RES 5, (IY+d) CBAF RES 5,A CBA8 RES 5,B CBA9 RES 5,C CBAA RES 5,D CBAB RES 5,E CBAC RES 5,H CBAD RES 5,L CBB6 RES 6, (HL) DDCB_B6 RES 6, (IX+d) FDCB_B6 RES 6, (IY+d) CBB7 RES 6,A

CBB0 RES 6,B CBB1 RES 6,C CBB2 RES 6,D CBB3 RES 6,E CBB4 RES 6,H CBB5 RES 6,L CBBE RES 7, (HL) DDCB_BE RES 7, (IX+d) FDCB_BE RES 7, (IY+d) CBBF RES 7,A CBB8 RES 7,B CBB9 RES 7,C CBBA RES 7,D CBBB RES 7,E CBBC RES 7,H CBBD RES 7,L C9 RET D8 RET C F8 RET M D0 RET NC C0 RET NZ F0 RET P E8 RET PE E0 RET PO C8 RET Z ED4D RETI ED45 RETN CB16 RL (HL) DDCB_16 RL (IX+d) FDCB_16 RL (IY+d) CB17 RL A CB10 RL B CB11 RL C CB12 RL D CB13 RL E CB14 RL H CB15 RL L 17 RLA CB06 RLC (HL) DDCB_06 RLC (IX+d) FDCB_06 RLC (IY+d) CB07 RLC A CB00 RLC B CB01 RLC C CB02 RLC D CB03 RLC E CB04 RLC H CB05 RLC L 07 RLCA ED6F RLD CB1E RR (HL) DDCB_1E RR (IX+d) FDCB_1E RR (IY+d) CB1F RR A CB18 RR B CB19 RR C CB1A RR D CB1B RR E CB1C RR H CB1D RR L 1F RRA CB0E RRC (HL) DDCB_0E RRC (IY+d) FDCB_0E RRC (IY+d) CB0F RRC A CB08 RRC B CB09 RRC C CB0A RRC D CB0B RRC E CB0C RRC H

Page 23: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 22

CB0D RRC L 0F RRCA ED67 RRD C7 RST 0 D7 RST 10H DF RST 18H E7 RST 20H EF RST 28H F7 RST 30H FF RST 38H CF RST 8 9E SBC A, (HL) DD9E_ SBC A, (IX+d) FD9E_ SBC A, (IY+d) 9F SBC A,A 98 SBC A,B 99 SBC A,C 9A SBC A,D 9B SBC A,E 9C SBC A,H 9D SBC A,L DE_ SBC A,n ED42 SBC HL, BC ED52 SBC HL, DE ED62 SBC HL, HL ED72 SBC HL, SP 37 SCF CBC6 SET 0, (HL) DDCB_C6 SET 0, (IX+d) FDCB_C6 SET 0, (IY+d) CBC7 SET 0,A CBC0 SET 0,B CBC1 SET 0,C CBC2 SET 0,D CBC3 SET 0,E CBC4 SET 0,H CBC5 SET 0,L CBCE SET 1, (HL) DDCB_CE SET 1, (IX+d) FDCB_CE SET 1, (IY+d) CBCF SET 1,A CBC8 SET 1,B CBC9 SET 1,C CBCA SET 1,D CBCB SET 1,E

CBCC SET 1,H CBCD SET 1,L CBD6 SET 2, (HL) DDCB_06 SET 2, (IX+d) FDCB_D6 SET 2, (IY+d) CBD7 SET 2,A CBD0 SET 2,B CBD1 SET 2,C CBD2 SET 2,D CBD3 SET 2,E CBD4 SET 2,H CBD5 SET 2,L CBD8 SET 3,B CBDE SET 3, (HL) DDCB_DE SET 3, (IX+d) FDCB_DE SET 3, (IY+d) CBDF SET 3,A CBD9 SET 3,C CBDA SET 3,D CBDB SET 3,E CBDC SET 3,H CBDD SET 3,L CBE6 SET 4, (HL) DDCB_E6 SET 4, (IX+d) FDCB_E6 SET 4, (IY+d) CBE7 SET 4,A CBE0 SET 4,B CBE1 SET 4,C CBE2 SET 4,D CBE3 SET 4,E CBE4 SET 4,H CBE5 SET 4,L CBEE SET 5, (HL) DDCB_EE SET 5, (IX+d) FDCB_EE SET 5, (IY+d) CBEF SET 5,A CBE8 SET 5,B CBE9 SET 5,C CBEA SET 5,D CBEB SET 5,E CBEC SET 5,H CBED SET 5,L CBF6 SET 6, (HL) DDCB_F6 SET 6, (IX+d) FDCB_F6 SET 6, (IY+d)

CBF7 SET 6,A CBF0 SET 6,B CBF1 SET 6,C CBF2 SET 6,D CBF3 SET 6,E CBF4 SET 6,H CBF5 SET 6,L CBFE SET 7, (HL) DDCB_FE SET 7, (IX+d) FDCB_FE SET 7, (IY+d) CBFF SET 7,A CBF8 SET 7,B CBF9 SET 7,C CBFA SET 7,D CBFB SET 7,E CBFC SET 7,H CBFD SET 7,L CB26 SLA (HL) DDCB_26 SLA (IX+d) FDCB_26 SLA (IY+d) CB27 SLA A CB20 SLA B CB21 SLA C CB22 SLA D CB23 SLA E CB24 SLA H CB25 SLA L CB2E SRA (HL) DDCB_2E SRA (IX+d) FDCB_2E SRA (IY+d) CB2F SRA A CB28 SRA B CB29 SRA C CB2A SRA D CB2B SRA E CB2C SRA H CB2D SRA L CB3E SRL (HL) DDCB_3E SRL (IX+d) FDCB_3E SRL (IY+d) CB3F SRL A CB38 SRL B CB39 SRL C CB3A SRL D CB3B SRL E

CB3C SRL H CB3D SRL L 96 SUB (HL) DD96_ SUB (IX+d) FD96_ SUB (IY+d) 97 SUB A 90 SUB B 91 SUB C 92 SUB D 93 SUB E 94 SUB H 95 SUB L D6_ SUB n AE XOR (HL) DDAE_ XOR (IX+d) FDAE_ XOR (IY+d) AF XOR A A8 XOR B A9 XOR C AA XOR D AB XOR E AC XOR H AD XOR L EE_ XOR n

Page 24: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 23

3 - EXEMPLOS DE PROGRAMAÇÃO 1. Colocar 20H na posição de memória 1A00H. 2. Colocar o conteúdo da posição de memória 1950H nos registros B e D. 3. Colocar 00H na posição de memória 1E00H e 01H na posição de

memória 1E01H. 4. Colocar 19H nas posições de memória 1900H, 1901H, 1902H e 1903H. 5. Colocar o conteúdo da posição de memória 1B00H no registro E e o

conteúdo da posição de memória 1B01H no registro D. 6. Colocar 30H na posição de memória 1900H, 31H em 1901H, 32H em

1902H, 33H em 1903H, 34H em 1904H e 35H em 1905H. 7. Incrementar o conteúdo da posição de memória 1960H e decrementar o

conteúdo da posição de memória 1961H. 8. Somar o conteúdo da posição de memória 1C00H com o registro B e

guardar o resultado no registro C. 9. Somar o registro H com o registro L e guardar o resultado em 19A0H. 10. Somar o conteúdo da posição de memória 1905H com o conteúdo da

posição de memória 1906H e guardar o resultado em 1904H. 11. Somar 32H com o conteúdo da posição de memória 1930H e guardar o

resultado em 1950H. 12. Subtrair 05H do conteúdo da posição de memória 1900H e guardar o

resultado em 1905H. 13. Fazer a subtração de H com L (H-L) e guardar H em 1900H, L em 1901H

e o resultado em 1902H. 14. Decrementar o registro B e incrementar duas vezes o registro C, repetir

até o registro B assumir o valor 00H. 15. Deixar o acumulador igual a 00H. 16. Verificar o valor do bit B4 do conteúdo da posição de memória 1900H. Se B4 = “0” colocar 00H em 1901H. Se B4 = “1” colocar FFH em 1901H. 17. Deixar os bits B6 e B1 iguais a “1” e não modificar o valor dos outros bits

do conteúdo da posição de memória 1950H.

Page 25: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 24

18. Deixar os bits B4 e B0 iguais a “0” e não modificar o valor dos outros bits do conteúdo da posição de memória 1920H.

19. Determinar quantos bits tem valor “1” no conteúdo da posição de

memória 1910H. Colocar o resultado em 1911H. 20. Inverter o valor dos bits B0 a B3 do registro L e não alterar o valor dos

demais bits (B4 a B7).

Page 26: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 25

4 - LISTA DE EXERCÍCIOS DO Z-80 Para os exercícios a seguir fazer o fluxograma, linguagem assembly para o Z-80 e linguagem de máquina. Considerar que o programa começará na posição 1800H. 1. Colocar 00H na posição de memória 1900H. 2. Somar os conteúdos das posições 1900H e 1901H e colocar o

resultado em 1902H. 3. Colocar o maior dos conteúdos das posições 1900H e 1901H em 1902H. 4. Transferir uma tabela de 20 elementos que começa no endereço 1900H

para 1950H. 5. Testar o bit 4 (B3) do conteúdo da posição 1900H. Colocar 00H em

1901H se B3=0 ou 01H se B3=1 6. Colocar os 4 bits menos significativos da posição de memória 1900H nos

4 bits menos significativos da posição de memória 1901H. Limpar os 4 bits mais significativos de 1901H.

7. Somar o número de 16 bits localizado nas posições 1900H e 1901H

com o número de 16 bits localizado nas posições 1902H e 1903H. Armazenar o resultado nas posições 1904H, 1905H e 1906H.

8. Determinar o maior elemento de uma tabela. O comprimento da

tabela está na posição 1900H e a tabela começa no endereço 1901H. Colocar o maior elemento logo após o último elemento da tabela.

9. Deslocar para esquerda o conteúdo da posição de memória 1900H até

que o bit mais significativo fique "1". Armazenar o número de deslocamento para esquerda na posição 1901H. Se o conteúdo da posição de memória 1900H é 00H, colocar 00H em 1901H.

10. Determinar o comprimento de um STRING de caracteres ASCII (caracter

ASCII com 7 bits e o 8º bit igual a "0"). O STRING começa no endereço 1900H e o fim é marcado pelo caracter CR (CARRIAGE RETURN). Colocar o comprimento do STRING na posição 1A00H.

11. Calcular o CHECKSUM de uma memória EPROM 2716 que está

alocada a partir do endereço 2000H. Colocar o resultado na posição 1900H. O CHECKSUM pode ser feito pela SOMA ou OU-EXCLUSIVO de todos os bytes de memória.

Page 27: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 26

12. Determinar o comprimento de uma mensagem ASCII. A mensagem começa com um caracter STX e termina com ETX. Pesquisar a mensagem a partir do endereço 1900H, colocar o endereço inicial da mensagem em 1A00H e 1A01H, o endereço final em 1A02H e 1A03H e o comprimento em 1A04H.

13. Dada uma tabela que começa em 1900H e tem 10 elementos.

Determinar quantos bits "1" existem nesta tabela. Guardar o resultado em 1A00H.

14. Dada uma tabela com 20 elementos e com inicio em 1900H, pede-se: - deixar os bits 0 e 4 de todos os elementos com valor "1"; - deixar os bits 6 e 7 dos elementos pares com valor "0". 15. Dada uma tabela com 10 elementos e com início em 1900H, pede-se: - Determinar quantos elementos tem bits "0" e "3" igual a "zero" e bits

"1" e "5" iguais a "1". Colocar o resultado em 1950H. 16. Fazer uma subrotina para determinar qual caracter da base hexadecimal

é maior: - os 2 caracteres estão no acumulador

A7 A6 A5 A4 A3 A2 A1 A0 Y3 Y2 Y1 Y0 X3 X2 X1 X0

Y X - se Y>X → fazer flag CY = "1" e retornar - se Y<=X → fazer flag CY = "0" e retornar 17. Fazer um programa para executar o seguinte: - determinar numa tabela quantos elementos são maiores que 64H e

guardar o resultado em 1A00H. - guardar os endereços das posições que contém os elementos

maiores que 64H, a partir da posição 1B00H. Considerar: - a tabela começa em 1900H. - a tabela tem 10 elementos

Page 28: Z80 Linguagem Assembly 2

Apostila de propriedade do Prof. Cruz 27

18. Preencher uma tabela que começa em 1900H e tem (50)10 elementos com elementos com valor 00H.

19. Preencher a memória do endereço 1900H até 19FFH com 00H, 01H,

02H, 03H,....., FFH. 20. Complementar o conteúdo da posição de memória 1950H e colocar o

resultado em 1951H.