Você está na página 1de 28

Conjunto de instruções da CPU do MSP430

Circuitos Elétricos II (Universidade Federal de Minas Gerais)

Digitalizar para abrir em Studocu

A Studocu não é patrocinada ou endossada por nenhuma faculdade ou universidade


Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)
Microcontroladores Conjunto de Instruções

1. Conjunto de Instruções
Introdução
A CPU do microcontrolador MSP430 tem um conjunto de instruções reduzido (RISC).
São apenas 27 instruções executadas pelo hardware, contudo o gerador de constante auxilia
ao programa montador (assembly) do MSP emular mais 24 instruções. A seção seguinte
descreve todas as instruções do núcleo do MSP e instruções emuladas de forma detalhada.
 As instruções aparecerão em ordem alfabética.
 O sufixo .W ou a ausência de sufixo no mnemônico da instrução indica operação de 16
bits ou operação de word e o sufixo .B indica operação de 8 bits ou operação de byte.
 As letras src e dst significam operando fonte e operando destino respectivamente.
 O asterisco (*) na frente da instrução indica que a mesma é emulada.
 LSB (Least Significant byte)/MSB (Most Significant byte).
 Nas instruções emuladas, os bits de status são afetados conforme a instrução original.

2. Descrição das instruções

1) *ADC[.W] Adiciona o bit de carry ao destino.


*ADC.B

Sintaxe ADC dst ou ADC.W dst


ADC.B dst

Operação dst + C  dst

Emulação ADDC #0,dst


ADDC.B #0,dst

Descrição O bit de carry (C) é somado ao operando destino. O conteúdo anterior


do operando destino é perdido.

Bits de status N: Setado se o resultado for negativo, resetado se positivo


Z: Setado se resultado for zero, caso contrário resetado
C: Setado se dst foi incrementado de 0FFFF para 0000, resetado
em caso contrário.
Setado se dst foi incrementado de 0FFh para 00, resetado em
caso contrário.
V: Setado se ocorrer um overflow aritmético, resetado em caso
contrário.

Exemplo Na soma de dois operandos de 32 bits (R5R4) + (R7R6) = (R9R8)

R5 R4 0X0001 0X8000
R7 R6 0X0000 0X8000
R9 R8 0X0002 0X0000
O vai um relativo a soma de R4 com R6 será armazenado no carry e
deverá ser somado a parte mais significativa do resultado (R9), neste
caso aplica-se a instrução ADC.
CLR R9 ;zera a parte mais significativa
MOV R4,R8 ;Soma a parte menos significativa
CLRC ;Reseta flag de carry
ADD R6,R8
ADC R9 ;Soma o carry
ADD R5,R9 ;Soma a parte mais significativa
ADD R7,R9
jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 1

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

2) ADD[.W] Adiciona a fonte ao destino.


ADD.B

Sintaxe ADD src, dst


ADD.B src, dst

Operação src + dst  dst

Descrição O operando fonte e adicionado ao operando destino. O operando fonte


não é afetado. O operando destino perde o conteúdo prévio para
armazenar o resultado da operação.

Bits de status N: Setado se resultado negativo, resetado se positivo.


Z: Setado se o resultado for zero, resetado em caso contrário.
C: Setado se houver carry no resultado, resetado em caso
contrário.
V: Setado se ocorrer um overflow aritmético, resetado em caso
contrário.

Exemplo R5 é adicionado de 10.


ADD #10, R5

3) ADDC[.W] Adiciona a fonte e o bit de carry ao destino.


ADDC.B

Sintaxe ADDC src, dst


ADDC.B src,dst

Operação src + dst + C  dst

Descrição O operando fonte e o bit de carry são adicionados ao operando destino.


O operando fonte não é afetado. O operando destino perde o prévio
conteúdo para armazenar o resultado da operação.

Bits de status N: Setado se resultado negativo, resetado se positivo.


Z: Setado se o resultado for zero, resetado em caso contrário.
C: Setado se houver carry no resultado, resetado em caso
contrário.
V: Setado se ocorrer um overflow aritmético, resetado em caso
contrário.

Exemplo No exemplo utilizado na instrução ADC, basta suprimir a instrução


ADC e alterar a ADD pela ADDC.
CLR R9 ;zera a parte mais significativa
MOV R4,R8 ;Soma a parte menos significativa
CLRC ;Reseta flag de carry
ADD R6,R8
ADC R9 ;Soma o carry
ADDC R5,R9 ;Soma a parte mais significativa
ADD R7,R9

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 2

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

4) AND[.W] Fonte AND destino.


AND.B

Sintaxe AND src, dst


AND.B src, dst

Operação src AND dst  dst

Descrição Realiza a operação lógica AND entre os operandos fonte e destino. O


operando fonte não é afetado e o operando destino conterá o resultado
da operação.

Bits de status N: Setado se o MSB do resultado for um, resetado se zero.


Z: Setado se resultado zero. Resetado em caso contrário.
C: Setado se resultado diferente de zero, resetado em caso
contrário. ( NOT ZERO )
V: Resetado.

Exemplo Utilizado para mascaramento.


AND #07FFEh, R5 ;Força os bits 0 e 15 de R5 para nível
;lógico baixo

5) BIC[.W] Zera os bits do destino.


BIC.B

Sintaxe BIC src, dst


BIC.B src,dst

Operação NOT src AND dst  dst

Descrição Realiza a operação lógica AND entre o operando fonte invertido e o


operando destino. O operando fonte não é afetado e o resultado é
armazenado no destino.

Bits de status Não afetados

Exemplo Zera os seis bits mais significativos de R5.


BIC #0FC00h, R5

6) BIS[.W] Seta os bits do destino.


BIS.B

Sintaxe BIS src,dst


BIS.B src,dst

Operação src OR dst  dst

Descrição Realiza a operação lógica OR entre os operandos fonte e destino. O


operando fonte não é afetado e o resultado da operação é armazenado
no operando destino.

Bits de status Não afetados

Exemplo1 Seta os seis bits menos significativos de R5.


BIS #003Fh, R5
jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 3

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

7) BIT[.W] Testa bits no destino.


BIT.B

Sintaxe BIT src, dst

Operação src AND dst

Descrição Realiza a operação lógica AND entre a fonte e o destino. O resultado


afeta somente os bits de status. Os operandos fonte e destino não são
afetados.

Bits de status N: Setado se o MSB do resultado estiver setado, resetado em caso


contrário.
Z: Setado se resultado zero, resetado caso contrário.
C: Setado se resultado não zero, resetado caso contrário
V: Resetado.

Exemplo1 Se o bit 9 de R8 estiver setado, salte para o label VOLTA.


BIT #0200h, R8 ;Bit 9 está setado?
JNZ VOLTA ;sim, vá para o endereço VOLTA
... ;senão, continua.
Exemplo2 Se o bit 3 de R8 estiver setado, salta para o label VAI.
BIT.B #8, R8
JC VAI

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 4

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

8) *BR, Branch Salta para o destino.

Sintaxe BR dst

Operação dst  PC

Emulação MOV dst, PC

Descrição Realiza um salto incondicional numa faixa de endereços de 64k. Todos


os modos de endereçamento podem ser usados. Esta é uma instrução
de 16 bits.

Bits de status Não são afetados.

Exemplo1 BR #EXEC ;salta para o label EXEC


.
.
.
EXEC

Exemplos
BR EXEC ;salta para o endereço contido em EXEC
BR &EXEC ;salta p/ o endereço contido no endereço
;absoluto EXEC
BR R5 ;salta para o endereço contido em R5.
BR @R5 ;salta p/ o endereço contido na word
;apontada por R5.
BR @R5+ ;Idem anterior e incrementa R5 após.
BR X(R5) ;salta p/ o endereço contido no endereço
;apontado por R5 + X.

9) CALL Chamada de sub-rotina.

Sintaxe CALL dst

Operação SP - 2  SP
PC  @SP
dst  PC

Descrição Realiza a chamada de uma sub-rotina numa faixa de endereços de


64k. Todos os modos de endereçamento podem ser usados. O
endereço de retorno é armazenado na pilha. CALL é instrução de 16
bits.

Bits de status Não são afetados.

Exemplo1 CALL #EXEC ;chama o label EXEC


.
.
.
EXEC

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 5

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

Exemplos
CALL EXEC ;chama o endereço contido em
;EXEC.
CALL &EXEC ;chama o endereço contido no
;endereço absoluto EXEC.
CALL R5 ;chama o endereço contido em R5.
CALL @R5 ;chama o endereço contido na word
;apontada por R5.
CALL @R5+ ;idem anterior com pós incremento.
CALL X(R5) ;chama o endereço contido no
;endereço apontado por R5 + X.

10) *CLR[.W] Zera destino.


CLR.B

Sintaxe CLR dst


CLR.B dst

Operação 0  dst

Emulação MOV #0, dst


MOV.B #0, dst

Descrição O operando destino é zerado.

Bits de status Não são afetados.

Exemplos CLR R5 ;zera R5


CLR.B CONT ;o byte CONT é zerado

11) *CLRC Zera flag de carry.

Sintaxe CLRC

Operação 0  C

Emulação BIC #1,SR

Descrição Zera o bit de carry. Esta é uma instrução de 16 bits.

Bits de status N: Não afetado


Z: Não afetado
C: Zerado
V: Não afetado

Exemplo No exemplo utilizado na instrução ADC, limpa-se o carry para evitar


resultado indevido.
CLR R9 ;zera a parte mais significativa
MOV R4,R8 ;Soma a parte menos significativa
CLRC ;Reseta flag de carry
ADD R6,R8
ADDC R5,R9 ;Soma a parte mais significativa
ADD R7,R9

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 6

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

12) *CLRN Zera o flag negativo.

Sintaxe CLRN
Operação 0  N

Emulação BIC #4, SR

Descrição O bit N do registro de status é zerado. Esta é uma instrução de 16


bits.
Bits de status N: Zerado
Z: Não afetado
C: Não afetado
V: Não afetado

Exemplo CLRN

13) *CLRZ Zera o flag zero.

Sintaxe CLRZ

Operação 0  Z

Emulação BIC #2, SR

Descrição O bit de zero do registro de status é zerado. Esta é uma instrução de


16 bits.

Bits de status N: Não afetado


Z: Zerado
C: Não afetado
V: Não afetado

Exemplo CLRZ

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 7

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

14) CMP[.W] Compara fonte e destino.


CMP.B

Sintaxe CMP src, dst


CMP.B src, dst

Operação dst - src

Descrição O operando fonte é subtraído do operando destino. Os dois operandos


não são afetados e o resultado não é armazenado. Somente os bits de
status são afetados.
Isto é feito somando o operando destino com o segundo complemento
(1º complemento + 1) do operando fonte.
Bits de status N: Setado se resultado negativo, resetado se positivo.
Z: Setado se resultado zero, resetado em caso contrário.
C: Setado se não houver ‘vem um’ para o MSB, resetado caso
contrário.
V: Setado se houver um overflow aritmético, resetado caso
contrário.

Exemplo1 Comparando o registro com uma constante.


CMP #3, R6 ;
JHS MAIORIGUAL ; Se o registro R6 for maior ou igual a 3
; desvia para o endereço MAIORIGUAL

Exemplo2 Os registro R5 e R6 são comparados. Se forem iguais, o programa


continua no rótulo IGUAL.
CMP R5, R6 ;R5 = R6 ?
JEQ IGUAL ;se sim, salte para IGUAL.

Exemplo3 Dois blocos de RAM são comparados. Se não são iguais, vai para o
rotulo ERRO.
ORG 0200h
BLOCO1 DB 00,01,02
ORG 0210h
BLOCO2 DB 00,01,02

MOV #3, R5 ;número de palavras a serem comp.


VOLTA CMP.B BLOCO1-1(R5), BLOCO2-1(R5) ;são iguais?
JNZ ERRO ;se não vá para ERRO
DEC R5 ;atualiza o número restante de palavras
;todas as palavras foram comp?
JNZ VOLTA ;se não volte para nova comp.

ERRO

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 8

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

15) *DADC[.W] Soma em BCD o bit de carry ao destino.


*DADC.B

Sintaxe DADC dst


DADC.B dst

Operação dst + C  dst (decimal)

Emulação DADD #0, dst


DADD.B #0, dst

Descrição O bit de carry é somado (BCD ou decimal) com o destino.

Bits de status N: Setado se o MSB é 1.


Z: Setado se o destino for 0, resetado em caso contrário.
C: Setado se o destino incrementa de 9999 para 0000,
Resetado em caso contrário.
Setado se o destino incrementa de 99 para 00, resetado
em caso contrário.
V: Indefinido.

Exemplo Quatro dígitos decimais contidos em R5 são adicionados a 4 dígitos


decimais contidos R8. Em R9 encontra-se os quatro dígitos mais
significativos.
CLRC
CLR R9 ;limpa MSD’s
MOV #9999h,R5 ;define operandos
MOV #1,R8
DADD R5,R8 ;soma os LSD’s
DADC R9 ;soma o carry ao MSD’s.

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 9

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

16) DADD[.W] Soma fonte, o bit de carry e destino (BCD).


DADD.B

Sintaxe DADD src, dst


DADD.B src, dst

Operação src + dst + C  dst (decimal)

Descrição O operando fonte e destino são tratados como números BCD positivos.
O operando fonte e o carry bit são somados BCD ao operando destino.
O operando fonte não é afetado. O conteúdo prévio do destino é
substituído pelo resultado da operação. O resultado é indefinido para
números não BCD.

Bits de status N: Setado se o MSB é 1, resetado se 0.


Z: Setado se resultado zero, resetado em caso contrário.
C: Setado se resultado maior que 9999
Setado se resultado maior que 99
V: Indefinido

Exemplo Um número de oito dígitos BCD contido em R6 e R7 é somado a outro


número de oito dígitos BCD contido em R4 e R5. R7 e R5 contêm os
MSD’s.
CLRC
MOV #09999h,R4
MOV #01,R6
CLR R5
CLR R7
DADD R6, R4 ;adiciona os LSD’s
DADD R7, R5 ;adiciona os MSD’s com carry.

17) *DEC[.W] Decrementa o destino.


*DEC.B

Sintaxe DEC dst


DEC.B dst

Operação dst - 1  dst

Emulação SUB #1, dst


SUB.B #1, dst

Descrição O operando destino é decrementado de 1. O conteúdo original é


perdido.

Bits de status N: Setado se resultado é negativo, resetado caso contrário


Z: Setado se resultado é zero, resetado em caso contrário
C: Resetado se destino vai de 0000h para FFFFh, setado
caso contrário.
V: Setado se ocorrer um overflow aritmético, resetado em
caso contrário.
Seta se o valor inicial do destino for 8000h (word) ou
80h (byte), reseta em caso contrário.

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 10

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

Exemplo Move um bloco de 255 bytes de memória com endereço inicial


BLOCO1, para outro bloco de memória com endereço inicial BLOCO2.
MOV #BLOCO1,R6
MOV #BLOCO2,R5
MOV #255,R4
VOLTA MOV.B @R6+,0(R5)
INC R5
DEC R4
JNZ VOLTA

18) *DECD[.W] Decremento duplo do destino.


*DECD.B

Sintaxe DECD dst


DECD.B dst

Operação dst - 2  dst

Emulação SUB #2, dst


SUB.B #2, dst

Descrição O operando destino é decrementado de 2. O conteúdo original é


perdido.

Bits de status N: Setado se resultado é negativo, resetado se positivo


Z: Setado se resultado é zero, resetado caso contrário
C: Resetado se destino vai de 0000h para FFFFh, setado
em caso contrário.
V: Setado se ocorrer um overflow aritmético, resetado
caso contrário.
Seta se o valor inicial do destino for 8001h ou 8000h
em operações de word, e 80h ou 81h em operações de
byte, reseta caso contrário.

Exemplo DECD R10 ;decrementa R10 de duas unidades.

19) *DINT Desabilita o flag geral de interrupções.

Sintaxe DINT

Operação 0  GIE

Emulação BIC #8, SR

Descrição Todas as interrupções são desabilitadas. Realiza a operação lógica


AND entre a constante 08h e o registro de status. O resultado é
armazenado em SR.

Bits de status Os bits de status não são afetados

Bits de modo Somente o bit GIE é resetado

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 11

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

Exemplo O bit geral de interrupção é zerado para permitir a carga do contador


de 32 bits sem interrupções.
DINT ;desabilita todas as interrupções
NOP
MOV COUNTHI, R5 ;faz a carga do contador
MOV COUNTLO, R6
EINT ;habilita todas as interrupções.

20) *EINT Habilita o flag geral de interrupções.

Sintaxe EINT

Operação 1  GIE

Emulação BIS #8, SR

Descrição Todas as interrupções são habilitadas. Realiza a operação lógica OR


entre a constante 08h e o registro de status. O resultado é
armazenado em SR.

Bits de status Não afetados

Bits de modo Somente o bit GIE é setado

Exemplo Idem anterior.

21) *INC[.W] Incrementa destino.


*INC.B

Sintaxe INC dst


INC.B dst

Operação dst + 1  dst

Emulação ADD #1, dst

Descrição Soma 1 ao operando destino. O conteúdo original é perdido.

Bits de status N: Setado se resultado é negativo, resetado se positivo


Z: Setado se resultado é zero, resetado em caso contrário
C: Setado se destino vai de FFFFh para 0000h (word), ou
FFh para 00h (byte), resetado em caso contrário.
V: Setado se ocorrer um overflow aritmético, resetado
caso contrário. Seta se o valor inicial do destino for
7FFFh (Word), e 7Fh (byte), reseta em caso contrário.

Exemplo O byte STATUS é incrementado. Se ele for igual a 11, vai para o
endereço OVFL.
INC.B STATUS
CMP.B #11, STATUS
JEQ OVFL

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 12

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

22) *INCD[.W] Incremento duplo no destino.


*INCD.B

Sintaxe INCD dst


INCD.B dst

Operação dst + 2  dst

Emulação ADD #2, dst


ADD.B #2, dst

Descrição Soma 2 ao operando destino. O conteúdo original é perdido.

Bits de status N: Setado se resultado é negativo, resetado se positivo.


Z: Setado se resultado é zero, resetado em caso contrário.
C: Setado se destino vai de FFFFh para 0000h (Word), ou
FFh para 00h (byte), resetado em caso contrário.
V: Setado se ocorrer um overflow aritmético, resetado em caso
contrário. Seta se o valor inicial do destino for 7FFEh ou
7FFFh (word), e 7Eh ou 7Fh (byte), reseta em caso contrário.

Exemplo INCD R10 ;incrementa R10 de duas unidades.

23) *INV[.W] Inverte o destino.


*INV.B

Sintaxe INV dst


INV.B dst

Operação NOT dst  dst

Emulação XOR #0FFFFh, dst


XOR.B #0FFh, dst

Descrição Inverte o operando de destino. O conteúdo original é perdido.

Bits de status N: Setado se resultado negativo, resetado se positivo.


Z: Setado se resultado é zero, resetado em caso contrário.
C: Resetado se resultado é zero, setado em caso contrário.
V: Setado se conteúdo inicial do destino é negativo,
Resetado em caso contrário.

Exemplo O código a seguir calcula o C2 de R5.


MOV #00AEh, R5
INV R5
INC R5

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 13

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

24) JC ou JHS Desvia se o flag de carry estiver setado ou se maior ou igual.

Sintaxe JC rótulo ou JHS rótulo

Operação Se C = 1: PC + 2 x offset  PC
Se C = 0: executa a instrução seguinte

Descrição O bit C do registro de status é testado. Se estiver setado, o


número sinalizado de 10 bits (offset) contido nos LSB’s da
instrução, é somado ao PC. Se estiver resetado, a próxima
instrução após o jump será executada. JC é usado para
comparação de números não sinalizados.

Bits de status Não afetados.

Exemplo R5 é comparado com 15. Se for maior ou igual desvia para o endereço
SALTA.
CMP #15, R5
JHS SALTA ;salta se R5 >= 15
... ;continua se R5 < 15

25) JEQ ou JZ Desvia se igual ou se flag de zero ligado.

Sintaxe JEQ rótulo ou JZ rótulo

Operação Se Z = 1: PC + 2 x offset  PC
Se Z = 0: executa a instrução seguinte

Descrição O bit Z do registro de status é testado. Se estiver setado, o


número sinalizado de 10 bits (offset) contido nos LSB’s da
instrução é somado ao PC. Se Z estiver resetado a instrução
seguinte ao JUMP é executada.

Bits de status Não afetados.

Exemplo Salta para o endereço LEO se R6 é igual a R5.


CMP R6, R5
JEQ LEO

26) JGE Desvia se maior ou igual.

Sintaxe JGE rótulo

Operação Se (N XOR V) = 0 então salte p/ o rótulo: PC + 2xoffset  PC


Se (N XOR V) = 1 então execute a próxima instrução.

Descrição Os bits N e V do registro de status são testados. Se os bits N e V são


iguais (set ou reset), os 10 bits sinalizados contidos nos LSB’s da
instrução são somados ao PC e o salto é realizado. Se apenas um dos
bits é setado, a instrução seguinte ao jump é executada. Esta
instrução é usada para comparação de números inteiros sinalizados.

Bits de status Não afetados.


jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 14

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

Exemplo Quando o conteúdo de R6 é maior ou igual ao conteúdo de R7, o


programa continua no rotulo EDE
CMP R7,R6 ;R6 >= R7 ?, números sinalizados.
JGE EDE ;se sim, vá para EDE
..... ;se não, continue.

27) JL Desvia se menor (less).

Sintaxe JL rótulo

Operação Se (N XOR V) = 1 então salte p/ o rótulo: PC + 2xoffset  PC


Se (N XOR V) = 0 então execute a próxima instrução.

Descrição Os bits N e V do registro de status são testados. Se apenas um dos


bits é setado, os 10 bits sinalizados contidos nos LSB’s da instrução
são somados ao PC e o salto é realizado. Se os bits N e V são iguais
(set ou reset), a instrução seguinte ao jump é executada. Esta
instrução é usada para comparação de números inteiros sinalizados.

Bits de status Não afetados.

Exemplo Quando o conteúdo de R6 é menor que o conteúdo R7, o programa


salta para EDE.
CMP R7, R6 ;R6 < R7 ?, números sinalizados.
JL EDE ;se sim, vá p/ EDE
..... ;se não, continue.

28) JMP Desvio incondicional.

Sintaxe JMP rótulo

Operação PC + 2 x offset  PC

Descrição O número sinalizado de 10 bits contidos nos LSB’s da instrução é


somado ao PC.

Bits de status Não afetados.

Sugestão Esta instrução de uma word, substitui a instrução BRANCH na faixa


de –511 a +512 words relativos ao corrente PC.

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 15

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

29) JN Desvia se flag negativo ligado.

Sintaxe JN rótulo

Operação Se N = 1, então salta p/ o rótulo: PC + 2 x offset  PC


Se N = 0, execute a próxima instrução.

Descrição O bit N do registro de status é testado. Se estiver setado, o número


sinalizado de 10 bits contido nos LSB’s da instrução é adicionado ao
PC. Se N estiver resetado, então executa a próxima instrução após o
jump.

Bits de status Não afetados.

Exemplo O resultado de um processamento em R5 é subtraído de COUNT. Se o


resultado for negativo, COUNT é zerado e o programa continua a
execução em outro caminho.
SUB R5, COUNT ;COUNT – R5  COUNT
JN SALTA ;se negativo COUNT=0 em PC=L$1
..... ;se positivo, continue com COUNT>=0
SALTA CLR COUNT
.....

30) JNC, JLO Desvia se flag de carry desligado ou se menor (lower).

Sintaxe JNC rótulo ou JLO rótulo

Operação Se C = 0, então salta p/ rótulo: PC + 2 x offset  PC


Se C = 1, execute a próxima instrução.

Descrição O bit C do registro de status é testado. Se ele estiver resetado, o


número sinalizado de 10 bits contido nos LSB’s da instrução é somado
ao PC. Se C estiver setado então a próxima instrução após o jump é
executada. Esta instrução é usada para comparar números sem sinal
(0 a 65.535).

Bits de status Não afetados

Exemplo O resultado de um processamento em R6 é somado a BUFFER. Se


ocorrer ‘vai um’ uma rotina de erro é usada no endereço ERRO.
ADD R6, BUFFER
JNC CONT ;se não carry vá p/ CONT
ERRO ...... ;inicio da rotina de erro
......
CONT ...... ;Continua com o fluxo normal

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 16

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

31) JNE, JNZ Desvia se não igual ou se flag de zero desligado.

Sintaxe JNE rótulo ou JNZ rótulo

Operação Se Z = 0, então salta p/ o rótulo: PC + 2 x offset  PC


Se Z = 1, então executa a próxima instrução

Descrição O bit Z do registro de status é testado. Se ele estiver resetado, o


número sinalizado de 10 bits contido nos LSB’s da instrução é somado
ao PC. Se Z estiver setado, então executa a próxima instrução após o
jump.

Bits de status Não afetados.

Exemplo Salta para VOLTA se R7 e R8 tiverem conteúdos diferentes.


CMP R7, R8 ;compara R7 com R8
JNE VOLTA ;salta para VOLTA se diferente
..... ;continua se igual.

32) MOV[.W] Move fonte para destino.


MOV.B

Sintaxe MOV src, dst


MOV.B src, dst

Operação src  dst

Descrição O conteúdo do operando fonte é copiado para o operando destino. O


operando fonte não é afetado. O conteúdo prévio de operando destino
é perdido.

Bits de status Não afetado

Exemplo1 Copia a constante 20 para o registro R9


MOV #20, R9
Exemplo2 Copia o registro R7 para o registro R9
MOV R7, R9

Exemplo3 Os conteúdos da tabela endereçada por BLOCO1 são copiados para a


tabela endereçada por BLOCO2. O tamanho das tabelas deve ser de 20
bytes.
MOV #BLOCO1, R10 ;prepara o ponteiro
MOV #BLOCO2, R11 ;prepara o segundo ponteiro
MOV #20, R9 ;prepara o contador
VOLTA MOV @R10+, 0(R11)
ADD #2, R11 ;atualiza ponteiro
DEC R9 ;atualiza contador
JNZ VOLTA ;se contador dif. 0 continue cópia.
.... ;se contador = 0, termina cópia.

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 17

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

33) *NOP Não operação.

Sintaxe NOP

Operação Nenhuma

Emulação MOV #0, #0

Descrição A instrução é usada para eliminação de instrução no programa ou


para definição de tempos de espera.

Bits de status Não afetados


Nota Outras instruções podem emular a não operação usando diferentes
números de ciclos de clock e tamanhos de códigos:
MOV 0(R4), 0(R4) ;6 ciclos, 3 words
MOV @R4, 0(R4) ;5 ciclos, 2 words
BIC #0, EDE(R4) ;4 ciclos, 2 words
JMP $+2 ;2 ciclos, 1 word
BIC #0, R5 ;1 ciclo , 1 word

34) *POP[.W] Retira dois bytes (word) da pilha para o destino.


*POP.B

Sintaxe POP dst ou POP.B dst

Operação @SP  dst


SP + 2  SP

Emulação MOV @SP+, dst


MOV.B@SP+, dst

Descrição O conteúdo da localização de memória apontada pelo Ponteiro de pilha


(SP) é copiado para o destino. Após o ponteiro de pilha é incrementado
por 2.

Bits de status Não afetados.

Exemplo POP R7 ;restaura R7


POP SR ;restaura o registro de status

Nota O ponteiro de pilha é sempre incrementado por 2 independente do


sufixo .B

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 18

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

35) PUSH[.W] Coloca dois bytes (word) na pilha.


PUSH.B

Sintaxe PUSH src ou PUSH.B src

Operação SP – 2  SP
Src  @SP

Descrição O registro SP é decrementado por 2, e então o operando destino é


movido para a RAM word endereçada por SP.

Bits de status Não afetados

Exemplo PUSH SR ;salva SR na pilha


PUSH R7 ;salva R7 na pilha

Nota O ponteiro de pilha é sempre decrementado por 2 independente do


sufixo .B

36) *RET Retorno de sub-rotina

Sintaxe RET

Operação @SP  PC
SP + 2  PC

Emulação MOV @SP+, PC

Descrição O endereço de retorno salvo na pilha pela instrução CALL, é movido


para o PC. O programa continua no endereço seguinte ao da instrução
CALL.

Bits de status Não afetado.

37) RETI Retorno de interrupção.

Sintaxe RETI

Operação @SP  SR
SP + 2  SP
@SP  PC
SP + 2  SP

Descrição O registro de status e o PC são restaurados da pilha. O registro SP é


incrementado por 4. Os conteúdos restaurados da pilha foram salvos
no momento da interrupção.

Bits de status Todos restaurados da pilha

Bits de modo Todos restaurados da pilha

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 19

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

38) *RLA[.W] Rotação aritmética a esquerda.


*RLA.B

Sintaxe RLA dst ou RLA.B dst

Operação C  MSB  MSB – 1 .... LSB +1  LSB  0

Emulação ADD dst, dst ou ADD.B dst, dst

Descrição O operando destino é deslocado a esquerda de uma posição, como


mostrado na Figura B.1. O MSB é deslocado para o carry bit e o LSB é
preenchido com 0. A instrução RLA funciona como uma multiplicação
por 2 sinalizada. Um overflow ocorrerá se o destino >= 4000h ou dst <
C000h antes da operação. O resultado mudará de sinal.

Figura B.1 - RLA


Um overflow ocorrerá se dst >= 40h ou dst < C0h antes da operação. O
resultado mudará de sinal.

Bits de status N: Setado se resultado negativo, resetado se positivo


Z: Setado se resultado zero, resetado em caso contrário
C: Carregado do MSB
V: Setado se ocorrer um overfow, resetado caso contrário

Exemplo Multiplica R7 por 4


RLA R7
RLA R7

Nota O assembler não reconhece a instrução RLA @R5+, que deve ser
substituída por ADD @R5+, -2(R5).

39) *RLC[.W] Rotação circular a esquerda incluindo o flag de carry.


*RLC.B

Sintaxe RLC dst ou RLC.B dst


Operação C  MSB  MSB-1 .... LSB+1  LSB  C
Emulação ADDC dst, dst

Descrição O operando destino é deslocado de uma posição a esquerda como


mostrado na Figura B.2. O bit de carry é deslocado para o LSB e o
MSB é deslocado para o bit de carry.

Figura B.2 - RLC


Bits de status N: Setado se resultado negativo, resetado se positivo
Z: Setado se resultado zero, resetado em caso contrário
C: Carregado do MSB
V: Setado se ocorrer um overfow, resetado caso contrário
Setado se 03FFFh < dstinicial < 0C000h ou se 03Fh < dstinicial <
0C0h, resetado em caso contrário.

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 20

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

Exemplo O bit de entrada P0.1 é colocado no LSB de R5


BIT.B #2, &P0IN ;informação  carry
RLC.B R5 ;carry = P0in.1  LSB R5
;o byte alto de R5 é resetado.

Nota O assembler não reconhece a instrução RLC @R5+, que deve ser
substituída por ADDC @R5+, -2(R5)

40) RRA[.W] Rotação aritmética a direita.


RRA.B

Sintaxe RRA dst ou RRA.B dst

Operação O operando destino é deslocado de uma posição a direita, como


mostrado na Figura B.3. O MSB permanece inalterado e é copiado
para MSB – 1, o LSB + 1 é deslocado para LSB e o LSB é deslocado
para o carry.

Figura B.3 - RRA


Bits de status N: Setado se resultado negativo, resetado se positivo
Z: Setado se resultado zero, resetado em caso contrário
C: Carregado do LSB
V: Resetado

Exemplo O conteúdo de R5 é multiplicado por 0,75.


PUSH R5 ;armazena temporariamente R5 na pilha
RRA R5 ;R5 x 0,5
ADD @SP+, R5 ;R5 x 0,5 + R5 = 1,5 x R5 = R5
RRA R5 ;(1,5 x R5) x 0,5 = 0,75 x R5 = R5

41) RRC[.W] Rotação circular a direita incluindo o flag de carry.


RRC.B

Sintaxe RRC dst ou RRC.B dst

Operação C  MSB  MSB – 1 .... LSB + 1  LSB  C

Descrição O operando destino é deslocado de um bit a direita como mostrado na


Figura B.4. O bit de carry é deslocado para o MSB, e o LSB é
deslocado para o bit de carry.

Figura B.4 - RRC


Bits de status N: Setado se resultado negativo, resetado se positivo
Z: Setado se resultado zero, resetado em caso contrário
C: Carregado do LSB
V: Setado se valor inicial do destino for positivo e valor inicial do
carry for 1, resetado em caso contrário.
jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 21

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

Exemplo R5 é deslocado de 1 bit à direita. O MSB é carregado com 1.


SETC ;prepara o carry para MSB
RRC R5 ;R5 / 2 + 8000h = R5

42) *SBC[.W] Subtrai o ‘borrow’ do destino.


*SBC.B

Sintaxe SBC dst ou SBC.B dst

Operação dst + 0FFFFh + C  dst


dst + 0FFh + C  dst

Emulação SUBC #0, dst


SUBC.B #0, dst

Descrição O bit de carry menos 1 é somado ao destino. O conteúdo prévio do


destino é perdido.

Bits de status N: Setado se resultado negativo, resetado se positivo


Z: Setado se resultado zero, resetado em caso contrário
C: Resetado se dst foi decrementado de 0000h para 0FFFFh
ou de 00h para 0FFh, setado em caso contrário
V: Setado se inicialmente C = 0 e dst = 08000h
Setado se inicialmente C = 0 e dst = 080h

Exemplo Na subtração de dois operandos de 32 bits (R5R4) - (R7R6) = (R5R4)

R5 R4 0X0002 0X0005
R7 R6 0X0001 0X0006
R5 R4 0X0000 0XFFFF
MOV #5,R4 ;Carrega 0X0205 em OP1
MOV #2,R5
MOV #6,R6 ;Carrega 0X0106 em OP2
MOV #1,R7
SUB R6,R4 ;Subtrai LSB
SBC R5 ;Ajusta a existência de borrow
SUB R7,R5 ;Subtrai MSB

Nota O borrow é tratado como um não carry. A ocorrência do borrow pode


ser observada no estado do flag de carry.
Borrow Flag de Carry
Ocorreu 0
Não ocorreu 1

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 22

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

43) *SETC Seta o bit de carry.

Sintaxe SETC

Operação 1  C

Emulação BIS #1, SR

Descrição O bit de carry é setado

Bits de status N: Não afetado


Z: Não afetado
C: Setado
V: Não afetado

44) *SETN Seta o bit negativo

Sintaxe SETN

Operação 1  N

Emulação BIS #4, SR

Descrição O bit N do registro de status é setado

Bits de status N: Setado


Z: Não afetado
C: Não afetado
V: Não afetado

45) *SETZ Seta o bit de zero.

Sintaxe SETZ

Operação 1  Z

Emulação BIS #2, SR


Descrição O bit de zero do registro de status é setado

Bits de status N: Não afetado


Z: Setado
C: Não afetado
V: Não afetado

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 23

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

46) SUB[.W] Subtrai fonte do destino.


SUB.B

Sintaxe SUB src, dst ou SUB.B src, dst

Operação dst + (não src + 1)  dst ou


dst – src  dst

Descrição O operando fonte é subtraído do operando destino. O operando fonte


não é afetado. O conteúdo prévio do operando destino é perdido.
Esta operação é realizada pela adição do complemento a dois do
operando fonte a operando de destino.

Bits de status N: Setado se resultado negativo, resetado se positivo


Z: Setado se resultado zero, resetado em caso contrário
C: Setado se há um carry do MSB do resultado, resetado
caso contrário.
Setado se não borrow, resetado se borrow
V: Setado se ocorrer um overflow aritmético, resetado em
caso contrário.

Exemplo Veja exemplo na instrução SBC

Nota O borrow é tratado como um não carry. A ocorrência do borrow pode


ser observada no estado do flag de carry.
Borrow Flag de Carry
Ocorreu 0
Não ocorreu 1

47) SUBC, SBB[.W] Subtrai a fonte e o borrow (not carry) do destino.


SUBC.B, SBB.B

Sintaxe SUBC src, dst ou SBB src, dst


SUBC.B src, dst ou SBB.B src, dst

Operação dst + não src + C  dst ou


dst – src – 1 + C  dst

Descrição O operando fonte é subtraído do operando destino. Em seguida caso


tenha ocorrido um pedido de empréstimo na operação anterior
(borrow) ele será subtraído do operando de destino. O operando fonte
não é afetado. O conteúdo prévio do operando destino é perdido.
Esta operação é realizada pela adição do complemento a dois do
operando fonte a operando de destino.

Bits de status N: Setado se resultado negativo, resetado se positivo


Z: Setado se resultado zero, resetado em caso contrário
C: Setado se há um carry do MSB do resultado, resetado
caso contrário.
Setado se não borrow, resetado se borrow
V: Setado se ocorrer um overflow aritmético, resetado em
caso contrário.

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 24

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

Exemplo Na subtração de dois operandos de 32 bits (R5R4) - (R7R6) = (R5R4)

R5 R4 0X0002 0X0005
R7 R6 0X0001 0X0006
R5 R4 0X0000 0XFFFF
MOV #5,R4 ;Carrega 0X0205 em OP1
MOV #2,R5
MOV #6,R6 ;Carrega 0X0106 em OP2
MOV #1,R7
SUB R6,R4 ;Subtrai LSB
SUBC R7,R5 ;Subtrai com borrow MSB

Nota O borrow é tratado como um não carry. A ocorrência do borrow pode


ser observada no estado do flag de carry.
Borrow Flag de Carry
Ocorreu 0
Não ocorreu 1

48) SWPB Troca bytes (swap bytes).

Sintaxe SWPB dst

Operação Bits 15 a 8   bits 7 a 0

Descrição Os bytes alto e baixo do operando destino são trocados como mostra a
Figura B.5.

Figura B.5 - SWPB


Bits de status N: Não afetado
Z: Não afetado
C: Não afetado
V: Não afetado

Exemplo MOV #040BFh, R7 ;0100 0000 1011 1111  R7


SWPB R7 ;1011 1111 0100 0000  R7

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 25

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

49) SXT Estende sinal.

Sintaxe SXT dst

Operação Bit 7  bit 8 a 15

Descrição O sinal do byte baixo é estendido para o byte alto como mostrado na
Figura B.6.

Figura B.6 - SXT

Bits de status N: Setado se resultado negativo, resetado se positivo


Z: Setado se resultado zero, resetado em caso contrário
C: Setado se resultado não é zero, resetado caso contrário
V: Resetado

Exemplo MOV.B #85h, R7 ;085h: ...... 1000 0101


SXT R7 ;R7 = 0FF85h:1111 1111 1000 0101
ADD R7, R6 ;soma numero de 16 bits.

50) *TST[.W] Testa destino.


*TST.B

Sintaxe TST dst ou TST.Bdst

Operação dst + 0FFFFh + 1 ou dst + 0FFh + 1

Emulação CMP #0,dst ou CMP.B #0,dst

Descrição O operando destino é comparado com zero. Os bits de status são


atualizados conforme o resultado. O operando destino não é afetado.

Bits de status N: Setado se destino é negativo, resetado se positivo


Z: Setado se destino é zero, resetado em caso contrário
C: Setado
V: Resetado

Exemplo R7 é testado. Se ele é negativo, continua em R7NEG; se é positivo mas


não zero continua em R7POS e se zero continua em R7ZERO.
TST R7 ;testa R7
JN R7NEG ;salta se negativo
JZ R7ZERO ;salta se zero
R7POS ..... ;R7 é positivo mas não zero
R7NEG ..... ;R7 é negativo
R7ZERO ..... ;R7 é zero
jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 26

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)


Microcontroladores Conjunto de Instruções

51) XOR[.W] Ou exclusivo da fonte com o destino.


XOR.B

Sintaxe XOR src,dst ou XOR.B src,dst

Operação src XOR dst  dst

Descrição Realiza a operação lógica ou exclusivo entre o operando fonte e o


operando destino. O operando fonte não é alterado e o resultado é
armazenado no destino.

Bits de status N: Setado se MSB estiver setado, resetado caso contrário


Z: Setado se resultado for zero, caso contrário resetado
C: Setado se resultado ≠ 0, do contrário resetado
V: Setado se ambos os operandos forem negativos.

Exemplo Os bits setados em R6 invertem os correspondentes bits R5.


XOR R6, R5

jkssbh@deii.cefetmg.br marcosp@deii.cefetmg.br 27

Baixado por Eduardo Lôbo Teixeira Filho (eduardo.f@aln.senaicimatec.edu.br)

Você também pode gostar