Objetivos
        
    
    
        
            Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.
            
         
     
    
    
        
            
                Os modos de endereçamento representam a forma como os operando ou dados são recuperados pelo processador para processamento 
                de uma instrução. 
            
            
                Ao todo, o 6502 possui ao todo 12 modos de endereçamento que serão vistos nesta parte do tutorial. 
                A compreensão é importante para continuar os estudos do processador. 
            
            Notação utilizada:
            
                
                    
                         | 
                         | 
                    
                
                
                    
                        | #$NN | 
                        Valor hexadecimal imediato | 
                    
                    
                        | #$NNNN; | 
                        Endereço hexadecimal imediato | 
                    
                    
                        | $NNNN | 
                        Endereço hexadecimal | 
                    
                    
                        | $NN ou h | 
                        Valor hexadecimal | 
                    
                    
                        | MNEMÔNICO | 
                        Abreviação do nome de uma instrução | 
                    
                    
                        | ;  | 
                        Comentário | 
                    
                    
                        | | | 
                        Concatenação | 
                    
                    
                        | <- | 
                        Atribuição | 
                    
                    
                        | Byte | 
                        Valor com 8-bits | 
                    
                    
                        | Word | 
                        Valor com 16-bits | 
                    
                
            
         
     
    
    
        
            
                No ME implícito, o mais básico dos endereçamentos, não há operandos para buscar. A própria instrução contém as 
                informações necessárias para execução.
            
            Fórmula:
            -
            Sintaxe:
            MNEMÔNICO
            Ex:
            ;Limpa flag Carry
CLC
         
     
    
        Immediate / Imediato - #$NN
        
     
    
        
            
                No modo imediato, um valor byte ou word faz parte da instrução. Esse valor é obtido e utilizado pela 
                instrução para realizar operações aritméticas , lógicas e outras.
            
            Fórmula:
            -
            Sintaxe:
            MNEMÔNICO #$NN
            Ex:
            ;Ou lógico com A
ORA #$FF
         
     
    
        Relative / Relativo - $NN 
        
     
    
        
            
                No modo relativo, um byte imediato é utilizado para realizar um cálculo e desviar o fluxo de execução de código 
                sendo somado ao conteúdo do PC. Esse byte imediato é sinalizado tendo o intervalo de -128 até 127 permitindo que 
                o desvio do fluxo possa ser feito “para frente” ou “para trás”.  Esse modo é utilizado em instrução de branch(desvio).
            
            Fórmula:
            PC <- PC (-/+)valor_imediato
            Sintaxe:
            MNEMÔNICO $NN
            Ex:
            ;Desvio de fluxo de execução
BCC nome_funcao ; Desvia se Carry = 0
         
     
    
        Absolute / Absoluto - $NNNN
        
     
    
        
            
                No endereçamento absoluto, um valor imediato de 16-bits é utilizado como endereço de origem ou destino onde 
                um valor será lido ou escrito. Utilizando esse modo de endereçamento na página 0 ou 1 não terá o funcionamento circular.
            
            Sintaxe:
            MNEMÔNICO $NNNN
            Ex:
            ;Armazena A em memória
STA $0200
         
     
    
        X-Indexed Absolute / Absoluto indexado X - $NNNN, X
        
     
    
        
            
                O modo Absolute indexed(Absoluto Indexado) utiliza um valor imediato de 16-bits que é
                adicionado ao registrador de índice X para calcular o endereço final para leitura ou escrita de um valor. 
                Utilizando o modo de endereçamento na página 0 ou 1 não terá o funcionamento circular.
            
            Fórmula:
            endereço_final <- #$NNNN + X
            Sintaxe:
            MNEMÔNICO $NNNN, X
            Ex:
            ; X = 4
LDA $0400,X ; $0400 + 4 = $0404
         
     
    
        Y-Indexed Absolute / Absoluto indexado Y- $NNNN, Y
        
     
    
        
            
                O modo Absolute indexed(Absoluto Indexado) utiliza um valor imediato de 16-bits que é 
                adicionado aos registrador Y para calcular o endereço final para leitura ou escrita de um valor. Utilizando o modo de 
                endereçamento na página 0 ou 1 não terá o funcionamento circular.
            
            Fórmula:
            endereço_final <- #$NNNN + Y
            Sintaxe:
            MNEMÔNICO $NNNN, Y
            Ex:
            ; X = 4
LDA $0400,X ; $0400 + 4 = $0404
         
     
    
        Zero Page / Página Zero - $NN
        
     
    
        
            
                Nesse modo de endereçamento um valor pode ser lido ou escrito na página zero da memória do 6502. 
                O MSB, byte mais significativo do endereço é sempre 00h e um valor imediato de 8-bits armazena 
                o LSB, byte menos significativo do endereço final de 16-bits que é utilizando.
            
            Fórmula:
            endereço_final <- $00|$NN
            Sintaxe:
            MNEMÔNICO $NN
            Ex:
             LDA $01 ; 00 + 01 = $0001
         
     
    
        Zero Page, X - Página Zero, X - $NN,X
        
     
    
        
            
                Nesse modo de endereçamento um valor pode ser lido ou escrito na página zero da memória do 6502. 
                O MSB do endereço é sempre 00h, um valor imediato de 8-bits é adicionado ao registrador X 
                gerando assim o endereço de 16-bits que é utilizando.
            
            Fórmula:
            endereço_final <- $00|$NN + X
            
                Ao somar $NN + X, o valor do "vai-um" é sempre desprezado formando um endereço de página zero.
            
            Sintaxe:
            MNEMÔNICO $NN, X
            Ex:
            ; X = 4
;RAM[0004] = 0xff
LDA $00,X ; 00 + 04 = $0004
         
     
    
        Zero Page, Y -  Página Zero, Y - $NN, Y
        
     
    
        
            
                Nesse modo de endereçamento um valor pode ser lido ou escrito na página zero da memória do 6502. 
                O MSB do endereço é sempre 00h, um valor imediato de 8-bits é adicionado ao registrador Y 
                gerando assim o endereço de 16-bits que é utilizando.           
            
            Fórmula:
             endereço_final <- $00|$NN + Y
            
                Ao somar $NN + X, o valor do "vai-um" é sempre desprezado formando um endereço de página zero/Zero Page.
            
            Sintaxe:
            MNEMÔNICO $NN, Y
            Ex:
            ; Y = 4
;RAM[0004] = 0xff
LDA $00,Y ; 00 + 04 = $0004
         
     
    
        Absolute Indirect / Absoluto Indireto - ($NNNN)
        
     
    
        
            
                No modo Obsoluto indireto um valor pode ser lido ou escrito na memória do 6502 de forma indireta. 
                Um valor absoluto imediato armazena um endereço de memória que contém um endereço 16-bits que é 
                utilizado.
            
            Fórmula:
            endereço_final <- ($NNNN)
            Sintaxe:
            MNEMÔNICO ($NNNN)
            Ex:
            
                $0000: contém o valor  $0400(LE)
                $0004: contém o valor $0500(LE)
            
            
            Ao executar:
            JMP ($0000) ; desvio de código
            
            Temos:
            
                O endereço indireto contido nos bytes LSB($04) e MSB($00) contidos $0000 formam um endereço indireto $0004 
                em tem os bytes LSB($05) e o MSB($00) formando o endereço final $0005 que é carregado no registrador PC.
            
            
                BUG: O 6502 possui um bug quando um JMP indireto é executado. Quando o endereço indireto atravessa uma 
                pagina de memória, exemplo 0x01FF, o byte menos significativo do endereço indireto e recuperado de 0x01FF e 
                o byte mais significativo é recuperado de 0x0100 ao invés de 0x0200.
            
         
     
    
        X-Indexed Zero Page Indirect / Indirect X / Indireto X - ($NN,X)
        
     
    
        
            
                Neste modo de endereçamento que utiliza os conceitos da Página Zero, um byte imediato 
                é somado ao conteúdo do registrador X para formar um endereço de 16-bits onde o endereço final, indireto, é obtido.
            
            
                Esse modo de endereçamento possui o mesmo comportamento circular já discutido acima.
            
            Fórmula:
            endereço <- (00$NN + X + 1)(00$NN + X)
endereço_final <- (endereço)
            Onde:
            (): conteúdo de memória
$NN: valor imediato página zero.
            Sintaxe:
            MNEMÔNICO ($NN,X)
            Ex:
            
                X contém $00
                $0000: contém o valor  $0400(LE)
                $0004: contém o valor $0500(LE)
            
            Ao executar:
             ADC ($00,X) ; adição
            Temos:
            
                O bytes contidos em $00 + X + 1 e $00 + X contém $04 e $00 resultando em no endereço $0004. Os bytes $05 e $00 
                contidos $0004 e $0005 formam um endereço indireto $0005 que é local de onde um byte é lido para realização da adição.
            
         
     
    
        Zero Page Indirect Y- Indexed / Indirect Y / Indireto Y - ($NN),Y
        
     
    
        
            
                Neste modo de endereçamento que também utiliza os conceitos da Página Zero, um byte imediato é utilizado para 
                gerar um endereço para a página zero que contém um endereço de 16-bits. Esse endereço contém um endereço indireto
                que é somado ao registrador Y para formar um endereço indireto final que será utilizado.
            
            
                Esse modo de endereçamento possui o mesmo comportamento circular já discutido acima.
            
            Fórmula:
            endereço <- (00$NN + 1)(00$NN)
endereço_indireto <- (endereço)
endereço_final <- endereço_indireto + Y
            Onde:
            (): conteúdo de memória
$NN: valor imediato página zero.
            Sintaxe:
            MNEMÔNICO ($NN),Y
            Ex:
            
                Y contém $04
                $0000: contém o valor  $0400(LE)
                $0004: contém o valor $0500(LE)
            
            Ao executar:
            ADC ($00),Y ; adição
            Temos:
            
                Os bytes contidos em $00 + 1 e $00 forma endereço $0004. Os bytes $05 e $00 contidos $0004 e $0005 formam 
                um endereço indireto $0005 que adicionado ao registrador Y formando o endereço final $0009 que é local de onde 
                um byte é recuperado para realização da adição.
            
         
     
    
        Histórico de atualizações
        
     
    
        
            
                - 11/03/2025 - revisão 4 - Correções em absoluto X/Y, Indireto X/Y;Adição de bug JMP indireto;
 
                - 11/09/2024 - revisão 3 - Correção em descrição de modos indexados e fórmulas
 
                - 30/08/2024 - revisão 2 - Correção em links de objetivos
 
                - 04/10/2023 - revisão 1 - adição de links, correção em layout, navegação e erros gramaticais
 
                - 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.