Conjunto de instruções MSP430.pdf

20

Click here to load reader

Transcript of Conjunto de instruções MSP430.pdf

Page 1: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 1

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.

Descrição das instruções 1) *ADC[.W] Adiciona o bit de carry ao destino *ADC.B adiciona o bit de carry ao destino 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 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

Page 2: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 2

2) ADD[.W] Adiciona a fonte ao destino ADD.B Adiciona a fonte ao destino 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 é 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] Adiciona a fonte e o 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 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] 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 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

Page 3: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 3

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 da palavra LEO. BIC #0FC00, LEO Exemplo 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 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 Exemplo Seta os seis bits menos significativos da word TOM. BIS #003Fh, TOM Exemplo Seta os 2 LSB’s da porta P0. P0OUT .equ 011h P0 .equ 01h P1 .equ 02h BIS.B #P0+P1, &P0OUT 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. 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. Exemplo Se o bit 3 de R8 estiver setado, salta para o label TOM. BIT.B #8, R8 JC TOM

Page 4: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 4

8) *BR, Branch Salta para o destino. Sintaxe BR dst Operação dst � PC Emulação MOV dst, PC 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 #EXEC ;salta para o label exec. 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. Exemplos CALL #EXEC ;chama o label EXEC 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 TONI ;a palavra TONI é zerada CLR R5 ;zera R5 CLR.B TONI ;o byte TONI é zerado

Page 5: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 5

11) *CLRC Zera o bit 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 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 � 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 bit de status Z 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

Page 6: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 6

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. 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: Setado se resultado negativo, resetado se positivo. Z: Setado se resultado zero, resetado em caso contrário. C: Setado se houver ‘vai um’ do MSB, resetado caso contrário.

V: Setado se houver um overflow aritmético, resetado caso contrário.

Exemplos 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.

L$1 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] Soma BCD o 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. Exemplos 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)

Page 7: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 7

16) DADD[.W] Soma fonte, 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 é perdido, para o mesmo conter o 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 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] 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. Exemplo 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 L$1 MOV.B @R6+, 0(R5) INC R5 DEC R4 JNZ L$1

Page 8: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 8

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 (geral) 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 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 � 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.

Page 9: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 9

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. Quando ele é igual a 11, vai para OVFL. INC.B STATUS CMP.B #11, STATUS JEQ OVFL 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.

Exemplos 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)

Page 10: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 10

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 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 Não afetados. Exemplo 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 Não afetados. Exemplo Salta para o endereço LEO se R6 é igual ao conteúdo da tabela. CMP R6, tabela(R5) JEQ LEO

Page 11: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 11

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 � 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. 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 � 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 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 � 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.

Page 12: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 12

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 � 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 L$1 ;se negativo COUNT=0 em PC=L$1 ..... ;se positivo, continue com COUNT>=0 L$1 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 � 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 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 � 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 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.

Page 13: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 13

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 é 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 #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 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 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 R7 ;restaura R7 POP SR ;restaura o registro de status Nota O ponteiro de pilha é sempre incrementado por 2 independente do sufixo .B

Page 14: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 14

35) PUSH[.W] Coloca a 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

Page 15: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 15

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 através do 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.

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)

Page 16: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 16

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 através do 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.

Exemplo R5 é deslocado de 1 bit à direita. O MSB é carregado com 1. SETC ;prepara o carry para MSB RRC R5 ;R5 / 2 + 8000h = R5

Page 17: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 17

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 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

Exemplo 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 Carry bit Sim 0 Não 1

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 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 � 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

Page 18: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 18

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

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, 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: 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: Borrow Carry Sim 0 Não 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, 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: 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 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: Borrow Carry Sim 0 Não 1

Page 19: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 19

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 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 &TCDAT, R7 ;TCDAT = 085h: ...... 1000 0101 SXT R7 ;R7 = 0FF85h:1111 1111 1000 0101 ADD R7, R6 ;soma numero de 16 bits.

Page 20: Conjunto de instruções MSP430.pdf

Microcontroladores MSP 430 Conjunto de Instruções

CEFET 20

50) *TST[.W] Testa destino *TST.B 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: 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 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 da word TONI. XOR R6, TONI