Sistemas Embarcados - Linguagem Assembly
Linguagens assembly foram desenvolvidas para fornecer mnemonicsou símbolos para as instruções do código de nível de máquina. Os programas em linguagem assembly consistem em mnemônicos, portanto, devem ser traduzidos em código de máquina. Um programa responsável por esta conversão é conhecido comoassembler. A linguagem assembly é frequentemente denominada como linguagem de baixo nível porque trabalha diretamente com a estrutura interna da CPU. Para programar em linguagem assembly, o programador deve conhecer todos os registros da CPU.
Linguagens de programação diferentes, como C, C ++, Java e várias outras linguagens são chamadas de linguagens de alto nível porque não lidam com os detalhes internos de uma CPU. Em contraste, um montador é usado para traduzir um programa de linguagem assembly em código de máquina (às vezes também chamadoobject code ou opcode) Da mesma forma, um compilador traduz uma linguagem de alto nível em código de máquina. Por exemplo, para escrever um programa em linguagem C, deve-se usar um compilador C para traduzir o programa em linguagem de máquina.
Estrutura da linguagem assembly
Um programa em linguagem assembly é uma série de instruções, que são instruções em linguagem assembly, como ADD e MOV, ou instruções chamadas directives.
A instruction diz à CPU o que fazer, enquanto um directive (também chamado pseudo-instructions) dá instruções ao montador. Por exemplo, as instruções ADD e MOV são comandos que a CPU executa, enquanto ORG e END são diretivas do montador. O montador coloca o opcode no local de memória 0 quando a diretiva ORG é usada, enquanto END indica o final do código-fonte. Uma instrução de idioma do programa consiste nos seguintes quatro campos -
[ label: ] mnemonics [ operands ] [;comment ]
Um colchete ([]) indica que o campo é opcional.
o label fieldpermite que o programa se refira a uma linha de código pelo nome. Os campos do rótulo não podem exceder um determinado número de caracteres.
o mnemonics e operands fieldsjuntos executam o trabalho real do programa e realizam as tarefas. Declarações como ADD A, C & MOV C, # 68 onde ADD e MOV são os mnemônicos, que produzem opcodes; "A, C" e "C, # 68" são operandos. Esses dois campos podem conter diretivas. As diretivas não geram código de máquina e são usadas apenas pelo montador, enquanto as instruções são traduzidas em código de máquina para a CPU executar.
1.0000 ORG 0H ;start (origin) at location 0
2 0000 7D25 MOV R5,#25H ;load 25H into R5
3.0002 7F34 MOV R7,#34H ;load 34H into R7
4.0004 7400 MOV A,#0 ;load 0 into A
5.0006 2D ADD A,R5 ;add contents of R5 to A
6.0007 2F ADD A,R7 ;add contents of R7 to A
7.0008 2412 ADD A,#12H ;add to A value 12 H
8.000A 80FE HERE: SJMP HERE ;stay in this loop
9.000C END ;end of asm source file
o comment field começa com um ponto e vírgula que é um indicador de comentário.
Observe o rótulo "AQUI" no programa. Qualquer rótulo que se refira a uma instrução deve ser seguido por dois pontos.
Montando e executando um programa 8051
Aqui, discutiremos sobre a forma básica de uma linguagem assembly. As etapas para criar, montar e executar um programa em linguagem assembly são as seguintes -
Primeiro, usamos um editor para digitar um programa semelhante ao programa acima. Editores como o programa MS-DOS EDIT que vem com todos os sistemas operacionais da Microsoft podem ser usados para criar ou editar um programa. O Editor deve ser capaz de produzir um arquivo ASCII. A extensão "asm" para o arquivo de origem é usada por um montador na próxima etapa.
O arquivo de origem "asm" contém o código do programa criado na Etapa 1. Ele é enviado a um assembler 8051. O montador então converte as instruções da linguagem assembly em instruções de código de máquina e produz um.obj file (arquivo objeto) e um .lst file(arquivo de lista). Também é chamado desource file, é por isso que alguns montadores exigem que esse arquivo tenha as extensões "src". O arquivo "lst" é opcional. É muito útil para o programa porque lista todos os opcodes e endereços, bem como os erros que os montadores detectaram.
Os montadores requerem uma terceira etapa chamada linking. O programa de link pega um ou mais arquivos de objeto e produz um arquivo de objeto absoluto com a extensão "abs".
Em seguida, o arquivo "abs" é alimentado para um programa chamado "OH" (conversor de objeto para hex), que cria um arquivo com a extensão "hex" que está pronto para ser gravado na ROM.
Tipo de dados
O microcontrolador 8051 contém um único tipo de dados de 8 bits e cada registro também possui 8 bits. O programador deve decompor os dados maiores que 8 bits (00 a FFH ou 255 em decimal) para que possam ser processados pela CPU.
DB (Definir Byte)
A diretiva DB é a diretiva de dados mais amplamente usada no assembler. É usado para definir os dados de 8 bits. Também pode ser usado para definir dados de formatos decimais, binários, hexadecimais ou ASCII. Para decimal, o "D" após o número decimal é opcional, mas é obrigatório para "B" (binário) e "Hl" (hexadecimal).
Para indicar ASCII, basta colocar os caracteres entre aspas ('assim'). O montador gera código ASCII para os números / caracteres automaticamente. A diretiva DB é a única diretiva que pode ser usada para definir strings ASCII com mais de dois caracteres; portanto, deve ser usado para todas as definições de dados ASCII. Alguns exemplos de DB são fornecidos abaixo -
ORG 500H
DATA1: DB 28 ;DECIMAL (1C in hex)
DATA2: DB 00110101B ;BINARY (35 in hex)
DATA3: DB 39H ;HEX
ORG 510H
DATA4: DB "2591" ;ASCII NUMBERS
ORG 520H
DATA6: DA "MY NAME IS Michael" ;ASCII CHARACTERS
Aspas simples ou duplas podem ser usadas em strings ASCII. O banco de dados também é usado para alocar memória em blocos do tamanho de bytes.
Diretivas Assembler
Algumas das diretivas de 8051 são as seguintes -
ORG (origin)- A diretiva de origem é usada para indicar o início do endereço. Leva os números em formato hexa ou decimal. Se H for fornecido após o número, o número será tratado como hexa, caso contrário, decimal. O montador converte o número decimal em hexa.
EQU (equate)- É usado para definir uma constante sem ocupar um local de memória. EQU associa um valor constante a um rótulo de dados para que o rótulo apareça no programa, seu valor constante será substituído pelo rótulo. Durante a execução da instrução "MOV R3, #COUNT", o registro R3 será carregado com o valor 25 (observe o sinal #). A vantagem de usar EQU é que o programador pode alterá-lo uma vez e o montador irá alterar todas as suas ocorrências; o programador não precisa pesquisar todo o programa.
END directive- Indica o fim do arquivo de origem (asm). A diretiva END é a última linha do programa; qualquer coisa após a diretiva END é ignorada pelo montador.
Rótulos em linguagem assembly
Todos os rótulos em linguagem assembly devem seguir as regras fornecidas abaixo -
Cada nome de rótulo deve ser exclusivo. Os nomes usados para rótulos na programação de linguagem assembly consistem em letras alfabéticas em maiúsculas e minúsculas, números de 0 a 9 e caracteres especiais, como ponto de interrogação (?), Ponto (.), Na taxa @, sublinhado (_), e dólar ($).
O primeiro caractere deve ser em caracteres alfabéticos; não pode ser um número.
Palavras reservadas não podem ser usadas como um rótulo no programa. Por exemplo, palavras ADD e MOV são as palavras reservadas, uma vez que são mnemônicos de instrução.