SENAI – Curso Microcontroladores 8051
INSTRUÇÕES ARITMÉTICAS As instruções aritméticas básicas fornecidas pelo MC8051 são as quatro operações básicas: adição, subtração, multiplicação e divisão que podem ser executados com operandos de 8 bits. No MC8051, estas instruções sempre envolvem o ACC(acumulador) que conterá um dos operandos, sendo o outro operando o conteúdo de um registrador, posição de memória ou, ainda, um dado imediato.
Soma de 8 bits A instrução ADD (do inglês add, somar) realiza a adição entre o conteúdo do acumulador, ACC e o conteúdo da posição da memória de dados interna ou uma constante. O resultado da adição é armazenado no acumulador. O endereçamento do pode ser de todos os modos possíveis (imediato, direto, indireto e registro). Sintaxe: ADD A, FLAGS INSTRUÇÃO
OPERANDO DESTINO
ADD
A,
OPERANDO FONTE
BYTES
MC
CY
AC
OV
Rn
1
1
X
X
X
direto
2
1
@Ri
1
1
#data
2
1
ADD A,Rn Soma o conteúdo de Rn(R0 A R7) com ACC o resultado da soma é gravado no ACC. ADD A,direto Soma o conteúdo da posição de memória com ACC o resultado da soma é gravado no ACC. ADD A,@Ri Soma o conteúdo da posição de memória indicada por Ri(R1 ou R0) com ACC o resultado da soma é gravado no ACC. ADD A,#data Soma o dado ao ACC e o resultado é gravado no ACC.
Unidade 3 – Software do microcontrolador 8051 Instruções aritméticas
1
SENAI – Curso Microcontroladores 8051
Soma de 8 bits com carry A instrução ADDC (em que C é do inglês carry, que significa levar, conduzir), leva em conta o “vai um” na operação de adição. A soma do conteúdo do ACC é realizada com o conteúdo de uma posição de memória de dados interna ou constante e mais a flag de carry. O resultado da soma é armazenado no ACC, e o endereçamento do pode ser de todos os modos (imediato, direto, indireto e registro). Esta instrução permite que adições com mais de 8 bits possam ser implementadas graças ao aproveitamento do flag de carry da operação. Sintaxe: ADDC A, FLAGS
INSTRUÇÃO
OPERANDO DESTINO
ADDC
A,
OPERANDO FONTE
BYTES
MC
CY
AC
OV
Rn
1
1
X
X
X
direto
2
1
@Ri
1
1
#data
2
1
ADDC A,Rn Soma o conteúdo de Rn(R0 a R7) ao ACC e com o flag carry. O resultado é gravado no ACC. ADDC A,direto Soma o conteúdo da posição de memória com o ACC e com o flag carry. O resultado é gravado no ACC. ADDC A,@Ri Soma o conteúdo da posição de memória indicado por Ri (R1 ou R0) com ACC e com o flag carry o resultado é gravado no ACC. ADDC A,#data Soma o dado “#data” e o flag carry ao ACC o resultado é gravado no ACC.
Ajuste decimal A instrução DA (do inglês decimal ajust) realiza o ajuste decimal do acumulador após operações de adição em BCD. Sintaxe: DA A FLAGS
INSTRUÇÃO
OPERANDO
BYTES
MC
CY
AC
OV
DA
A
3.11
4.11
5.1X
6.1X
7.1-
DA A Converte em BCD o conteúdo do ACC.
Unidade 3 – Software do microcontrolador 8051 Instruções aritméticas
2
SENAI – Curso Microcontroladores 8051
OBS: DA A não pode simplesmente converter um número hexadecimal para BCD nem se aplica à subtração ou multiplicação. O ajuste é valido apenas para as somas (ADD e ADDC). Existe uma única instrução.
Subtração de 8 bits com borrow A instrução SUBB (do inglês subtract, que corresponde a subtrair, e borrow, que corresponde a emprestar) realiza a subtração do conteúdo do acumulador, ACC, com um segundo operando e o resultado é gravado no acumulador. Temos 4 instruções de subtração com borrow. A subtração é feita entre o acumulador e o conteúdo de uma posição da memória de dados interna ou com uma constate e o flag de carry (BORROW). O resultado da subtração é gravado no ACC e o endereçamento do pode ser feito de todos os modos (imediato, direto, indireto e registro). O flag de carry (BORROW) é afetado conforme o resultado da operação. Sintaxe: SUBB A, FLAGS
INSTRUÇÃO
OPERANDO DESTINO
SUBB
A,
OPERANDO FONTE
BYTES
MC
CY
AC
OV
Rn
1
1
X
X
X
direto
2
1
@Ri
1
1
#data
2
1
SUBB A,Rn Subtrai do ACC o conteúdo de Rn (R0 a R7) e o “vem um” (borrow). O resultado é gravado no ACC. SUBB A,direto Subtrai do ACC o conteúdo da posição de memória e o “vem um” (borrow). O resultado é gravado no ACC. SUBB A,@Ri Subtrai do ACC o conteúdo da posição de memória indicado por Ri (R0 ou R1) e o “vem um” (se existir). O resultado é gravado no ACC. SUBB A,#data Subtrai do ACC o dado e o “vem um” (borrow), se este existir, e o resultado é gravado no ACC.
Incremento de 8 bits A instrução INC incrementa o operando de uma unidade. O endereçamento pode ser feito de todos os modos (imediato, direto, indireto e registro). Há 4 instruções para incremento. Sintaxe: INC
Unidade 3 – Software do microcontrolador 8051 Instruções aritméticas
3
SENAI – Curso Microcontroladores 8051
FLAGS
INSTRUÇÃO INC
OPERANDO
BYTES
MC
CY
AC
OV
A
1
1
X
X
X
Rn
2
1
direto
1
1
@Ri
2
1
INC A Soma 1 ao ACC. INC Rn Soma 1 ao conteúdo de Rn(R0 a R7) INC direto Soma 1 ao conteúdo da posição de memória. INC @RI Soma 1 ao conteúdo da memória indicado por Ri(R0 ou R1).
Decremento de 8 bits As instruções de decremento se parecem muito com as de incremento. Temos 4 instruções de decremento de 8 bits. A instrução DEC decrementa o operando de uma unidade. O endereçamento pode ser feito de todos os modos possíveis (imediato, direto, indireto e registro). Sintaxe: DEC FLAGS
INSTRUÇÃO DEC
OPERANDO
BYTES
MC
CY
AC
OV
A
1
1
X
X
X
Rn
1
1
direto
2
1
@Ri
1
1
DEC A Subtrai 1 ao ACC. DEC Rn Subtrai 1 ao conteúdo de Rn(R0 a R7). DEC direto Subtrai 1 ao conteúdo da posição de memória. DEC @RI Subtrai 1 ao conteúdo da memória indicado por Ri(R0 ou R1).
Unidade 3 – Software do microcontrolador 8051 Instruções aritméticas
4
SENAI – Curso Microcontroladores 8051
Incremento de 16 bits Para o incremento de 16 bits há apenas uma instrução e é bom lembrar que não temos instrução para decremento de 16 bits. A instrução INC incrementa o operando de uma unidade. O endereçamento somente pode ser feito no modo de registro. Sintaxe: INC FLAGS
INSTRUÇÃO
OPERANDO
BYTES
MC
CY
AC
OV
INC
DPTR
3.11
4.12
5.1-
6.1-
7.1-
INC DPTR Soma 1 ao registrador DPTR.
Multiplicação e divisão de 8 bits Tanto para multiplicação como para a divisão o resultado é conduzido para o mesmo registro. A instrução MUL realiza a multiplicação entre o acumulador ACC e o registrador B. Sintaxe: MUL AB FLAGS
INSTRUÇÃO
OPERANDO
BYTES
MC
CY
AC
OV
MUL
AB
3.11
4.14
5.10
6.1-
7.1X
MUL AB Multiplica o conteúdo do ACC pelo conteúdo do registrador B. O resultado é registrado em B(MSB) e ACC(LSB). A instrução DIV realiza a divisão entre o ACC e o registrador B. Sintaxe: DIV AB FLAGS
INSTRUÇÃO
OPERANDO
BYTES
MC
CY
AC
OV
DIV
AB
3.11
4.14
5.10
6.1X
7.1-
DIV AB Divide o conteúdo do acumulador ACC pelo conteúdo do registrador B. O quociente fica em A e o resto B. Tanto na multiplicação como na divisão as instruções necessitam de um tempo maior para executar as operações.
Unidade 3 – Software do microcontrolador 8051 Instruções aritméticas
5