Assembly
Artigo: Assembly. Pesquise 862.000+ trabalhos acadêmicosPor: 47320 • 21/3/2015 • 5.506 Palavras (23 Páginas) • 453 Visualizações
Assembly
"Assembly" significa montagem. "Assembler" significa montador. Montagem é o ato de transformar uma seqüência de código fonte (texto) em código objeto (linguagem de máquina), e montador é o programa que faz isso.
Observe no diagrama abaixo que o PROGRAMADOR escreve uma lista de comandos em forma de texto, onde cada linha realiza uma função específica.
No entanto, para o microcontrolador não entende estes comandos em modo texto. Eles precisam antes ser traduzidos para uma linguagem binária (linguagem de máquina), e isso é feito pelo programa montador (ASSEMBLER).
Programar diretamente em linguagem de máquina até é possível, mas é muito, mas muito mais difícil do que programar em assembly.
Usando esta linguagem e um programa montador, o programador não escreve em linguagem de máquina, e sim em uma linguagem textual, facilitando a construção dos programas. Embora fique mais fácil do que programar direto em linguagem de máquina, programar em ASSEMBLY ainda é uma das formas mais "difíceis" de programação, sendo conhecida como a linguagem de programação de "mais baixo nível".
O arquivo fonte do diagrama acima (aquela lista de comandos digitada pelo programador) é composta de instruções (mnemônicos), parâmetros, rótulos, comentários e diretivas, e após são transformados em linguagem de máquina por um programa montador.
Vamos conhecer cada um destes componentes do programa.
INSTRUÇÃO : É o nome dado a uma operação que o microcontrolador pode realizar. Por exemplo, se o microcontrolador pode realizar a soma de dois valores, dizemos que existe no mínimo uma instrução para soma. No caso do microcontrolador PIC, as instruções que realizam soma são duas, a ADDWF e a ADDLW. Você consegue descobrir que instruções estão disponíveis para programação assembly no datasheet do microcontrolador em questão.
MNEMÔNICO: É uma representação textual de uma instrução. As instruções são, na verdade, códigos binários, e para serem entendidos pelos programador devem ser representados na forma textual. Se os mnemônicos não fossem utilizados, teríamos que programar assembly utilizando códigos numéricos difíceis de memorizar. Desta forma, uma das instruções de adição citadas anteriormente possui o mneumônico ADDWF, e sua representação binária é 000111xxxxxxxx onde x .
PARÂMETROS: São as informações manipuladas por uma instrução. Isso é necessário sempre que precisarmos informar à instrução quais os elementos envolvidos na operação. Por exemplo, se desejarmos somar dois valores, a instrução poderá ser ADDWF ou ADDLW, mas os valores a serem somados também deverão ser informados, sendo estes últimos os que chamamos de "parâmetros."
DIRETIVAS: São linhas que determinam como o programa montador irá trabalhar. Não geram efeito direto no código binário gerado. Por exemplo, a diretiva LIST p=16F877 determina qual o microcontrolador que será usado.
RÓTULOS : São nomes dados as linhas do programa, e servem para que em uma instrução de desvio possa se determinar o ponto para onde se deseja ir no programa. Os rótulos sempre são alinhados na coluna 0 (sem espaços antes do mesmo), enquanto que as instruções devem ser escritas após uma margem (obrigatoriamente após a coluna 0).
COMENTÁRIOS : São trechos de texto escritos após um sinal de ponto e vírgula (;). São úteis para que possamos adicionar pequenos lembretes no programa, facilitando a manutenção futura. Não interferem no tamanho do programa binário gerado.
Outros termos importantes :
MONTADOR : É o programa que transforma um programa fonte assembly em um programa executável. Um exemplo é o MPASM, que faz parte do MPLAB, uma ferramenta de desenvolvimento distribuída pela MicroChip (fabricante dos microcontroladores PIC)
AS INSTRUÇÕES
Por se tratar de um microcontrolador RISC, o PIC oferece um número reduzido de instruções. No entanto, ainda podemos dividir as instruções utilizadas pela família 16 dos microcontroladores PIC em 6 grupos :
• Instruções para manipulação de bytes de memória (B)
• Instruções para manipulação de bits de memória (b)
• Desvios incondicionais (Di)
• Desvios condicionais (D)
• Instruções com valores constantes (K)
• Instruções de controle (G)
Instrução e Parâmetros
Mneumônicos Descrição Tipo Ciclos Bits de status afetados
ADDWF f, d Adição : W + F. B 1 C, DC, Z
ANDWF f, d E binário (AND) entre W e F, bit a bit. B 1 Z
CLRF f Zera todos os bits de F. B 1 Z
CLRW Zera todos os bits de W. B 1 Z
COMF f, d Complemento de F. (bits com valores invertidos no byte) B 1 Z
DECF f, d Decrementa F B 1 Z
DECFSZ f, d Decrementa F e pula próxima linha se resultar zero B,Dc 1 (2)
INCF f, d Incrementa F B 1 Z
INCFSZ f, d Incrementa F e pula próxima linha se resultar zero B,Dc 1 (2)
IORWF f, d OU inclusivo (OR) de W com F B 1 Z
MOVF f, d Move F (geralmente usado para mover F para W) B 1 Z
MOVWF F Move W para F B 1
NOP Operação nula. Nada é executado. G 1
RLF f, d Rotaciona F para esquerda com Carry Flag B 1 C
RRF f, d Rotaciona F para direita com Carry Flag B 1 C
SUBWF f, d Subtrai W de F : (f-W) B 1 C,DC,Z
SWAPF f, d Troca os nibbles de f. Ex: (0xA3, após swap fica, 0x3A) B 1
XORWF f, d Ou exclusivo (XOR) entre W e F B 1 Z
BCF f, b Apaga (clear) um bit de F b 1
BSF f, b Liga (set) um bit de F b 1
BTFSC f,
...