








Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Uma descrição e sintaxe de várias instruções de assembly para microcontroladores. As instruções abrangem operações aritméticas, lógicas, de controle de flags, de entrada/saída e de manipulação de registros. Além disso, é fornecido um exemplo para cada instrução, explicando o resultado obtido após a execução.
Tipologia: Notas de estudo
1 / 14
Esta página não é visível na pré-visualização
Não perca as partes importantes!









Indice Sistema de desenvolvimento Contacte-nos
z A.1 MOVLW z A.2 MOVWF z A.3 MOVF z A.4 CLRW z A.5 CLRF z A.6 SWAPF z A.7 ADDLW z A.8 ADDWF z A.9 SUBLW
z A.10 SUBWF z A.11 ANDLW z A.12 ANDWF z A.13 IORLW z A.14 IORWF z A.15 XORLW z A.16 XORWF z A.17 INCF z A.18 DECF
z A.19 RLF z A.20 RRF z A.21 COMF z A.22 BCF z A.23 BSF z A.24 BTFSC z A.25 BTFSS z A.26 INCFSZ z A.27 DECFSZ
z A.28 GOTO z A.29 CALL z A.30 RETURN z A.31 RETLW z A.32 RETFIE z A.33 NOP z A.34 CLRWDT z A.35 SLEEP
Sintaxe: [rótulo] MOVLW k Descrição: A constante de 8-bits k vai para o registo W.
Flag: - Número de palavras: 1 Número de ciclos: 1 Exemplo 1: MOVLW 0x5A Depois da instrução: W= 0x5A Exemplo 2: MOVLW REGISTAR Antes da instrução: W = 0x10 e REGISTAR = 0x Depois da instrução: W = 0x
Sintaxe: [rótulo] MOVWF f Descrição: O conteúdo do registo W é copiado para o registo f
Flag: - Número de palavras: 1 Número de ciclos: 1 Exemplo 1: MOVWF OPTION_REG Antes da instrução: OPTION_REG = 0x W = 0x Depois da instrução: OPTION_REG = 0x W = 0x Exemplo 2: MOVWF INDF Antes da instrução: W = 0x FSR = 0xC Conteúdo do endereço 0xC2 = 0x Depois da instrução: W = 0x FSR = 0xC
A.3 MOVF Copiar f para d
A.4 CLRW Escrever 0 em W
A.5 CLRF Escrever 0 em f
Conteúdo do endereço 0xC2 = 0x
Sintaxe: (^) [rótulo] MOVF f, d Descrição: O conteúdo do registo f é guardado no local determinado pelo operando d Se d = 0 , o destino é o registo W Se d = 1 , o destino é o próprio registo f A opção d = 1 , é usada para testar o conteúdo do registo f , porque a execução desta instrução afecta a flag Z do registo STATUS.
Flag: (^) Z Número de palavras: (^) 1 Número de ciclos: (^) 1 Exemplo 1: MOVF FSR, 0 Antes da instrução: FSR = 0xC W = 0x Depois da instrução: W = 0xC Z = 0 Exemplo 2: MOVF INDF, 0 Antes da instrução: W = 0x FSR = 0xC conteúdo do endereço 0xC2 = 0x Depois da instrução: W = 0x FSR = 0xC conteúdo do endereço 0xC2 = 0x Z = 1
Sintaxe: [rótulo] CLRW Descrição: O conteúdo do registo W passa para 0 e a flag Z do registo STATUS toma o valor 1.
Operando: - Flag: Z Número de palavras: 1 Número de ciclos: 1 Exemplo: CLRW Antes da instrução: W = 0x Depois da instrução: W = 0x Z = 1
Sintaxe: [rótulo] CLRF f Descrição: O conteúdo do registo ‘f’ passa para 0 e a flag Z do registo STATUS toma o valor 1.
A.8 ADDWF Adicionar W a f
A.9 SUBLW Subtrair W a uma constante
A.10 SUBWF Subtrair W a f
Sintaxe: [rótulo] ADDWF f , d Descrição: Adicionar os conteúdos dos registos W e f Se d=0 , o resultado é guardado no registo W Se d=1 , o resultado é guardado no registo f
Flag: C, DC, Z Número de palavras: 1 Número de ciclos: 1 Exemplo 1: ADDWF FSR, 0 Antes da instrução: W = 0x FSR = 0xC Depois da instrução: W = 0xD FSR = 0xC Exemplo 2: ADDWF INDF, Antes da instrução: W = 0x FSR = 0xC conteúdo do endereço 0xC2 = 0x Depois da instrução: W = 0x FSR = 0xC Conteúdo do endereço 0xC2 = 0x
Sintaxe: [rótulo] SUBLW k Descrição: O conteúdo do registo W , é subtraído à constante k e, o resultado, é guardado no registo W.
Flag: C, DC, Z Número de palavras: 1 Número de ciclos: 1 Exemplo 1: SUBLW 0x Antes da instrução: W= 0x01, C = x, Z = x Depois da instrução: W= 0x02, C = 1, Z = 0 Resultado > 0 Antes da instrução: W= 0x03, C = x, Z = x Depois da instrução: W= 0x00, C = 1, Z = 1 Resultado = 0 Antes da instrução: W= 0x04, C = x, Z = x Depois da instrução: W= 0xFF, C = 0, Z = 0 Resultado < 0 Exemplo 2: SUBLW REG Antes da instrução: W = 0x REG = 0x Depois da instrução: W = 0x C = 1 Resultado > 0
Sintaxe: [rótulo] SUBWF f , d Descrição: O conteúdo do registo W é subtraído ao conteúdo do registo f Se d=0 , o resultado é guardado no registo W Se d=1 , o resultado é guardado no registo f
A.11 ANDLW Fazer o “E” lógico de W com uma constante
A.12 ANDWF Fazer o “E” lógico de W com f
Flag: C, DC, Z Número de palavras: 1 Número de ciclos: 1 Exemplo: SUBWF REG, 1 Antes da instrução: REG= 3, W= 2, C = x, Z = x Depois da instrução: REG= 1, W= 2, C = 1, Z = 0 Resultado > 0 Antes da instrução: REG= 2, W= 2, C = x, Z = x Depois da instrução: REG=0, W= 2, C = 1, Z = 1 Resultado = 0 Antes da instrução: REG=1, W= 2, C = x, Z = x Depois da instrução: REG= 0xFF, W=2, C = 0, Z = 0 Resultado < 0
Sintaxe: [rótulo] ANDLW k Descrição: É executado o “E” lógico do conteúdo do registo W , com a constante k O resultado é guardado no registo W.
Flag: Z Número de palavras: 1 Número de ciclos: 1 Exemplo 1: ANDLW 0x5F Antes da instrução: W= 0xA3 ; 0101 1111 (0x5F) ; 1010 0011 (0xA3) Depois da instrução: W= 0x03; 0000 0011 (0x03) Exemplo 2: ANDLW REG Antes da instrução: W = 0xA3 ; 1010 0011 (0xA3) REG = 0x37 ; 0011 0111 (0x37) Depois da instrução: W = 0x23 ; 0010 0011 (0x23)
Sintaxe: [rótulo] ANDWF f , d Descrição: Faz o “E” lógico dos conteúdos dos registos W e f Se d=0 , o resultado é guardado no registo W Se d=1 , o resultado é guardado no registo f
Flag: Z Número de palavras: 1 Número de ciclos: 1 Exemplo 1: ANDWF FSR, 1 Antes da instrução: W= 0x17, FSR= 0xC2; 0001 1111 (0x17) ; 1100 0010 (0xC2) Depois da instrução: W= 0x17, FSR= 0x02 ; 0000 0010 (0x02) Exemplo 2: ANDWF FSR, 0 Antes da instrução: W= 0x17, FSR= 0xC2; 0001 1111 (0x17) ; 1100 0010 (0xC2) Depois da instrução: W= 0x02, FSR= 0xC2; 0000 0010 (0x02)
A.16 XORWF “OU-EXCLUSIVO” de W com f
A.17 INCF Incrementar f
Depois da instrução: W= 0x1A; 0001 1010 (0x1A) Exemplo 2: XORLW REG Antes da instrução: W = 0xAF ; 1010 1111 (0xAF) REG = 0x37 ; 0011 0111 (0x37) Depois da instrução: W = 0x98 ; 1001 1000 (0x98) Z = 0
Sintaxe: [rótulo] XORWF f , d Descrição: Faz o “OU-EXCLUSIVO” dos conteúdos dos registos W e f Se d=0 , o resultado é guardado no registo W Se d=1 , o resultado é guardado no registo f
Flag: Z Número de palavras: 1 Número de ciclos: 1 Exemplo 1: XORWF REG, 1 Antes da instrução: REG= 0xAF, W= 0xB5 ; 1010 1111 (0xAF) ; 1011 0101 (0xB5) Depois da instrução: REG= 0x1A, W= 0xB5 001 1010 (0x1A) Exemplo 2: XORWF REG, 0 Antes da instrução: REG= 0xAF, W= 0xB5; 1010 1111 (0xAF) ; 1011 0101 (0xB5) Depois da instrução: REG= 0xAF, W= 0x1A ; 0001 1010 (0x1A)
Sintaxe: [rótulo] INCF f , d Descrição: Incrementar de uma unidade, o conteúdo do registo f. Se d=0 , o resultado é guardado no registo W Se d=1 , o resultado é guardado no registo f
Flag: Z Número de palavras: 1 Número de ciclos: 1 Exemplo 1: INCF REG, 1 Antes da instrução: REG = 0xFF Z = 0 Depois da instrução: REG = 0x Z = 1 Exemplo 2: INCF REG, 0 Antes da instrução: REG = 0x W = x Z = 0 Depois da instrução: REG = 0x W = 0x Z = 0
A.18 DECF Decrementar f
A.19 RLF Rodar f para a esquerda através do Carry
A.20 RRF Rodar f para a direita através do Carry
Sintaxe: [rótulo] DECF f , d Descrição: Decrementar de uma unidade, o conteúdo do registo f. Se d=0 , o resultado é guardado no registo W Se d=1 , o resultado é guardado no registo f
Flag: Z Número de palavras: 1 Número de ciclos: 1 Exemplo 1: DECF REG, 1 Antes da instrução: REG = 0x Z = 0 Depois da instrução: REG = 0x Z = 1 Exemplo 2: DECF REG, 0 Antes da instrução: REG = 0x W = x Z = 0 Depois da instrução: REG = 0x W = 0x Z = 0
Sintaxe: [rótulo] RLF f , d Descrição: O conteúdo do registo f é rodado um espaço para a esquerda, através de C (flag do Carry). Se d=0 , o resultado é guardado no registo W Se d=1 , o resultado é guardado no registo f
Flag: C Número de palavras: 1 Número de ciclos: (^) 1 Exemplo 1: RLF REG, 0 Antes da instrução: REG = 1110 0110 C = 0 Depois da instrução: REG = 1110 0110 W = 1100 1100 C = 1 Exemplo 2: RLF REG, 1 Antes da instrução: REG = 1110 0110 C = 0 Depois da instrução: REG = 1100 1100 C = 1
Sintaxe: [rótulo] RRF f , d Descrição: O conteúdo do registo f é rodado um espaço para a direita, através de C (flag do Carry).
A.23 BSF Pôr a “1” o bit b de f
A.24 BTFSC Testar o bit b de f, saltar por cima se for = 0
A.25 BTFSS Testar o bit b de f, saltar por cima se for = 1
Exemplo 2: BCF INDF, 3 Antes da instrução: W = 0x FSR = 0xC conteúdo do endereço em FSR (FSR) = 0x2F Depois da instrução: W = 0x
Sintaxe: [rótulo] BSF f , b Descrição: Pôr a ‘1’, o bit b do registo f
Flag: - Número de palavras: 1 Número de ciclos: 1 Exemplo 1: BSF REG, 7 Antes da instrução: REG = 0x07 ; 0000 0111 (0x07) Depois da instrução: REG = 0x17 ; 1000 0111 (0x87) Exemplo 2: BSF INDF, 3 Antes da instrução: W = 0x FSR = 0xC conteúdo do endereço em FSR (FSR) = 0x2F Depois da instrução: W = 0x FSR = 0xC conteúdo do endereço em FSR (FSR) = 0x
Sintaxe: [rótulo] BTFSC f , b Descrição: Se o bit b do registo f for igual a zero, ignorar instrução seguinte. Se este bit b for zero, então, durante a execução da instrução actual, a execução da instrução seguinte não se concretiza e é executada, em vez desta, uma instrução NOP, fazendo com que a instrução actual, demore dois ciclos de instrução a ser executada. Operação: Ignorar a instrução seguinte se ( f < b >) = 0
Flag: - Número de palavras: 1 Número de ciclos: 1 ou 2 dependendo do valor lógico do bit b Exemplo: LAB_01 BTFSC REG, 1; Testar o bit 1 do registo REG LAB_02 ........... ; Ignorar esta linha se for 0 LAB_03 ........... ; Executar esta linha depois da anterior, se for 1 Antes da instrução, o contador de programa contém o endereço LAB_01.
Depois desta instrução, se o bit 1 do registo REG for zero, o contador de programa contém o endereço LAB_03. Se o bit 1 do registo REG for ‘um’, o contador de programa contém o endereço LAB_02.
Sintaxe: [rótulo] BTFSS f , b
A.26 INCFSZ Incrementar f, saltar por cima se der = 0
A.27 DECFSZ Decrementar f, saltar por cima se der = 0
Descrição: Se o bit b do registo f for igual a um, ignorar instrução seguinte. Se durante a execução desta instrução este bit b for um, então, a execução da instrução seguinte não se concretiza e é executada, em vez desta, uma instrução NOP, assim, a instrução actual demora dois ciclos de instrução a ser executada. Operação: Ignorar a instrução seguinte se ( f < b >) = 1
Flag: - Número de palavras: 1 Número de ciclos: 1 ou 2 dependendo do valor lógico do bit b Exemplo: LAB_01 BTFSS REG, 1; Testar o bit 1 do registo REG LAB_02 ........... ; Ignorar esta linha se for 1 LAB_03 ........... ; Executar esta linha depois da anterior, se for 0 Antes da instrução, o contador de programa contém o endereço LAB_01.
Depois desta instrução, se o bit 1 do registo REG for ‘um’, o contador de programa contém o endereço LAB_03. Se o bit 1 do registo REG for zero, o contador de programa contém o endereço LAB_02.
Sintaxe: [rótulo] INCFSZ f , d Descrição: Descrição: O conteúdo do registo f é incrementado de uma unidade. Se d = 0 , o resultado é guardado no registo W. Se d = 1 , o resultado é guardado no registo f. Se o resultado do incremento for = 0, a instrução seguinte é substituída por uma instrução NOP, fazendo com que a instrução actual, demore dois ciclos de instrução a ser executada.
Flag: - Número de palavras: 1 Número de ciclos: 1 ou 2 dependendo do resultado Exemplo: LAB_01 INCFSZ REG, 1; Incrementar o conteúdo de REG de uma unidade LAB_02 ........... ; Ignorar esta linha se resultado = 0 LAB_03 ........... ; Executar esta linha depois da anterior, se der 0 Conteúdo do contador de programa antes da instrução, PC = endereço LAB_01. Se o conteúdo do registo REG depois de a operação REG = REG + 1 ter sido executada, for REG = 0, o contador de programa aponta para o rótulo de endereço LAB_03. Caso contrário, o contador de programa contém o endereço da instrução seguinte, ou seja, LAB_02.
Sintaxe: [rótulo] DECFSZ f , d Descrição: O conteúdo do registo f é decrementado uma unidade. Se d = 0 , o resultado é guardado no registo W. Se d = 1 , o resultado é guardado no registo f. Se o resultado do decremento for = 0, a instrução seguinte é substituída por uma instrução NOP, fazendo assim com que a instrução actual, demore dois ciclos de instrução a ser executada.
Flag: - Número de palavras: 1
A.31 RETLW Retorno de um subprograma com uma constante em W
A.32 RETFIE Retorno de uma rotina de interrupção
A.33 NOP Nenhuma operação
Operando: - Flag: - Número de palavras: 1 Número de ciclos: 2 Exemplo: RETURN Antes da instrução: PC = x TOS = x Depois da instrução: PC = TOS TOS = TOS - 1
Sintaxe: [rótulo] RETLW k Descrição: A constante k de 8 bits, é guardada no registo W.
Flag: - Número de palavras: 1 Número de ciclos: 2 Exemplo: RETLW 0x Antes da instrução: W = x PC = x TOS = x Depois da instrução: W = 0x PC = TOS TOS = TOS – 1
Sintaxe: [rótulo] RETLW k Descrição: Retorno de uma subrotina de atendimento de interrupção. O conteúdo do topo de pilha (TOS), é transferido para o contador de programa (PC). Ao mesmo tempo, as interrupções são habilitadas, pois o bit GIE de habilitação global das interrupções, é posto a ‘1’.
Operando: - Flag: - Número de palavras: 1 Número de ciclos: 2 Exemplo: RETFIE Antes da instrução: PC = x GIE = 0 Depois da instrução: PC = TOS GIE = 1
Sintaxe: [rótulo] NOP Descrição: Nenhuma operação é executada, nem qualquer flag é afectada. Operação: - Operando: - Flag: -
© Copyright 2003. i-magazine e mikroElektronika. All Rights Reserved.
A.34 CLRWDT Iniciar o temporizador do watchdog
A.35 SLEEP Modo de repouso
Número de palavras: 1 Número de ciclos: 1 Exemplo: NOP
Sintaxe: [rótulo] CLRWDT Descrição: O temporizador do watchdog é reposto a zero. O prescaler do temporizador de Watchdog é também reposto a 0 e, também, os bits do registo de estado
Operando: - Flag: Número de palavras: 1 Número de ciclos: 1 Exemplo: CLRWDT Antes da instrução: Contador de WDT = x Prescaler de WDT = 1: Depois da instrução: Contador do WDT = 0x Prescale do WDT = 0
Sintaxe: [rótulo] SLEEP Descrição: O processador entra no modo de baixo consumo. O oscilador pára. O bit (Power Down) do registo Status é reposto a ‘0’. O bit (Timer Out) é posto a ‘1’. O temporizador de WDT (Watchdog) e o respectivo prescaler são repostos a ‘0’.
Operando: - Flag: Número de palavras: 1 Número de ciclos: 1 Exemplo 1: SLEEP Antes da instrução: Contador do WDT = x Prescaler do WDT = x Depois da instrução: Contador do WDT = 0x Prescaler do WDT = 0