O z80 possui os mesmos registradores do i8080 com adição de registradores alternativos,
registradores de indexação e registradores I e R.
Registradores 8-bits
Os registradores de uso geral e A, B, C, D, E, H, L e seus espelhos/alternativos são usados
para manipulação de dados 8-bits assim como no i8080.
Tab. 1: Registradores 8-bits
| 8-bits |
8-bits |
| A |
F |
| B |
C |
| D |
E |
| H |
L |
O registrador A é um registrador de 8-bits que é utilizado em operações aritméticas, lógicas, pilha,
carregamento e armazenamento de dados. Há instruções específicas que utilizam apenas o registrador A
implicitamente.
A registrador F armazena as flags de status do processador. Esse registrador será visto mais
adiante com mais informações sobre cada flag contida nele.
Tab. 2: Registradores Altenativos
| 8-bits |
8-bits |
| A' |
F' |
| B' |
C' |
| D' |
E' |
| H' |
L' |
Os registradores principais e alternativos não podem ser utilizados ao mesmo tempo, sendo
alternados por meio das instruções EX.
O registrador B ou par BC é utilizado implicitamente como contador em instruções de
transferência de dados e loops.
Wrap-around
Os registradores, quando adicionado/subtraído algum valor cujo o resultado ultrapasse
seu limite superior ou inferior, ocorre o wrap-around ou efeito circular.
Ex: 8-bits
FFh + 2 -> 01h
Registradores I e R
O registrador I, Interrupt Vector, é utilizado para interrupção. O I armazena o byte
mais alto do endereço da tabela de vetores para interrupção quando o Z80 é configurado para
trabalhar no modo de interrupção 2
via instrução IM.
O registrador R, Memory Refresh, é um contador utilizado internamente pelo processador para refresh de memória
dinâmica, sendo seu uso específico do hardware que utiliza o Z80 não sendo usado para programação,
exceto pelo seu carregamento.
Os registradores 8-bits de uso geral vistos acima podem ser combinados formando os pares AF,
BC, DE e HL. Os três últimos pares são usados para dados e também como endereços de memória.
Tab. 3: Registradores 16-bits
| 16-bits |
16-bits |
| AF |
AF' |
| BC |
BC' |
| DE |
DE' |
| HL |
HL' |
Os pares DE e HL são usados de forma exclusiva como endereços de origem e destino em instruções
de transferência de dados. O par BC é utilizado como contador nestas instruções. O par AF não
é utilizado como endereço e operações aritméticas, lógicas e outras.
Registradores Indexadores
Os registradores indexadores são utilizados para acessar dados de array, structs, objetos ou
outros dados complexos tendo seus valores adicionados a endereços de memória.
Tab. 4: IX e IY
| 16-bits |
| IX |
| IY |
Esses registradores também são utilizados em operações aritméticas, load/store e manipulação
de bits.
Registadores PC e SP
O registrador PC(Contador de Programa) armazena o endereço da próxima instrução a ser
executada. É armazenado na pilha quando uma
subrotina ou
interrupção é executada.
Tab. 5: PC e SP
| 16-bits |
| SP |
| PC |
O registrador SP, assim como no 8080, armazena o ponteiro para o topo da
pilha onde dados serão armazenados com as instruções
PUSH e recuperados com as instruções POP.
A definição do local inicial do SP é feita via programação ao iniciar um programa. A região
onde a pilha pode residir fica a cargo do mapeamento de memória predefinido pelo hardware
utilizado.
A pilha do processador Z80 aceita apenas que valores de 16-bits sejam salvos. Os registradores 8-bits
são salvos de acordo com seus pares.
Wrap-around
Os registradores, quando adicionados/subtraídos de/a algum valor cujo o resultado ultrapasse
seu limite superior ou inferior, ocorre o wrap-around ou efeito circular.
Ex: 16-bits
FFFFh + 2 -> 0001h