Objetivos
O 6502 possui ao todo seis registradores: PS, PC, SP, A,
X e Y que estão listados de forma resumida nas tabelas abaixo. A descrição e
uso desses registradores serão vistos mais adiante.
| Registrador |
Descrição |
Tamanho(bits) |
| A |
Accumulator/Acumulador |
8 |
| X |
Registrador/Indexador X |
8 |
| Y |
Registrador/Indexador Y |
8 |
| SP |
Stack Pointer |
8 |
| PC |
Program Counter |
16 |
| PS |
Processor Status |
8 |
PS - Processor Status
| Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
| N |
V |
- |
B |
D |
I |
Z |
C |
Como os registradores residem na memória interna do processador, o acesso para leitura e
escrita de dados é muito mais rápido do que utilizar a memória pois não utiliza o barramento
de acesso a RAM que consome mais tempo.
Os registradores do 6502, quando adicionado/subtraído algum valor cujo o resultado ultrapasse seus
limite superior ou inferior, ocorre o wrap-around ou efeito circular.
Ex:
FFh + 2 -> 01h
Ex:
FFFFh + 2 -> 0001h
Processadores variantes podem possuir mais registradores de uso geral e em memória como é o caso
do C64DTV2 que possui 16 registradores extras. Outras variantes possuem um barramento de memória
de 13-bits como o 6507.
A - Accumulator - Acumulador
O registrador A é um registrador de 8-bits que é utilizado em operações
aritméticas, lógicas, pilha, carregamento e armazenamento de dados. Quase todas as instruções
utilizam o acumulador.
X e Y - Registradores de indexação
O 6502 possui dois registradores de índice, X e Y, que são usados tanto para
acessar valores em memória quanto utilizados para armazenar valores. Ambos têm o tamanho de
8-bits.
Program Counter - Contador de Programa
O PC é um registrador de 16-bits que armazena o endereço da próxima instrução que
será executada pelo processador. Este registrador é incrementado automaticamente à medida que
as instruções vão sendo executadas ou modificadas por algumas instruções de desvio de fluxo.
Stack Pointer - Ponteiro para Pilha
O SP é um registrador de 8-bits, byte menos significatico, que armazena o endereço
disponível na pilha. Este registrador é incrementado automaticamente pelas instruções
PUSH e PULL e modificado por outras instruções.
Processor Status - Status do Processador - Flags
O 6502 possui um grupo de flags para que possamos entender seu status após a execuções de suas
instruções. Abaixo, a explicação das flags:
PS - Processor Status
| Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
| N |
V |
- |
B |
D |
I |
Z |
C |
Bit 0: Carry
A flag C(Carry), pode ser entendida como o "Vai-um ou Vem-um" em operações aritméticas de soma
e subtração. Em instrução de deslocamento e rotação de bits armazena os bits mais e menos
significativos.
Bit 1: Zero
A flag Z(Zero) indica que o valor carregado em um registrador ou memória é igual a zero ou não.
Se for igual a zero, a flag recebe o valor 1. Caso contrário, recebe o valor de 0.
Bit 2 : Interrupt Enable/Disable
Flag utilizada para habilitar e desabilitar o reconhecimento de interrupções.
Quando seu valor é 0, nenhuma interrupção é reconhecida. Quando seu valor é 1,
as interrupções são reconhecidas e executadas. Uma Interrupção não-mascarável(NMI)
não é afetada pela flag I.
Bit 3: Decimal
Flag utilizada para instruções aritméticas com números decimais BCD apenas. Na versão variante
2A03, o modo aritmético BCD patenteado foi removido permanecendo a flag disponível sem função.
Bit 4: Break
Flag lógica utilizada pela instrução BRK(BReak) para depuração de código. Essa flag existe apenas
quando o PS é salvo na pilha.
Bit 5: -
Bit 6: Overflow
A flag O(Overflow) é utilizada em operações que envolvem aritmética sinalizada indicando um
extravasamento no armazenamento. Por exemplo, se dois valores de mesmo sinal são somados e
um valor de sinal contrário é gerado, há overflow. Ocorrendo overflow, a flag V recebe o valor 1.
Caso não ocorra, recebe o valor 0.
A flag V pode ser também setada(1) atráves do pino SO presente no 6502.
Bit 5: Negative
A flag N(Negative) indica a sinalização de um valor armazenado no registrador A. Se um valor
for positivo, a flag recebe valor 0. Caso seja negativo recebe o valor 1. Um valor sinalizado
é indicado pelo bit 7.
"Flags" : Bit 5 e B
A flag lógica B existe apenas quando o PS é salvo na pilha. Quando o PS é restaurado pelas
instruções PHP ou RTI essa flag é descartada. É setada(1) pelas instruções BRK e PHP e
resetada(0) quando uma interrupção de hardware(IRQ ou MNI) ocorre. Essa flag é utilizada para
diferencar entre a interrupção de software BRK e a interrupção de hardware IRQ.
A Bit 5, é setada sempre que o PS for salvo(PHP) na pilha e ignorado quando o PS for
restaurado pelas instruções PLP ou RTI.
Quando o 6502 é ligado(power-on), os registradores são iniciados como mostrados logo abaixo. Os
valores iniciais mostrados podem variar de acordo com o hardware ou implementação do 6502.
- PC : ($FFFC)
- SP: $FD ($01FD)
- Flag I: 1
- Flag D: 0
- A, X, Y: 00
- RAM: indefinido
Ao resetar(reset) o 6502, os registradores são iniciados como mostrados logo abaixo. Os valores
mostrados podem variar de acordo com o hardware ou implementação do 6502/Derivado.
- PC : ($FFFC)
- SP: $FF ($01FF)
- Flag I: 1
- Flag D: 0
- A, X, Y: indefinido
- RAM: indefinido
Histórico de atualizações
- 12/01/2026 - revisão 3 - Ajustes: pontuais; Adição: Valores iniciais, informação sobre wrap-around e 2A03
- 11/03/2025 - revisão 2 - Adição de tópico sobre flags B e Bit 5, Info sobre SO em flag V
- 04/10/2023 - revisão 1 - Correção em de links, layout e navegação e descrição SP
- 28/04/2023 - versão inicial
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.