O registo a operar é codificado no código de operação da instrução. Os registos para os quais este método de codificação é feito são os seguintes: R0 a R7, A, PSW, SP e PC.
Exemplos:
MOV R1,#25 ; coloca o valor 25 no registo R1
INC R0 ; adiciona 1 ao conteúdo do registo R0
MOV R1,#25 ; coloca o valor 25 no registo R1
INC R0 ; adiciona 1 ao conteúdo do registo R0
Directo
Este modo de endereçamento utiliza-se para aceder à memória de dados interna.
A codificação da instrução é feita com um byte para o código de operação da instrução e um byte adicional para especificar o endereço a aceder.
Como a especificação do endereço se faz num único byte a gama de endereços possível é de 0 a 255.
A gama de endereçamento referida permite aceder a toda a área de memória de dados interna podendo especificar-se o acesso a um registo ou a uma variável.
Exemplos de operação sobre variáveis em RAM interna:
MOV 23H,A ; copia o conteúdo do acumulador para a posição de memória cujo endereço é 23H.
ADD A,40H ; soma o conteúdo da posição de memória 40H ao acumulador.
Exemplos de operação sobre SFRs:
MOV B0H,A ; coloca o conteúdo do acumulador à saída do porto P3.
Imediato
O modo de endereçamento imediato permite especificar um valor numérico constante.
As constantes a especificar podem ter 8 bits ou 16 bits. Os valores de 16 bits só podem ser usados em conjunto com o registo DPTR.
Em assembly os valores numéricos imediatos são precedidos do caracter ‘#’.
Exemplos:
MOV A,#22 ; carrega o acumulador com o valor 22.
ADD A,#30 ; soma 30 ao acumulador
MOV DPTR,#20F0H ; carrega o valor hexadecimal 20F0 no registo DPTR.
O modo de endereçamento imediato permite especificar um valor numérico constante.
As constantes a especificar podem ter 8 bits ou 16 bits. Os valores de 16 bits só podem ser usados em conjunto com o registo DPTR.
Em assembly os valores numéricos imediatos são precedidos do caracter ‘#’.
Exemplos:
MOV A,#22 ; carrega o acumulador com o valor 22.
ADD A,#30 ; soma 30 ao acumulador
MOV DPTR,#20F0H ; carrega o valor hexadecimal 20F0 no registo DPTR.
Indirecto
No modo de endereçamento indirecto a instrução especifica um registo que contém o endereço do operando.
Tanto a memória de dados interna como a externa podem ser endereçadas deste modo. Este modo de endereçamento é útil no acesso a arrays.Só os registos R0, R1 e DPTR podem ser utilizados como ponteiros de dados. R0 e R1 são ponteiros de 8 bits e DPTR é um ponteiro de 16 bits. O registo a utilizar é precedido do caracter ‘@’.
Exemplos:
ADD A,@R1 ; adiciona o conteúdo da posição de memória apontada por R1 ao acumulador.
MOV @R0, A ; guarda o conteúdo do acumulador na posição de memória apontada por R0.
MOVX A,@DPTR ; copia o conteúdo da posição de memória externa apontada por DPTR para o acumulador.
Indexado
Destina-se ao acesso a tabelas e a instruções de salto. No acesso a tabelas um registo de 16 bits (DPTR ou PC) contém o endereço base da tabela e o acumulador é carregado com o número de entrada na tabela.
O endereço da entrada na tabela é calculado somando ao valor do registo o valor do acumulador. Na instrução JMP o endereço do destino é calculado como a soma do ponteiro base (DPTR ou PC) e do valor do acumulador.
Exemplos:
JMP @A+DPTR ; coloca no registo PC o valor igual à soma do conteúdodos registos DPTR e acumulador e continua a execuçãodo programa a partir desse endereço.
MOVC A,@A+DPTR ; carrega o conteúdo da posição de memória apontada pela soma dos registos acumulador e DPTR no acumulador.
MOVC A,@A+PC ; carrega o acumulador com o conteúdo da posição de memória cujo endereço é a soma dos registos acumulador e PC.