Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.

  1. Visão geral dos registradores
  2. Acumulador(A)
  3. X e Y
  4. Program Counter
  5. Stack Pointer
  6. Flags - PS
  7. Flags B e Bit 5
  8. Valores iniciais

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.

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.

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.

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.

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.

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: -

Não utilizado

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.

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.

  1. PC : ($FFFC)
  2. SP: $FD ($01FD)
  3. Flag I: 1
  4. Flag D: 0
  5. A, X, Y: 00
  6. 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.

  1. PC : ($FFFC)
  2. SP: $FF ($01FF)
  3. Flag I: 1
  4. Flag D: 0
  5. A, X, Y: indefinido
  6. RAM: indefinido
  1. 12/01/2026 - revisão 3 - Ajustes: pontuais; Adição: Valores iniciais, informação sobre wrap-around e 2A03
  2. 11/03/2025 - revisão 2 - Adição de tópico sobre flags B e Bit 5, Info sobre SO em flag V
  3. 04/10/2023 - revisão 1 - Correção em de links, layout e navegação e descrição SP
  4. 28/04/2023 - versão inicial