Os modos de endereçamento são o meio pelo qual o Z80 busca ou recupera os operandos como registradores, flags ou valores em memória utilizados para executar suas instruções.

O Z80 possui os modos de endereçamento: Bit, Implicit, Immediate, Immediate Extended, Extended, Register e Register Indirect. Esses modos de enderaçamento bem como seus funcionamentos serão vistos logo abaixo.

Notação:
(): conteúdo de memória
# valor imediato
AD endereço interno
d valor sinalizado de 8-bits
h valor hexadecimal
HH byte mais alto
LL byte mais baixo
mnemônico sigla da instrução
p registrador par BC, DE ou HL
PC Contador de programa
r, r’ registradores de uso geral

No modo Bit, um bit de um registrador ou valor em memória é usado como operando da instrução. Esse modo é usado nas instruções de manipulação de bit SET, RES e BIT Test. Essas modo pode ter de 2 a quatro 4 bytes de tamanho.

PC + 1 + 2 + 3
Byte 0 Byte 1 Byte 2 Byte 3
PP CB d opcode
PC + 1
Byte 0 Byte 1
CB opcode
Operação:
reset/set
RAM[num_bit] <- 0|1
r[num_bit] <- 0|1

test
RAM[num_bit] = 0|1
r[num_bit] = 0|1
Sintaxe:
mnemônico num_bit, r
mnemônico num_bit, (p)
mnemônico num_bit, (IX+d)
mnemônico num_bit, (IY+d)
Onde:
PP: DD,FD
SS: CB
r: registradores de uso geral
mum_bit: 0-7
d: valor 8-bits sinalizado
Ex:
bit 7,a

O modo implícito informa que uma instruções contém as informações sobre o(s) operando(s) utilizado(s). Usado em instruções como RST e flag.

PC
Byte 0
opcode
Operação:
-
Sintaxe:
mnemônico
Ex:
ccf

No modo imediato, um valor de 8-bits imediato que faz parte da instrução é usado como operando. Esse modo de endereçamento é usado em instruções de carga/load, por exemplo.

PC + 1
Byte 0 Byte 1
opcode NN
Operação:
r <- #NN
Sintaxe:
mnemônico r, #$NN
Onde:
-
Ex:
ld a,#$ff

No modo indireto, um valor contido no registrador HL, BC ou DE é utilizado para recuperar ou armazenar um valor de 8-bits em memória de forma indireta.

PC + 1 + 2
Byte 0 Byte 1 Byte 2
opcode LL HH
Operação:
p.LL <- LL
p.HH <- HH
Sintaxe:
mnemônico p, HHLL
Ex:
ld sp, #$FFFF

No modo Extended, um operando composto de dois bytes é usado como endereço para leitura/load, escrita/store de um valor em memória ou como endereço para desvio de fluxo de execução.

PC + 1 + 2
Byte 0 Byte 1 Byte 2
opcode LL HH
Operação:
leitura:
r <- (HHLL)

escrita:
(HHLL) <- #valor
(HHLL) <- r

desvio:
PC <- AD.H|AD.L
Sintaxe:
mnemônico r, $HHLL
mnemônico $HHLL
Ex:
call $FF00

Nesse modo, os registradores IX ou IY são utilizados como operandos. Um valor de 8-bits sinalizado é adicionado aos registradores para formar um endereço de memória onde um valor é lido ou escrito. Esse modo é usado para acessar arrays, strings e structs.

PC + 1 + 2
Byte 0 Byte 1 Byte 2
DD opcode d
Operação:
r <-> (IX|IY + d) ; leitura/escrita
ou
(IX|IY + d) <- #valor ;escrita
Sintaxe:
mnemônico r,(IX + d)
mnemônico r,(IY + d)
Ex:
ld a, (IX + 0)
ld b, (IX + 1)

Esse modo de endereçamento é usado apenas pelas instruções RST. Uma instrução CALL implícita utiliza bits da instrução RST como operando para calcular o endereço do vetor de interrupção na página zero para onde o PC deve ser desviado.

PC
Byte 0
opcode
Operação:
-
Sintaxe:
RST #00-30h
Ex:
RST #$10

Nesse modo Relative, um valor imediato de 8-bits sinalizado é usado como operando da instrução para calcular o endereço de 16-bits para desvio inferior ou superior ao PC que é usado como base. Esse modo é usado por instruções de desvio call cc, jr cc e ret cc

PC + 1
Byte 0 Byte 1
opcode (+/-)e
Operação:
PC <- PC + (+/-)e
Sintaxe:
mnemônico cc, local_relativo
mnemônico cc, #$e
Onde:
-
Ex:
jr m, nome_local

No modo registrador, os registradores de uso geral são usados como operandos da instrução. Usado em instruções de load/carga.

PC
Byte 0
opcode
Operação:
r <- r’
Sintaxe:
mnemônico r, r’
Ex:
ld a,b

No ME registrador indireto, um endereço de 16-bits é utilizado de forma indireta para leitura ou escrita de dados em memória. Um endereço estendido ou um dos pares BC, DE ou HL podem ser utilizados.

PC
Byte 0
opcode
PC + 1
Byte 0 Byte 1
opcode nn
Operação:
r <- (p)
(p) <- r|#nn
Sintaxe:
mnemonico (p), r
mnemonico r, (p)
mnemonico (p), #$nn
Onde:
*Se endereço estendido for usado
Ex:
ld a, (HL)
ld (HL), #$ff
  1. 17/02/2026 - versão inicial: Todos os modos de endeçamento