Microcontroladores Microcontrol adores MSP 430
Conjunto de Instruções
Conjunto de Instruções Introdução
A CPU do microcontrolador MSP430 tem um reduzido conjunto de instruções (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 ( source ) e dst ( destiny ) significam operando fonte e operando destino respectivamente. A cerquilha (#) é utilizada para carregar valores numéricos nos locais indicados. O comercial (&) é um ponteiro para um destino. O asterisco (*) na frente da instrução indica que a mesma é emulada. Nas instruções emuladas, os bits de status são afetados conforme a instrução original.
��������� ��� ���������� 1) *ADC[.W] *ADC.B
Adiciona o bit de carry ao destino adiciona o bit de carry ao destino
Sintaxe
ADC dst ADC.B dst
Operação
dst + C
Emulação
ADDC ADDC.B
Descrição
O bit de carry (C) é somado ao operando destino. O conteúdo anterior do operando destino é perdido.
Bits de status
N: Z: C:
V:
ou ADC.W
dst
dst
#0,dst #0,dst
Setado se o resultado for negativo, resetado se positivo Setado se resultado for zero, caso contrário resetado Setado se dst foi incrementado de 0FFFF para 0000, resetado em caso contrário. Setado se dst foi incrementado de 0FFh para 00, 00, resetado em caso contrário. Setado se ocorrer um overflow aritmético, resetado em caso contrário.
Exemplo 1
Um contador de 16 bits apontado por R13 é adicionado a um contador de 32 bits apontado por R12. ADD @R13, 0(R12) ;Adiciona a word menos significativa ADC 2(R12) ;adiciona o carry a word mais signif.
Exemplo 2
Um contador de 8 bits apontado por R13 e adicionado a um contador de 16 bits apontado por R12. ADD.B @R13, 0(R12) ;adiciona LSD ADC.B 1(R12) ;adiciona o carry ao MSD
CEFET
1
Microcontroladores Microcontrol adores MSP 430
Conjunto de Instruções
2) ADD[.W] ADD.B
Adiciona a fonte ao destino Adiciona a fonte ao destino
Sintaxe
ADD src, dst ADD.B src, dst
Operação
src + 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: Z: C: V:
Exemplo
R5 é incrementado de 10. Ocorrerá o jump se houver um carry ADD #10, R5 JC TONI ;fará o salto se carry ... ;não ocorreu o carry.
3) ADDC[.W] ADDC.B
dst
Setado Setado Setado Setado
se resultado negativo, resetado se positivo. se o resultado for zero, resetado em caso contrário. se houver carry no resultado, resetado em caso contrário. se ocorrer um overflow aritmético, resetado em caso contrário.
Adiciona a fonte e o carry ao destino
Sintaxe
ADDC ADDC.B
Operação
src + dst + C
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: Z: C: V:
Exemplo
Um contador de 32 bits apontado por R13 é adicionado a outro contador de 32 bits, onze palavras acima (20/2 + 2/2). ADD @R13+, 20(R13) ;adiciona os LSD’s sem o carry ADDC @R13+, 20(R13) ;adiciona os MSD’s com o ;carry dos LSD’s.
4) AND[.W] AND.B
Fonte AND destino
Sintaxe
AND src, dst AND.B src, dst
Operação
src AND 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: Z: C: V:
Exemplo
CEFET
src, dst src, dst dst
Setado Setado Setado Setado
se resultado negativo, resetado se positivo. se o resultado for zero, resetado em caso contrário. se houver carry no resultado, resetado em caso contrário. se ocorrer um overflow aritmético, resetado em caso contrário.
dst
Setado se o MSB do resultado for um, resetado se zero. Setado se resultado zero. Resetado em caso contrário. Setado se resultado diferente de zero, resetado em caso contrário. ( NOT ZERO ) Resetado.
O registro R5 é usado para mascarar (#0AA55h) a palavra endereçada por TOM. Se o resultado for zero saltará para o rótulo TONI. MOV #0AA55h, R5 ;carrega a mascara em R5 AND R5, TOM ;Mascara a palavra TOM com R5 JZ TINI ;salta se resultado igual a zero ... ;resultado diferente de zero 2
Microcontroladores MSP 430
Conjunto de Instruções
5) BIC[.W] BIC.B
Zera os bits do destino
Sintaxe
BIC src, dst BIC.B src,dst
Operação
NOT src AND 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 da palavra LEO. BIC #0FC00, LEO Zera os bits 0 e 1 da porta P0. P0OUT .equ 011h ;definição do endereço da porta. P0_0 .equ 01h P0_1 .equ 02h BIC.B #P0_0+P0_1, &P0OUT ;zera os 2 LSB’s de P0
Exemplo
dst
6) BIS[.W] BIS.B
Seta os bits do destino
Sintaxe
BIS BIS.B
Operação
src OR 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 o perando destino.
Bits de status
Não afetados
Exemplo
Seta os BIS Seta os P0OUT P0 P1 BIS.B
Exemplo
src,dst src,dst
dst
seis bits menos significativos da word TOM. #003Fh, TOM 2 LSB’s da porta P0. .equ 011h .equ 01h .equ 02h #P0+P1, &P0OUT
7) BIT[.W] BIT.B
Testa bits no destino
Sintaxe
BIT
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: Z: C: V:
Exemplo
Se o bit 9 de R8 estiver setado, salte para o label TOM. BIT #0200h, R8 ;Bit 9 está setado? JNZ TOM ;sim, vá para TOM ... ;não, continua. Se o bit 3 de R8 estiver setado, salta para o label TOM. BIT.B #8, R8 JC TOM
Exemplo
CEFET
src, dst
Setado se o MSB do resultado estiver setado, resetado em caso contrário. Setado se resultado zero, resetado caso contrário. Setado se resultado não zero, resetado caso contrário Resetado.
3
Microcontroladores MSP 430
Conjunto de Instruções
8) *BR, Branch
Salta para o destino.
Sintaxe
BR
Operação
dst
Emulação
MOV
Descrição
Realiza um alto 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.
Exemplos
BR BR BR BR BR
dst PC
dst, PC
#EXEC ;salta para o label exec. EXEC ;salta para o endereço contido em EXEC &EXEC ;salta p/ o endereço contido no endereço ;absoluto EXEC R5 ;salta para o endereço contido em R5. @R5 ;salta p/ o endereço contido na word ;apontada por R5. @R5+ ;Idem anterior e incrementa R5 após. X(R5) ;salta p/ o endereço contido no endereço ;apontado por R5 + X.
BR BR
9) CALL
Chamada de sub-rotina
Sintaxe
CALL
Operação
SP - 2 PC dst
dst
SP @SP 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.
Exemplos
CALL CALL
#EXEC ;chama o label EXEC EXEC ;chama o endereço contido em ;EXEC. &EXEC ;chama o endereço contido no ;endereço absoluto EXEC. R5 ;chama o endereço contido em R5. @R5 ;chama o endereço contido na word ;apontada por R5. @R5+ ;idem anterior com pós incremento. X(R5) ;chama o endereço contido no ;endereço apontado por R5 + X.
CALL CALL CALL CALL CALL
10) *CLR[.W] CLR.B
Zera destino
Sintaxe
CLR dst CLR.B dst
Operação
0
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 CLR CLR.B
CEFET
dst
TONI R5 TONI
;a palavra TONI é zerada ;zera R5 ;o byte TONI é zerado 4
Microcontroladores MSP 430
Conjunto de Instruções
11) *CLRC
Zera o bit de carry
Sintaxe
CLRC
Operação
0
Emulação
BIC
Descrição
Zera o bit de carry. Esta é uma instrução de 16 bits.
Bits de status
N: Z: C: V:
Exemplo
Um contador decimal de 16 bits apontado por R13 é somado a um contador de 32 bits apontado por R12. CLRC DADD @R13, 0(R12) ;adiciona a parte baixa. DADC 2(R12) ;adiciona o carry a parte alta.
12) *CLRN
Zera o bit negativo
Sintaxe
CLRN
Operação
0
Emulação
BIC
Descrição
O bit N do registro de status é zerado. Esta é uma instrução de 16 bits.
Bits de status
N: Z: C: V:
Exemplo
CLRN
13) *CLRZ
Zera o bit de status Z
Sintaxe
CLRZ
Operação
0
Emulação
BIC
Descrição
O bit de zero do registro de status é zerado. Esta é uma instrução de 16 bits.
Bits de status
N: Z: C: V:
Exemplo
CLRZ
CEFET
C #1,SR
Não afetado Não afetado Zerado Não afetado
N #4, SR
Zerado Não afetado Não afetado Não afetado
Z #2, SR
Não afetado Zerado Não afetado Não afetado
5
Microcontroladores MSP 430
Conjunto de Instruções
14) CMP[.W] CMP.B
Compara fonte e destino
Sintaxe
CMP src, dst CMP.B src, dst
Operação
dst - src
Descrição
O operando fonte é subtraído do operando destino. Isto é feito somando o operando destino com o segundo complemento (1º complemento + 1) do operando fonte. Os dois operandos não são afetados e o resultado não é armazenado. Somente os bits de status são afetados.
Bits de status
N: Z: C: V:
Exemplos
L$1
Setado se resultado negativo, resetado se positivo. Setado se resultado zero, resetado em caso contrário. Setado se houver ‘vai um’ do MSB, resetado caso Setado se houver um overflow aritmético, resetado caso contrário.
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. Dois blocos de RAM são comparados. Se não são iguais, vai para o rotulo ERRO. MOV #NUM, R5 ;número de palavras a serem comp. CMP &BLOCO1, BLOCO2 ;são iguais? JNZ ERRO ;se não vá para ERRO DEC R5 ;todas as palavras foram comp. JNZ L$1 ;se não volte para nova comp.
15) *DADC[.W] *DADC.B
Soma BCD o carry ao destino
Sintaxe
DADC dst DADC.B dst
Operação
dst + C
Emulação
DADD DADD.B
Descrição
O bit de carry é somado (BCD ou decimal) com o destino.
Bits de status
N: Z: C:
V: Exemplos
contrário.
dst (decimal) #0, dst #0, dst
Setado se o MSB é 1. Setado se o destino for 0, resetado em caso contrário. 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. Indefinido.
Quatro dígitos decimais contidos em R5 são adicionados a oito dígitos decimais apontados por R8. CLRC DADD R5, 0(R8) ;soma os LSD’s DADC 2(R8) ;soma o carry ao MSD. Dois dígitos decimais contidos em R5 são somados a quatro dígitos decimais apontados por R8. CLRC DADD.B R5, 0(R8) DADC.B 1(R8)
CEFET
6
Microcontroladores MSP 430
Conjunto de Instruções
16) DADD[.W] DADD.B
Soma fonte, carry e destino (BCD)
Sintaxe
DADD DADD.B
Operação
src + dst + C
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 é perdido, para o mesmo conter o resultado da operação. O resultado é indefinido para números não BCD.
Bits de status
N: Z: C: V:
src, dst src, dst
dst (decimal)
Setado se o MSB é 1, resetado se 0. Setado se resultado zero, resetado em caso contrário. Setado se resultado maior que 9999 Setado se resultado maior que 99 Indefinido
Exemplos
Um número de oito dígitos BCD contido em R5 e R6 é somado a outro numero de oito dígitos BCD contido em R3 e R4. R6 e R4 contêm os MSD’s. CLRC DADD R5, R3 ;adiciona os LSD’s DADD R6, R4 ;adiciona os MSD’s com carry. JC OVERFLOW ;se carry, vá para rotina de erro. Incrementa de 1 um contador de dois dígitos decimal (CNT). CLRC DADD.B #1, CNT
17) *DEC[.W] *DEC.B
Decrementa o destino
Sintaxe
DEC dst DEC.B dst
Operação
dst - 1
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: Z: C: V:
Exemplo
L$1
CEFET
dst
Setado se resultado é negativo, resetado caso contrário Setado se resultado é zero, resetado em caso contrário Resetado se destino vai de 0000h para FFFFh, setado caso contrário. 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.
Move um bloco de 255 bytes de memória com endereço inicial EDE, para outro bloco de memória com endereço inicial TONI. MOV #EDE, R6 MOV #TONI, R5 MOV #255, R4 MOV.B @R6+, 0(R5) INC R5 DEC R4 JNZ L$1
7
Microcontroladores MSP 430
Conjunto de Instruções
18) *DECD[.W] *DECD.B
Decremento duplo do destino
Sintaxe
DECD DECD.B
Operação
dst - 2
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: Z: C:
dst dst
dst
Setado se resultado é negativo, resetado se positivo Setado se resultado é zero, resetado caso contrário Resetado se destino vai de 0000h para FFFFh, setado em caso contrário. 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.
V:
Exemplo
DECD
19) *DINT
Desabilita (geral) interrupções.
Sintaxe
DINT
Operação
0
Emulação
BIC
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
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 (geral) interrupções
Sintaxe
EINT
Operação
1
Emulação
BIS
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.
CEFET
R10
;decrementa R10 de duas unidades.
GIE #8, SR
GIE #8, SR
8
Microcontroladores MSP 430
Conjunto de Instruções
21) *INC[.W] *INC.B
Incrementa destino
Sintaxe
INC INC.B
Operação
dst + 1
Emulação
ADD
Descrição
Soma 1 ao operando destino. O conteúdo original é perdido.
Bits de status
N: Z: C: V:
dst dst
dst #1, dst
Setado se resultado é negativo, resetado se positivo Setado se resultado é zero, resetado em caso contrário Setado se destino vai de FFFFh para 0000h (word), ou FFh para 00h (byte), resetado em caso contrário. 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. Quando ele é igual a 11, vai para OVFL. INC.B STATUS CMP.B #11, STATUS JEQ OVFL
22) *INCD[.W] *INCD.B
Incremento duplo no destino
Sintaxe
INCD dst INCD.B dst
Operação
dst + 2
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: Z: C: V:
Exemplos
dst
Setado se resultado é negativo, resetado se positivo Setado se resultado é zero, resetado em caso contrário Setado se destino vai de FFFFh para 0000h (Word), ou FFh para 00h (byte), resetado em caso contrário. 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.
O dado no topo da pilha é removido sem usar registro. PUSH R5 INCD SP ;não usar INCD.B, pois SP é word alinhado O byte no topo da pilha é incrementado por 2. INCD.B 0(SP)
CEFET
9
Microcontroladores MSP 430
Conjunto de Instruções
23) *INV[.W] *INV.B
Inverte o destino
Sintaxe
INV INV.B
Operação
NOT 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
Exemplo
N:
Setado Z: C: V:
dst dst
dst
se resultado negativo, resetado se positivo Setado se resultado é zero, resetado em caso contrário Resetado se resultado é zero, setado em caso contrário Setado se conteúdo inicial do destino é negativo, Resetado em caso contrário.
Encontra o segundo complemento de R5. MOV #00Aeh, R5 INV R5 INC R5
24) JC ou JHS Jump se o bit carry estiver setado ou Jump 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 Exemplo
Não afetados. R5 é comparado com 15. Se for maior ou igual salta. CMP #15, R5 JHS SALTA ;salta se R5 >= 15 ... ;continua se R5 < 15
25) JEQ ou JZ - Jump se igual ou jump se zero.
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 Exemplo
CEFET
Não afetados. Salta para o endereço LEO se R6 é igual ao conteúdo da tabela. CMP R6, tabela(R5) JEQ LEO
10
Microcontroladores MSP 430
Conjunto de Instruções
26) JGE
Jump maior ou igual
Sintaxe
JGE rótulo
Operação
Se (N XOR V) = 0 então salte p/ o rótulo:PC + 2xoffset 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.
Exemplo
Quando o conteúdo de R6 é maior ou igual ao conteúdo da memória apontada por 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
Jump se menor (less)
Sintaxe
JL rótulo
Operação
Se (N XOR V) = 1 então salte p/ o rótulo:PC + 2xoffset 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 da memória apontada por 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
Jump incondicional
Sintaxe
JMP rótulo
Operação
PC + 2 x offset
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.
CEFET
PC
PC
PC
11
Microcontroladores MSP 430
Conjunto de Instruções
29) JN
Jump se negativo
Sintaxe
JN rótulo
Operação
Se N = 1, então salta p/ o rótulo: PC + 2 x offset 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
L$1
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 L$1 ;se negativo COUNT=0 em PC=L$1 ..... ;se positivo, continue com COUNT>=0 CLR COUNT
30) JNC, JLO
Jump se não carry ou jump 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 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
CONT
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 ...... ;inicio da rotina de erro ...... ...... ;Continua com o fluxo normal
31) JNE, JNZ
Jump se não igual ou jump se não zero
Sintaxe
JNE rótulo ou JNZ rótulo
Operação
Se Z = 0, então salta p/ o rótulo: PC + 2 x offset 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 TONI se R7 e R8 tiverem conteúdos diferentes. CMP R7, R8 ;compara R7 com R8 JNE TONI ;salta para TONI se diferente ..... ;continua se igual.
ERRO
CEFET
PC
PC
PC
12
Microcontroladores MSP 430
Conjunto de Instruções
32) MOV[.W] MOV.B
Move fonte para destino
Sintaxe
MOV src, dst MOV.B src, dst
Operação
src
Descrição
O conteúdo do operando fonte é movido 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
Exemplo
Os conteúdos da tabela endereçada por EDE são copiados para a tabela endereçada por TOM. O tamanho das tabelas deve ser de 20h localizações. MOV #EDE, R10 ;prepara o ponteiro MOV #TOM, R11 ;prepara o segundo ponteiro MOV #20, R9 ;prepara o contador MOV @R10+, 0(R11) ADD #2, R11 ;atualiza ponteiro DEC R9 ;atualiza contador JNZ refaz ;se contador dif. 0 continue cópia. .... ;se contador = 0, termina cópia.
33) *NOP
Não operação
Sintaxe
NOP
Operação
Nenhuma
Emulação
MOV
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 Nota
Não afetados 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] *POP.B
Retira word da pilha para o destino
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 Pinteiro de pilha (SP) é movida para o destino. Após o ponteiro de pilha é incrementado por 2.
Bits de status
Não afetados.
Exemplo
POP POP
Nota
O ponteiro de pilha é sempre incrementado por 2 independente do sufixo .B
CEFET
dst
#0, #0
R7 SR
;restaura R7 ;restaura o registro de status
13
Microcontroladores MSP 430
Conjunto de Instruções
35) PUSH[.W] PUSH.B
Coloca a word na pilha
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 PUSH
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
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
SR R7
;salva SR na pilha ;salva R7 na pilha
@SP+, PC
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
CEFET
14
Microcontroladores MSP 430
Conjunto de Instruções
38) *RLA[.W] *RLA.B
Rotação aritmética a esquerda
Sintaxe
RLA dst ou RLA.B dst
Operação
C
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.
MSB
MSB – 1 .... LSB +1 LSB
0
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: Z: C: V:
Setado se resultado negativo, resetado se positivo Setado se resultado zero, resetado em caso contrário Carregado do MSB 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] *RLC.B
Rotação circular a esquerda através do carry
Sintaxe
RLC dst ou RLC.B dst
Operação
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.
MSB
MSB-1 .... LSB+1
LSB
C
Figura B.2 - RLC Bits de status
N: Z: C: V:
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)
CEFET
Setado se resultado negativo, resetado se positivo Setado se resultado zero, resetado em caso contrário Carregado do MSB Setado se ocorrer um overfow, resetado caso contrário Setado se 03FFFh < dst inicial < 0C000h ou se 03Fh < dst inicial < 0C0h, resetado em caso contrário.
15
Microcontroladores MSP 430
Conjunto de Instruções
40) RRA[.W] RRA.B
Rotação aritmética a direita
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: Z: C: V:
Setado se resultado negativo, resetado se positivo Setado se resultado zero, resetado em caso contrário Carregado do LSB 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] RRC.B
Rotação circular a direita através do carry
Sintaxe
RRC dst ou RRC.B
Operação
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.
Bits de status
N: Z: C: V:
Exemplo
R5 é deslocado de 1 bit à direita. O MSB é carregado com 1. SETC ;prepara o carry para MSB RRC R5 ;R5 / 2 + 8000h = R5
MSB
dst
MSB – 1 .... LSB + 1
LSB
C
Figura B.4 - RRC
CEFET
Setado se resultado negativo, resetado se positivo Setado se resultado zero, resetado em caso contrário Carregado do LSB Setado se valor inicial do destino for positivo e valor inicial do carry for 1, resetado em caso contrário.
16
Microcontroladores MSP 430 42) *SBC[.W] *SBC.B
Conjunto de Instruções
Subtrai o ‘borrow’ do destino
Sintaxe
SBC dst ou SBC.B
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: Z: C:
Exemplo
dst
Setado se resultado negativo, resetado se positivo Setado se resultado zero, resetado em caso contrário Resetado se dst foi decrementado de 0000h p/ 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 Um contador de 16 bits apontado por R13 é subtraído de outro contador de 32 bits apontado por R12. SUB @R13, 0(R12) ;subtrai os LSD’s SBC 2(R12) ;subtrai o carry do MSD
Nota
O borrow é tratado como um não carry: Borrow Sim Não
43) *SETC
Seta o bit de carry
Sintaxe
SETC
Operação
1
Emulação
BIS
Descrição
O bit de carry é setado
Bits de status
N: Z: C: V:
Exemplo
Emula uma subtração decimal. Subtrai R5 de R6 decimalmente. Suponha que R5 = 3987 e R6 = 4137. ADD #6666h, R5;Move o conteúdo de R5 de 0-9 p/ 6-F ;R5 = 3987 + 6666 = 9FEDh INV R5 ;R5 = não R5 = 6012h SETC ;prepara o carry = 1 DADD R5, R6 ;emula a subtração pela soma de: ;(10000 – R5 – 1) ; R6 = R6 + R5 + 1 ;R6=4137 + 6012 + 1=10150 = 0150
44) *SETN
Seta o bit negativo
Sintaxe
SETN
Operação
1
Emulação
BIS #4, SR
Descrição
O bit N do registro de status é setado
Bits de status
N: Z: C: V:
CEFET
Carry bit 0 1
C #1, SR
Não afetado Não afetado Setado Não afetado
N
Setado Não afetado Não afetado Não afetado 17
Microcontroladores MSP 430
Conjunto de Instruções
45) *SETZ
Seta o bit de zero
Sintaxe
SETZ
Operação
1
Emulação Descrição
BIS #2, SR O bit de zero do registro de status é setado
Bits de status
N: Z: C: V:
46) SUB[.W] SUB.B
Subtrai fonte do destino
Sintaxe
SUB src, dst ou SUB.B src, dst
Operação
dst + (não src + 1) dst – src dst
Descrição
O operando fonte é subtraído do operando destino, pela adição do primeiro complemento do operando fonte com a constante 1. O operando fonte não é afetado. O conteúdo prévio do operando destino é perdido.
Bits de status
N: Z: C: V:
Z
Não afetado Setado Não afetado Não afetado
dst ou
Setado se resultado negativo, resetado se positivo Setado se resultado zero, resetado em caso contrário Setado se há um carry do MSB do resultado, resetado caso contrário. Setado se não borrow, resetado se borrow 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:
47) SUBC, SBB[.W] SUBC.B, SBB.B
Subtrai a fonte e o borrow (not carry) do destino
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 – src – 1 + C
Descrição
O operando fonte é subtraído do operando destino, pela adição do primeiro complemento do operando fonte e o bit de carry. O operando fonte não é afetado. O prévio conteúdo do operando destino é perdido.
Bits de status
N: Z: C: V:
Borrow Sim Não
Carry 0 1
dst ou dst
Setado se resultado negativo, resetado se positivo Setado se resultado zero, resetado em caso contrário Setado se há um carry do MSB do resultado, resetado caso contrário. Setado se não borrow, resetado se borrow Setado se ocorrer um overflow aritmético, resetado em caso contrário.
Exemplo
Um numero de 16 bits apontado por R13 é subtraído de outro numero de 16 bits em R10 e R11 (MSD) SUB.B @R13+, R10 ;subtrai os LSD’s sem o carry SUBC.B @R13, R11 ;subtrai os MSD’s com carry
Nota
O borrow é tratado como um não carry:
CEFET
Borrow Sim Não
Carry 0 1 18
Microcontroladores MSP 430
Conjunto de Instruções
48) SWPB
Troca bytes (swap bytes)
Sintaxe
SWPB
Operação
Bits 15 a 8
Descrição
Os bytes alto e baixo do operando destino são trocados como mostra a Figura B.5.
Bits de status
N: Z: C: V:
Exemplo
MOV #040BFh, R7 SWPB R7
dst
bits 7 a 0
Figura B.5 - SWPB Não afetado Não afetado Não afetado Não afetado ;0100 0000 1011 1111 ;1011 1111 0100 0000
R7 R7
49) SXT
Estende sinal
Sintaxe
SXT dst
Operação
Bit 7
Descrição
O sinal do byte baixo é estendido para o byte alto como mostrado na Figura B.6.
bit 8 a 15
Figura B.6 - SXT Bits de status
N: Z: C: V:
Exemplo
MOV.B &TCDAT, R7 ;TCDAT = 085h: ...... 1000 0101 SXT R7 ;R7 = 0FF85h:1111 1111 1000 0101 ADD R7, R6 ;soma numero de 16 bits.
CEFET
Setado se resultado negativo, resetado se positivo Setado se resultado zero, resetado em caso contrário Setado se resultado não é zero, resetado caso contrário Resetado
19
Microcontroladores MSP 430
Conjunto de Instruções
50) *TST[.W] *TST.B
Testa destino
Sintaxe
TST dst ou TST.B dst
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: Z: C: V:
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 ..... ;R7 é positivo mas não zero ..... ;R7 é negativo ..... ;R7 é zero
R7POS R7NEG R7ZERO
Setado se destino é negativo, resetado se positivo Setado se destino é zero, resetado em caso contrário Setado Resetado
51) XOR[.W] XOR.B
Ou exclusivo da fonte com o destino
Sintaxe
XOR src,dst ou XOR.B src,dst
Operação
src XOR 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: Z: C: V:
Exemplo
Os bits setados em R6 invertem os correspondentes bits da word TONI. XOR R6, TONI
CEFET
Setado Setado Setado Setado
dst
se MSB estiver setado, resetado caso contrário se resultado for zero, caso contrário resetado se resultado ≠ 0, do contrário resetado se ambos os operandos forem negativos.
20