Programação
O desenvolvimento de um programa depende da ferramenta utilizada. Para os códigos mostrados nesse texto será utilizado o padrão ARM assembly. Cabe ressaltar que atualmente os códigos em assembly são escritos seguindo o padrão UAL (do inglês, Unified Assembler Language). A seguir são apresentadas algumas convenções do montador.
Definindo o código que será executado: Lista de Instruções
Cada linha de código – que possui uma instrução – segue o seguinte formato:
label mnemônico operando1, operando2, . ; Comentários
label: é utilizado para referenciar o endereço que a instrução está. É opcional, e pode ser utilizado como referência em outras instruções (instruções de desvio). Também pode ser utilizado como referência para o endereço de um dado. É importante ressaltar que o label deve iniciar na primeira coluna da linha (sem espaço).
mnemônico: é utilizado para indicar a instrução. Dependendo da instrução é necessário indicar os operandos.
Para operações de escrita na memória, o primeiro operando indica a origem, isto é, o registrador que contém o dado que será gravado na memória.
Para operações de leitura da memória, o primeiro operando indica o destino, isto é, o registrador que que receberá a informação que está na memória.
Instruções no formato ARM usam o primeiro operando como destino da operação.
Por fim, os comentários do programa são precedidos do símbolo ‘;’.
Exemplos
Alguns exemplos são mostrados a seguir.
No padrão UAL o sufixo S deve ser utilizado nas instruções que alteram o conteúdo do registrador APSR.
Carregar um registrador com um valor constante (#constante) de 8 bits.
MOVS R0,#10 ; R0 = 10
MOVS R0,#0x0A ; R0 = 10
Movimentação de dados entre registradores
MOV R0,R1
Adição entre um registrador e uma constante de 3 bits
ADDS R0,R0,#1 ; R0 = R0 + 1
ADDS R1,R0,#1 ; R1 = R0 + 1
Adição entre um registrador e uma constante de 8 bits
ADDS R0,#10 ; R0 = R0 + 10
Adição entre registradores
ADD R0,R1 ; R0 = R0 + R1
Comparação entre registradores
CMP R0,R1 ;Z flag =1 se R0==R1
Desvio condicional
BEQ label ; salta para o endereço indicado se Z flag = 1
Desvio incondicional
B label ; salta para o endereço indicado
Para conferir todas operações realizadas na execução das instruções, consulte esta referência: The Cortex-M0+ Instruction Set.
Cabe, nesse ponto, apresentar o conteúdo do registrador APSR, em que N, Z, C e V representam, respectivamente: Valor negativo; Valor zero; Carry ou Borrow; Overflow.
Last updated