Os modos de endereçamento(ME) são o meio pelo qual o 65016 busca ou recupera os operandos utilizados para executar suas instruções.

Os MEs legados no modo emulação podem ser vistos em 6502: Modos de endereçamento e 65C02: Modos de endereçamento.

Os modos de endereçamento legados são suportados no modo nativo com dados 16-bits de tamanho para leitura, escrita e desvio de fluxo.

No 65018, o termo Direct Page substituí o termo Zero Page para modos de endereçamento Zero Page de seus antecessores.

A leitura ou escrita de dados depende de como as flags M e X estão configuradas como mostrado em Arquitetura: Modos de operação.

Os registradores de bancos stack, programação e dados têm seus valores zerados no reset e mantidos assim no modo emulação para trabalharem apenas no banco/página 0.

Notação usada
  1. HH: byte mais alto de endereço
  2. MM: byte médio do endereço
  3. LL: byte mais baixo de endereço
  4. #$NN: valor imediato 8-bits
  5. #$HHLL: valor imediato 16-bits
  6. PC: Contador de programa
  7. ef: Endereço final
  8. ei: Endereço indireto
  9. H,h,0x: valor hexadecimal
  10. /: ou
  11. |: concatenação

Com o 65816, foram adicionados 9 novos modos de endereçamento parar suprir as necessidades encontrados em seus antecessores:

Novos MEs:
  1. Program Counter Relative Long
  2. Stack Relative
  3. Stack Relative Indirect Indexed with Y
  4. Block Move
  5. Absolute Long
  6. Absolute Long Indexed with X
  7. Absolute Indirect Long
  8. Direct Page Indirect Long
  9. Direct Page Indirect Long Indexed with Y

O descrição, tamanho em bytes, operação e outros serão vistos abaixo seguidos dos modos legados.

Nesse modo, um valor 16-bits imediato e sinalizado é adicionado ao conteúdo do registrador PC para formar o endereço relativo final com alcance entre 32.767 a -32.768 de alcance. Usado em instruções de controle de fluxo.

Tab. 1
PC + 1 + 2
Byte 0 Byte 1 Byte 2
opcode LL HH
Operação:
PC <- PC + (+/-)#$HHLL
Sintaxe:
mnemônico $HHLL
mnemônico nome_local
Onde:
-
Ex:
-

No modo Stack Relative, a stack é tratada ou vista como array. Um valor de 8-bits imediato e sinalizado é adicioinado ao valor do SP formando um endereço relativo para leitura ou escrita de dados da stack.

Tab. 2
PC + 1
Byte 0 Byte 1
opcode e
Operação:
ef <- SP + (+/-)e
Sintaxe:
mnemônico #$e,s
Onde:
s: stack pointer
e: byte sinalizado
Ex:
-

Nesse ME, a stack é tratada ou vista também como um array. Um valor de 8-bits imediato e sinalizado é adicionado ao valor do SP formando um endereço que contém o endereço indireto de 16-bits é adicionado ao registrador Y para formar o endereço final para leitura ou escrita de dados.

Tab. 3
PC + 1
Byte 0 Byte 1
opcode $NN
Operação:
ei <- (SP + (+/-)#$NN)
ef < - ei + Y
Sintaxe:
mnemônico ($NN,S),Y
Onde:
-
Ex:
-

Esse modo é utilizado para recuperar argumentos ou inserir valores de retorno para subrotinas.

Esse novo modo de endereçamento permite transferir bytes entre bancos de memória informados como operandos imediatos. O registrador A(C) atua como contador, enquanto os registradores X e Y como endereços de origem e destino dos bytes para transferência.

Tab. 4
PC + 1 + 2
Byte 0 Byte 1 Byte 2
opcode $nn $mm
Operação:
M[DBR|X] <-  M[DBR|Y]
Sintaxe:
mnemônico $nn,$mm
Onde:
nn: Banco de origem
mm: Banco de destino
Ex:
-

No modo emulação, os bancos tanto de origem quanto destino devem ser informados como 00h, pois apenas o banco 0 é aceito.

No modo Absolute Long, um valor imediato de 24-bits é usado para formar um endereço final para desvio de código ou fluxo. O byte mais significativo sobrescreve o conteúdo do registrador de banco PBR.

Tab. 5
PC + 1 + 2 + 3
Byte 0 Byte 1 Byte 2 Byte 3
opcode LL MM HH
Operação:
PC <- #$HHMMLL
Sintaxe:
mnemônico $HHMMLL
mnemônico nome_local
Onde:
-
Ex:
-

Nesse modo, o registrado X é adicionado a um valor absoluto de 24-bits informado pela instrução para formar o endereço final ou efetivo para leitura ou escrita de dados. O byte mais significativo sobrescreve o registrador de banco DBR.

Tab. 6
PC + 1 + 2 + 3
Byte 0 Byte 1 Byte 2 Byte 3
opcode LL MM HH
Operação:
eai <- HHMMLL + X
ei <- (24-bits) M[eai]
Sintaxe:
mnemônico $HHMMLL,X
mnemônico nome_label,X
Onde:
M: memória
eai: endereço absoluto indexado
ei: endereço indireto
Ex:
-

No modo Absolute Indirect Long, um endereço indireto de 24-bits é recuperado a partir do endereço absoluto de 16-bits informado pela instrução. O byte mais significativo de endereço indireto sobrescreve o conteúdo do registrador DBR.

Tab. 7
PC + 1 + 2
Byte 0 Byte 1 Byte 2
opcode $LL $HH
Operação:
eai <- M[$HHLL]
ei <- (24-bits) M[ea] ;LLMMHH
Sintaxe:
mnemônico [$HHLL]
Onde:
-
Ex:
-

Nesse modo, um endereço indireto de 24-bits(entre bancos) é recuperado a partir do endereço na Direct Page informado pela instrução. O byte mais significativo sobrescreve o registrador de banco DBR.

Tab. 8
PC + 1
Byte 0 Byte 1
opcode $NN
Operação:
edp <- DBR(00) + DPR + NN
ef <- (24-bits)M[edp] ;LLMMHH
Sintaxe:
mnemônico [$NN]
Onde:
-
Ex:
-

Nesse modo, um endereço indireto de 24-bits(entre bancos) é recuperado a partir do endereço na Direct Page informado pela instrução. O byte mais significativo sobrescreve o registrador de banco DBR.

Tab. 9
PC + 1
Byte 0 Byte 1
opcode $NN
Operação:
edp <- DBR|DPR + NN
ef <- M[edp] ;LLMMHH
Sintaxe:
mnemônico [$NN],Y
Onde:
-
Ex:
-

Os modos de endereçamento legado são os modos herdados dos processadores 65(C)02 e adaptados para serem também utilizados pelo 65816 no modo nativo.

Para o modo Direct Page, seu banco para formação de endereço 24-bits é sempre 00h.

No ME implícito, o mais básico dos endereçamentos, não há operandos para buscar. A própria instrução ou opcode contém as informações dos operandos necessários para execução.

Tab. 10
PC
Byte 0
opcode
Operação:
-
Sintaxe:
mnemônico
Onde:
-
Ex:
-

No modo Relative, um byte imediato e sinalizado é adicionado ao conteúdo do registrador PC possibilitando o desvio de código no intervalo entre -128 e 127 bytes. O registrador DPR é utilizado para formar o endereço em 24-bits.

Tab. 11
PC + 1
Byte 0 Byte 1
opcode e
Operação:
PC <- PC + (+/-)e
Sintaxe:
mnemônico [$NN],Y
Onde:
-
Ex:
-

No modo immediate, uma word imediata faz parte da instrução. Esse valor é obtido e utilizado pela instrução para realizar operações aritméticas, lógicas e outras.

Tab. 12
PC + 1 + 2
Byte 0 Byte 1 Byte 2
opcode $LL $HH
Operação:
A, X ou Y <- #$HHLL
Sintaxe:
MNEMÔNICO #$HHLL
Onde:
-
Ex:
-

No endereçamento absolute, um valor imediato de 16-bits é utilizado como endereço efetivo para leitura ou escrita de dados ou desvio de fluxo. O registrador DBR/PBR é utilizado para formar o endereço de 24-bits.

Tab. 13
PC + 1 + 2
Byte 0 Byte 1 Byte 2
opcode $LL $HH
Operação:
ee <- $DBR/PBR|HHLL
(ee) <-> A
ou 
PC <- ee
Sintaxe:
mnemônico ($HHLL)
Onde:
-
Ex:
-

O modo Absolute Indexed(Absoluto Indexado) utiliza um valor imediato de 16-bits que é adicionado ao registrador de índice X ou Y para formar o endereço efetivo para leitura ou escrita de dados. O registrador DBR é utilizado para formar o endereço de 24-bits.

Tab. 14
PC + 1 + 2
Byte 0 Byte 1 Byte 2
opcode $LL $HH
Operação:
ee <- $DBR + HHLL + X/Y
(ee) <-> A
Sintaxe:
mnemônico $HHLL,X
mnemônico $HHLL,Y
Onde:
-
Ex:
-

O modo absolute indirect, um endereço de memória de 16-bits, imediato ou armazenado em memória, contém um endereço de 16-bits que será utilizado para desvio de fluxo. Para esse modo, o registrador PBR é utilizado para formação do endereço 24-bits.

Tab. 15
PC + 1 + 2
Byte 0 Byte 1 Byte 2
opcode $LL $HH
Operação:
PC <-: PBR|($HHLL)
Sintaxe:
mnemônico ($HHLL)
Onde:
-
Ex:
-

Nesse modo de endereçamento, o registrador DPR é utilizado como endereço base sendo adicionado um valor imediato para formar o endereço final na Direct Page para leitura ou acesso de dados.

Tab. 16
PC + 1
Byte 0 Byte 1
opcode $NN
Operação:
ef <- DPR + $NN
Sintaxe:
mnemônico $NN
Onde:
-
Ex:
-

O modo Direct Page Indexed, o valor do registrador X ou Y é adicionado a um byte imediato informado na instrução para gerar um endereço efetivo, ou final, de 16-bits para leitura ou escrita de dados.

Tab. 17
PC + 1
Byte 0 Byte 1
opcode $NN
Operação:
edp <- $NN + X/Y
ef < DPR + edp
(edp) <-> reg
Sintaxe:
mnemônico $NN,X
mnemônico $NN,X
Onde:
-
Ex:
-

Neste modo de endereçamento que utiliza os conceitos da Direct Page, o DPR é usado como endereço base tendo um byte imediato, informado pela instrução, adicionado ao conteúdo do registrador X para formar um endereço final na Direct Page. Esse endereço contém um endereço indireto que será usado para leitura ou escrita de dados.

Tab. 18
PC + 1
Byte 0 Byte 1
opcode $NN
Operação:
edp <- DPR + $NN + X
ei <- (epd)
Sintaxe:
mnemônico ($NN,X)
Onde:
-
Ex:
-

Neste modo de endereçamento que também utiliza os conceitos da Direct Page, o DPR é usado como endereço base tendo um byte imediato, informado pela instrução, somado ao conteúdo do DPR para formar um endereço na Direct Page que contém um endereço indireto. Esse endereço é somado ao registrador Y para formar o endereço final utilizado na leitura ou escrita.

Tab. 19
PC + 1
Byte 0 Byte 1
opcode $NN
Operação:
edp <- DPR + #$NN
ei <- (edp)
ef <- ei + Y
Sintaxe:
mnemônico ($NN),Y
Onde:
-
Ex:
-

Neste modo de endereçamento, o DPR é usado como endereço base tendo um byte imediato, informado pela instrução, somado ao seu conteúdo do DPR para formar um endereço na Direct Page onde está contido o endereço 16-bits indireto usado para leitura ou escrita de dados. O registrador PBR é utilizado para formação do endereço 24-bits.

Tab. 20
PC + 1
Byte 0 Byte 1
opcode $NN
Operação:
edp <- DPR + #$NN
ei <- (edp)
Sintaxe:
mnemônico ($NN)
Onde:
-
Ex:
-
  1. 26/02/2026 - versão inicial: modos de endereçamento novos e legados