Objetivos
Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.
Modos de Endereçamento
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
- HH: byte mais alto de endereço
- MM: byte médio do endereço
- LL: byte mais baixo de endereço
- #$NN: valor imediato 8-bits
- #$HHLL: valor imediato 16-bits
- PC: Contador de programa
- ef: Endereço final
- ei: Endereço indireto
- H,h,0x: valor hexadecimal
- /: ou
- |: concatenação
Com o 65816, foram adicionados 9 novos modos de endereçamento parar suprir as necessidades
encontrados em seus antecessores:
Novos MEs:
- Program Counter Relative Long
- Stack Relative
- Stack Relative Indirect Indexed with Y
- Block Move
- Absolute Long
- Absolute Long Indexed with X
- Absolute Indirect Long
- Direct Page Indirect Long
- 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.
Program Counter Relative Long - $HHLL
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:
-
Stack Relative Indirect Indexed with Y - ($NN,S),Y
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:
-
Absolute Long Indexed with X - $HHMMLL, X
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:
-
Direct Page Indirect Long - [$NN]
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:
-
Direct Page Indirect Long - [$NN]
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.
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:
-
Immediate/Imediato - #$HHLL
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:
-
Absolute Indexed - $HHLL, X/Y
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:
-
Absolute Indirect - ($HHLL)
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:
-
Direct Page Indexed X/Y - $NN,X/Y
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:
-
Direct Page Indexed Indirect X - ($NN,X)
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:
-
Direct Page Indirect Indexed Y - ($NN),Y
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:
-
Direct Page Indirect - ($NN)
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:
-
Histórico de atualizações
- 26/02/2026 - versão inicial: modos de endereçamento novos e legados
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.