Você está na página 1de 8

Resumo do Set de Instrues

Instrues
# Instruo Descrio Words
1 ADD Soma 1
2 ADDC Soma considerando Carry 1
3 AND Lgica .AND. (E) 1
4 ASR Deslocamento (Shift) aritmtico para direita (mantm sinal) 1
5 BCLR Limpa bit 1
6 BRA Salto relativo (soma ao PC - restrio de salto) 1
7 BSET Seta bit 1
8 BSW Escreve bit com o valor de C ou Z 1
9 BTG Inverte bit 1
10 BTSC Testa bit e pula se zero 1
11 BTSS Testa bit e pula se um 1
12 BTST Testa bit alterando C ou Z 1
13 BTSTS Testa bit alterando C ou Z e tambm setando o bit 1
14 CALL Chama sub-rotina (sem restrio) 1 ou 2
15 CLR Limpa registrador ou work 1
16 CLRWDT Limpa Watchdog Timer 1
17 COM Complemento de 1 1
18 CP Compara dois valores 1
19 CP0 Compara com zero 1
20 CPB Compara dois valores considerando Borrow 1
21 CPSEQ Compara 2 works e pula se = 1
22 CPSGT Compara 2 works e pula se > 1
23 CPSLT Compara 2 works e pula se < 1
24 CPSNE Compara 2 works e pula se 1
25 DAW Ajuste decimal (BCD) 1
26 DEC Decrementa 1 unidade 1
27 DEC2 Decrementa 2 unidades 1
28 DISI Desabilita interrupes por X ciclos de mquina 1
29 DIV Diviso (sinalizada e no sinalizada) 1
30 EXCH Permuta o contedo de 2 works 1
2 Desbravando o PIC24 - Conhea os Microcontroladores de 16 Bits
Desbravando o PIC

# Instruo Descrio Words


31 FF1L Procura o bit em 1 mais significativo 1
32 FF1R Procura o bit em 1 menos significativo 1
33 GOTO Desvio para local especfico do programa 1 ou 2
34 INC Incrementa 1 unidade 1
35 INC2 Incrementa 2 unidades 1
36 IOR Lgica .IOR. (OU) 1
37 LNK Carrega e ativa Frame Pointer (W14) 1
38 LSR Deslocamento (Shift) lgico para direita 1
39 MOV Move 1
40 MUL Multiplicao em 16 bits sinalizados 1
41 NEG Complemento de 2 1
42 NOP Sem operao 1
43 POP Recupera o topo da pilha 1
44 PUSH Armazena no topo da pilha 1
45 PWRSAV Entra em modo Sleep ou Idle 1
46 RCALL Chamada relativa de sub-rotina 1
47 REPEAT Repete a prxima instruo X vezes 1
48 RESET Reset por software 1
49 RETFIE Retorna da sub-rotina habilitando interrupes 1
50 RETLW Retorna da sub-rotina com valor 1
51 RETURN Retorna da sub-rotina 1
52 RLC Rotaciona para a esquerda incluindo Carry 1
53 RLNC Rotaciona para a esquerda no incluindo Carry 1
54 RRC Rotaciona para a direita incluindo Carry 1
55 RRNC Rotaciona para a direita no incluindo Carry 1
56 SE Executa a extenso de sinal (de 8 para 16 bits) 1
57 SETM Seta todos os bits 1
58 SL Deslocamento (Shift) para esquerda 1
59 SUB Subtrao 1
60 SUBB Subtrao considerando Borrow 1
61 SUBR Subtrao reversa (ordem contraria SUB) 1
62 SUBBR Subtrao reversa considerando Borrow 1
63 SWAP Permuta nibbles ou bytes 1
64 TBLRDH Leitura da memria de programa - parte alta 1
65 TBLRDL Leitura da memria de programa - parte baixa 1
66 TBLWTH Escrita na memria de programa - parte alta 1
67 TBLWTL Escrita na memria de programa - parte baixa 1
68 ULNK Desativa Frame Pointer 1
69 XOR Lgica .XOR. (OU exclusivo) 1
70 ZE Executa a extenso de zero (desconsidera sinal) 1
Resumo do Set de Instrues 3

Exemplos de operaes
Bits Status
Exemplos Descrio Ciclos
Afetados
ADD f f = f + WREG 1 C, DC, N, OV, Z
ADD f,WREG WREG = f + WREG 1 C, DC, N, OV, Z
ADD #lit10,Wn Wd = lit10 + Wd 1 C, DC, N, OV, Z
ADD Wb,Ws,Wd Wd = Wb + Ws 1 C, DC, N, OV, Z
ADD Wb,#lit5,Wd Wd = Wb + lit5 1 C, DC, N, OV, Z
ADDC f f = f + WREG + (C) 1 C, DC, N, OV, Z
ADDC f,WREG WREG = f + WREG + (C) 1 C, DC, N, OV, Z
ADDC #lit10,Wn Wd = lit10 + Wd + (C) 1 C, DC, N, OV, Z
ADDC Wb,Ws,Wd Wd = Wb + Ws + (C) 1 C, DC, N, OV, Z
ADDC Wb,#lit5,Wd Wd = Wb + lit5 + (C) 1 C, DC, N, OV, Z
AND f f = f .AND. WREG 1 N, Z
AND f,WREG WREG = f .AND. WREG 1 N, Z
AND #lit10,Wn Wd = lit10 .AND. Wd 1 N, Z
AND Wb,Ws,Wd Wd = Wb .AND. Ws 1 N, Z
AND Wb,#lit5,Wd Wd = Wb .AND. lit5 1 N, Z
ASR f f = Shift aritmtico para direita de f 1 C, N, OV, Z
ASR f,WREG WREG = Shift aritmtico para direita de f 1 C, N, OV, Z
ASR Ws,Wd Wd = Shift aritmtico para direita de Ws 1 C, N, OV, Z
Wnd = Shift aritmtico para direita de Wb por
ASR Wb,Wns,Wnd 1 N, Z
Wns vezes
Wnd = Shift aritmtico para direita de Wb por
ASR Wb,#lit5,Wnd 1 N, Z
lit5 vezes
BCLR f,#bit4 Limpa bit f<bit4> 1 Nenhum
BCLR Ws,#bit4 Limpa bit Ws<bit4> 1 Nenhum
BRA C,Expr Salta se Carry 1(2) Nenhum
BRA GE,Expr Salta se >= 1(2) Nenhum
BRA GEU,Expr Salta se >= (sem sinal) 1(2) Nenhum
BRA GT,Expr Salta se > 1(2) Nenhum
BRA GTU,Expr Salta se > (sem sinal) 1(2) Nenhum
BRA LE,Expr Salta se <= 1(2) Nenhum
BRA LEU,Expr Salta se <= (sem sinal) 1(2) Nenhum
BRA LT,Expr Salta se < 1(2) Nenhum
BRA LTU,Expr Salta se < (sem sinal) 1(2) Nenhum
BRA N,Expr Salta se Negativo 1(2) Nenhum
BRA NC,Expr Salta se No Carry 1(2) Nenhum
BRA NN,Expr Salta se No Negativo 1(2) Nenhum
BRA NOV,Expr Salta se No Overflow 1(2) Nenhum
BRA NZ,Expr Salta se No Zero 1(2) Nenhum
BRA OV,Expr Salta se Overflow 1(2) Nenhum
BRA Expr Salta incondicionalmente 2 Nenhum
BRA Z,Expr Salta se Zero 1(2) Nenhum
BRA Wn Salta o tamanho indicado por Wn 2 Nenhum
BSET f,#bit4 Seta bit f<bit4> 1 Nenhum
4 Desbravando o PIC24 - Conhea os Microcontroladores de 16 Bits
Desbravando o PIC

Bits Status
Exemplos Descrio Ciclos
Afetados
BSET Ws,#bit4 Seta bit Ws<bit4> 1 Nenhum
BSW.C Ws,Wb Escreve o valor de C em Ws<Wb> 1 Nenhum
BSW.Z Ws,Wb Escreve o valor de Z em Ws<Wb> 1 Nenhum
BTG f,#bit4 Inverte bit f<bit4> 1 Nenhum
BTG Ws,#bit4 Inverte bit Ws<bit4> 1 Nenhum
BTSC f,#bit4 Testa bit f<bit4>, pula se zero 1(2/3) Nenhum
BTSC Ws,#bit4 Testa bit Ws<bit4>, pula se zero 1(2/3) Nenhum
BTSS f,#bit4 Testa bit f<bit4>, pula se um 1(2/3) Nenhum
BTSS Ws,#bit4 Bit Testa bit Ws<bit4>, pula se um 1(2/3) Nenhum
BTST f,#bit4 Testa bit f<bit4> 1 Z
BTST.C Ws,#bit4 Testa bit Ws<bit4> para C 1 C
BTST.Z Ws,#bit4 Testa bit Ws<bit4> para Z 1 Z
BTST.C Ws,Wb Testa bit Ws<Wb> para C 1 C
BTST.Z Ws,Wb Testa bit Ws<Wb> para Z 1 Z
BTSTS f,#bit4 Testa bit f<bit4> e depois seta o mesmo 1 Z
BTSTS.C Ws,#bit4 Testa bit Ws<bit4> para C e seta o bit 1 C
BTSTS.Z Ws,#bit4 Testa bit Ws<bit4> para Z e seta o bit 1 Z
CALL lit23 Chama sub-rotina 2 Nenhum
CALL Wn Chama sub-rotina indireta 2 Nenhum
CLR f f=0 1 Nenhum
CLR WREG WREG = 0 1 Nenhum
CLR Ws Ws = 0 1 Nenhum
CLRWDT Limpa Watchdog Timer 1 WDTO, Sleep
COM f f = /f 1 N, Z
COM f,WREG WREG = /f 1 N, Z
COM Ws,Wd Wd = /Ws 1 N, Z
CP f Compara f com WREG 1 C, DC, N, OV, Z
CP Wb,#lit5 Compara Wb com lit5 1 C, DC, N, OV, Z
CP Wb,Ws Compara Wb com Ws (Wb - Ws) 1 C, DC, N, OV, Z
CP0 f Compara f com 0 1 C, DC, N, OV, Z
CP0 Ws Compara Ws com 0 1 C, DC, N, OV, Z
CPB f Compara f com WREG, com Borrow 1 C, DC, N, OV, Z
CPB Wb,#lit5 Compara Wb com lit5, com Borrow 1 C, DC, N, OV, Z
Compara Wb com Ws, com Borrow
CPB Wb,Ws 1 C, DC, N, OV, Z
(Wb - Ws - /C)
CPSEQ Wb,Wn Compara Wb com Wn, pula se = 1(2/3) Nenhum
CPSGT Wb,Wn Compara Wb com Wn, pula se > 1(2/3) Nenhum
CPSLT Wb,Wn Compara Wb com Wn, pula se < 1(2/3) Nenhum
CPSNE Wb,Wn Compara Wb com Wn, pula se 1(2/3) Nenhum
DAW Wn Wn = Ajuste decimal de Wn 1 C
DEC f f=f-1 1 C, DC, N, OV, Z
DEC f,WREG WREG = f - 1 1 C, DC, N, OV, Z
DEC Ws,Wd Wd = Ws - 1 1 C, DC, N, OV, Z
DEC2 f f=f-2 1 C, DC, N, OV, Z
DEC2 f,WREG WREG = f - 2 1 C, DC, N, OV, Z
Resumo do Set de Instrues 5

Bits Status
Exemplos Descrio Ciclos
Afetados
DEC2 Ws,Wd Wd = Ws - 2 1 C, DC, N, OV, Z
Desabilita interrupes por #lit14 ciclos de
DISI #lit14 1 Nenhum
mquina
DIV.SW Wm,Wn Diviso 16/16 bits sinalizada 18 N, Z, C, OV
DIV.SD Wm,Wn Diviso 32/16 bits sinalizada 18 N, Z, C, OV
DIV.UW Wm,Wn Diviso 16/16 bits no sinalizada 18 N, Z, C, OV
DIV.UD Wm,Wn Diviso 32/16 bits no sinalizada 18 N, Z, C, OV
EXCH Wns,Wnd Permuta Wns com Wnd 1 Nenhum
FF1L Ws,Wnd Procura o bit em 1 mais significativo 1 C
FF1R Ws,Wnd Procura o bit em 1 menos significativo 1 C
GOTO Expr Desvia para Expr 2 Nenhum
GOTO Wn Desvia para endereo apontado por Wn 2 Nenhum
INC f f=f+1 1 C, DC, N, OV, Z
INC f,WREG WREG = f + 1 1 C, DC, N, OV, Z
INC Ws,Wd Wd = Ws + 1 1 C, DC, N, OV, Z
INC2 f f=f+2 1 C, DC, N, OV, Z
INC2 f,WREG WREG = f + 2 1 C, DC, N, OV, Z
INC2 Ws,Wd Wd = Ws + 2 1 C, DC, N, OV, Z
IOR f f = f .IOR. WREG 1 N, Z
IOR f,WREG WREG = f .IOR. WREG 1 N, Z
IOR #lit10,Wn Wd = lit10 .IOR. Wd 1 N, Z
IOR Wb,Ws,Wd Wd = Wb .IOR. Ws 1 N, Z
IOR Wb,#lit5,Wd Wd = Wb .IOR. lit5 1 N, Z
LNK #lit14 Carrega e ativa Frame Pointer com lit14 1 Nenhum
LSR f f = Shift lgico para direita de f 1 C, N, OV, Z
LSR f,WREG WREG = Shift lgico para direita de f 1 C, N, OV, Z
LSR Ws,Wd Wd = Shift lgico para direita de Ws 1 C, N, OV, Z
Wnd = Shift lgico para direita de Wb por Wns
LSR Wb,Wns,Wnd 1 N, Z
vezes
Wnd = Shift lgico para direita de Wb por lit5
LSR Wb,#lit5,Wnd 1 N, Z
vezes
MOV f,Wn Move f para Wn 1 Nenhum
MOV [Wns+Slit10],Wnd Move [Wns+Slit10] para Wnd 1 Nenhum
MOV f Move f para f 1 N, Z
MOV f,WREG Move f para WREG 1 N, Z
MOV #lit16,Wn Move lit16 para Wn 1 Nenhum
MOV.b #lit8,Wn Move lit8 para Wn 1 Nenhum
MOV Wn,f Move Wn para f 1 Nenhum
MOV Wns,[Wns+Slit10] Move Wns para [Wns+Slit10] 1 Nenhum
MOV Wso,Wdo Move Ws para Wd 1 Nenhum
MOV WREG,f Move WREG para f 1 N, Z
MOV.D Wns,Wd Move de W(ns):W(ns+1) para Wd 2 Nenhum
MOV.D Ws,Wnd Move de Ws para W(nd+1):W(nd) 2 Nenhum
MUL.SS Wb,Ws,Wnd {Wnd+1, Wnd} = Signed(Wb) * Signed(Ws) 1 Nenhum
MUL.SU Wb,Ws,Wnd {Wnd+1, Wnd} = Signed(Wb) * Unsigned(Ws) 1 Nenhum
MUL.US Wb,Ws,Wnd {Wnd+1, Wnd} = Unsigned(Wb) * Signed(Ws) 1 Nenhum
6 Desbravando o PIC24 - Conhea os Microcontroladores de 16 Bits
Desbravando o PIC

Bits Status
Exemplos Descrio Ciclos
Afetados
MUL.UU Wb,Ws,Wnd {Wnd+1, Wnd} = Unsigned(Wb) * Unsigned(Ws) 1 Nenhum
MUL.SU Wb,#lit5,Wnd {Wnd+1, Wnd} = Signed(Wb) * Unsigned(lit5) 1 Nenhum
MUL.UU Wb,#lit5,Wnd {Wnd+1, Wnd} = Unsigned(Wb) * Unsigned(lit5) 1 Nenhum
MUL f W3:W2 = f * WREG 1 Nenhum
NEG f f = /f + 1 1 C, DC, N, OV, Z
NEG f,WREG WREG = /f + 1 1 C, DC, N, OV, Z
NEG Ws,Wd Wd = /Ws + 1 1 C, DC, N, OV, Z
NOP Sem operao 1 Nenhum
NOPR Sem operao 1 Nenhum
POP f Recupera f do topo da pilha 1 Nenhum
POP Wdo Recupera Wdo do topo da pilha 1 Nenhum
POP.D Wnd Recupera W(nd):W(nd+1) do topo da pilha 2 Nenhum
POP.S Recupera contexto (Shadow) 1 Todos
PUSH f Armazena f no topo da pilha 1 Nenhum
PUSH Wso Armazena Wdo no topo da pilha 1 Nenhum
PUSH.D Wns Armazena W(nd):W(nd+1) no topo da pilha 2 Nenhum
PUSH.S Armazena contexto (Shadow) 1 Nenhum
PWRSAV #lit1 Entra em modo Sleep ou Idle 1 WDTO, Sleep
RCALL Expr Chamada relativa de sub-rotina 2 Nenhum
RCALL Wn Chamada relativa indexada de sub-rotina 2 Nenhum
REPEAT #lit14 Repete a prxima instruo (lit14 + 1) vezes 1 Nenhum
REPEAT Wn Repete a prxima instruo (Wn + 1) vezes 1 Nenhum
RESET Reset por software 1 Nenhum
RETFIE Retorna da sub-rotina habilitando interrupes 3(2) Nenhum
RETLW #lit10,Wn Retorna da sub-rotina com lit10 in Wn 3(2) Nenhum
RETURN Retorna da sub-rotina 3(2) Nenhum
f = Rotaco de f para a esquerda incluindo
RLC f 1 C, N, Z
Carry
WREG = Rotaco de f para a esquerda incluindo
RLC f,WREG 1 C, N, Z
Carry
Wd = Rotaco de Ws para a esquerda incluindo
RLC Ws,Wd 1 C, N, Z
Carry
f = Rotaco de f para a esquerda no incluindo
RLNC f 1 N, Z
Carry
WREG = Rotaco de f para a esquerda no
RLNC f,WREG 1 N, Z
incluindo Carry
Wd = Rotaco de Ws para a esquerda no
RLNC Ws,Wd 1 N, Z
incluindo Carry
RRC f f = Rotaco de f para a direita incluindo Carry 1 C, N, Z
WREG = Rotaco de f para a direita incluindo
RRC f,WREG 1 C, N, Z
Carry
Wd = Rotaco de Ws para a direita incluindo
RRC Ws,Wd 1 C, N, Z
Carry
f = Rotaco de f para a direita no incluindo
RRNC f 1 N, Z
Carry
WREG = Rotaco de f para a direita no incluin-
RRNC f,WREG 1 N, Z
do Carry
Resumo do Set de Instrues 7

Bits Status
Exemplos Descrio Ciclos
Afetados
Wd = Rotaco de Ws para a direita no incluin-
RRNC Ws,Wd 1 N, Z
do Carry
SE Ws,Wnd Wnd = Ws com sinal estendido 1 C, N, Z
SETM f f = FFFFh 1 Nenhum
SETM WREG WREG = FFFFh 1 Nenhum
SETM Ws Ws = FFFFh 1 Nenhum
SL f f = Shift para esquerda de f 1 C, N, OV, Z
SL f,WREG WREG = Shift para esquerda de f 1 C, N, OV, Z
SL Ws,Wd Wd = Shift para esquerda de Ws 1 C, N, OV, Z
Wnd = Shift para esquerda de Wb por Wns
SL Wb,Wns,Wnd 1 N, Z
vezes
SL Wb,#lit5,Wnd Wnd = Shift para esquerda de Wb por lit5 vezes 1 N, Z
SUB f f = f - WREG 1 C, DC, N, OV, Z
SUB f,WREG WREG = f - WREG 1 C, DC, N, OV, Z
SUB #lit10,Wn Wn = Wn - lit10 1 C, DC, N, OV, Z
SUB Wb,Ws,Wd Wd = Wb - Ws 1 C, DC, N, OV, Z
SUB Wb,#lit5,Wd Wd = Wb - lit5 1 C, DC, N, OV, Z
SUBB f f = f - WREG - (/C) 1 C, DC, N, OV, Z
SUBB f,WREG WREG = f - WREG - (/C) 1 C, DC, N, OV, Z
SUBB #lit10,Wn Wn = Wn - lit10 - (/C) 1 C, DC, N, OV, Z
SUBB Wb,Ws,Wd Wd = Wb - Ws - (/C) 1 C, DC, N, OV, Z
SUBB Wb,#lit5,Wd Wd = Wb - lit5 - (/C) 1 C, DC, N, OV, Z
SUBR f f = WREG - f 1 C, DC, N, OV, Z
SUBR f,WREG WREG = WREG - f 1 C, DC, N, OV, Z
SUBR Wb,Ws,Wd Wd = Ws - Wb 1 C, DC, N, OV, Z
SUBR Wb,#lit5,Wd Wd = lit5 - Wb 1 C, DC, N, OV, Z
SUBBR f f = WREG - f - (/C) 1 C, DC, N, OV, Z
SUBBR f,WREG WREG = WREG - f - (/C) 1 C, DC, N, OV, Z
SUBBR Wb,Ws,Wd Wd = Ws - Wb - (/C) 1 C, DC, N, OV, Z
SUBBR Wb,#lit5,Wd Wd = lit5 - Wb - (/C) 1 C, DC, N, OV, Z
SWAP.b Wn Wn = Inverte nibbles de Wn 1 Nenhum
SWAP Wn Wn = Inverte bytes de Wn 1 Nenhum
TBLRDH Ws,Wd Leitura da memria de programa - parte alta 2 Nenhum
TBLRDL Ws,Wd Leitura da memria de programa - parte baixa 2 Nenhum
TBLWTH Ws,Wd Escrita na memria de programa - parte alta 2 Nenhum
TBLWTL Ws,Wd Escrita na memria de programa - parte baixa 2 Nenhum
ULNK Desativa Frame Pointer 1 Nenhum
XOR f f = f .XOR. WREG 1 N, Z
XOR f,WREG WREG = f .XOR. WREG 1 N, Z
XOR #lit10,Wn Wd = lit10 .XOR. Wd 1 N, Z
XOR Wb,Ws,Wd Wd = Wb .XOR. Ws 1 N, Z
XOR Wb,#lit5,Wd Wd = Wb .XOR. lit5 1 N, Z
ZE Ws,Wnd Wnd = Ws com extenso de zero 1 C, Z, N
8 Desbravando o PIC24 - Conhea os Microcontroladores de 16 Bits
Desbravando o PIC

Termos utilizados nos exemplos


Termo Descrio
#text Representa uma literal definida por text
(text) Representa o contedo de text
[text] Representa o endereo de localizao de text
{} Campo ou operao opcional
<n:m> Identificao de bit(s) em determinado registrador
.b Modo de seleo de byte
.d Modo de seleo de Duplo-Word
.S Seleo de registrador Shadow (sombra/espelho)
.w Modo de seleo de Duplo-Word (padro)
bit4 Campo de seleo de 4 bits {0...15}
C, DC, N, OV,
Bits de Status: Carry, Digit Carry, Negative, Overflow, Sticky Zero
Z MCU
Expr Endereo absoluto, nome (label) ou expresso
f Registrador (File) {0000h...1FFFh}
lit1 Literal de 1 bit (sem sinal) {0,1}
lit4 Literal de 4 bits (sem sinal) {0...15}
lit5 Literal de 5 bits (sem sinal) {0...31}
lit8 Literal de 8 bits (sem sinal) {0...255}
lit10 Literal de 10 bits (sem sinal) {0...255} para modo Byte ou {0...1023} para modo Word
lit14 Literal de 14 bits (sem sinal) {0...16384}
lit16 Literal de 16 bits (sem sinal) {0...65535}
lit23 Literal de 23 bits (sem sinal) {0...8388608} (LSB deve ser 0).
PC Contador do programa (Program Counter)
Slit6 Literal de 6 bits (com sinal) {-16...16}
Slit10 Literal de 10 bits (com sinal) {-512...511}
Slit16 Literal de 16 bits (com sinal) {-32768...32767}
Wb Acumulador W base {W0..W15}
Wd Acumulador W de destino { Wd, [Wd], [Wd++], [Wd--], [++Wd], [--Wd] }
Wdo Acumulador W de destino { Wnd, [Wnd], [Wnd++], [Wnd--], [++Wnd], [--Wnd], [Wnd+Wb] }
Wm,Wn Par de acumuladores para diviso (Dividendo e Divisor) (Endereamento direto)
Wn Acumulador W {W0..W15}
Wnd Acumulador W de destino {W0..W15}
Wns Acumulador W de origem {W0..W15}
WREG Acumulador W0 (Usado em instrues de registradores)
Ws Acumulador W de origem { Ws, [Ws], [Ws++], [Ws--], [++Ws], [--Ws] }
Wso Acumulador W de origem { Wns, [Wns], [Wns++], [Wns--], [++Wns], [--Wns], [Wns+Wb] }