Assembly

O processador ARM Cortex-A53 tem sido usado no Raspberry Pi 3 desde fevereiro de 2016. A arquitetura Arm é uma arquitetura de carga e armazenamento, onde somente as instruções de carga e armazenamento podem acessar a memória. As instruções de processamento de dados operam apenas no conteúdo dos registradores. Isto corresponde aos processadores RISC típicos, os processadores CISC possuem instruções que operam diretamente na memória. A faixa de endereçamento depende se está sendo usada a arquitetura de 32 ou de 64 bits.

Diferentemente de outras linguagens de programação, para se programar em Assembly é necessário conhecer a arquitetura do processador para o qual o programa está sendo desenvolvido. Também, diferentemente das outras linguagens de programação, o código objeto não é gerado por um compilador, e sim por um montador (Assembler).

Existem algumas sintaxes diferentes para os montadores, como o BAL (Basic Assembly Language), usada em mainframes da IBM, o NASM (Netwide Assembler), usada em arquitetura Intel x86, entre outras. Aqui usamos o montador GNU Assembler (GAS), que usa a sintaxe da AT&T.

Os programas escritos em Assembly não são portáveis, ou seja, não é possível gerar um executável no Debian instalado num PC (CPU Intel®) e executar no Debian instalado no Raspberry Pi (CPU ARM®), a não ser que seja feito um desenvolvimento cruzado, o que não é tratado aqui. Embora o GAS procure manter a mesma sintaxe entre arquiteturas de processadores diferentes, nem mesmo o código fonte pode ser reaproveitado, porque contém instruções específicas para uma determinada arquitetura.

Strings
Hello Again
Programa para escrever “Hello Again”, com o tamanho da mensagem informado numa variável.
Hello Assembly
Programa para escrever “Hello Assembly”, com o tamanho da mensagem calculado pelo montador.
Hello Counter
Programa para escrever “Hello Counter”, com o tamanho da mensagem calculado no corpo do programa.
Hello Procedure
Programa para escrever “Hello Procedure”, com o tamanho da mensagem calculado numa procedure.
Hello Puts
Programa para escrever “Hello Puts” usando a função puts da linguagem C.
Hello Printf
Programa para escrever “Hello Printf” usando a função printf da linguagem C.
Bonito nome o seu (svc)
Programa para ler o nome e mostrar “Bonito nome o seu …” na console usando chamadas ao sistema operacional. Retorna o número de bytes lidos.
Bonito nome o seu (svc + macro)
Programa para ler o nome e mostrar “Bonito nome o seu …” na console usando chamadas ao sistema operacional através de uma macro. Retorna o número de bytes lidos.
Bonito nome o seu (gets e printf)
Programa para ler o nome e mostrar “Bonito nome o seu …” na console usando as funções gets e printf da linguagem C.
Função para escrever uma cadeia de caracteres na saída padrão
Função análoga à função puts da linguagem C, codificada para ser chamada por um programa escrito na linguagem C.
Números inteiros
1 + 2 + 3 + 4 + ⋯ + N
Programa para calcular o somatório dos números naturais de 1 a N. Recebe como argumento o último número da série (N). Mostra o número fornecido e o valor do somatório.
Cálculo do Dígito Verificador Módulo 10 Febraban
Programa para calcular o dígito verificador módulo 10 conforme especificado pela Febraban. Recebe como argumento o número sem o DV na última posição.
Validação do Dígito Verificador Módulo 11 Febraban
Programa para validar o dígito verificador módulo 11 conforme especificado pela Febraban. Recebe como argumento o número com o DV na última posição. Retorna 1 (false) se o dígito verificador estiver incorreto ou 0 (true) se estiver correto.
Transposição de matriz de inteiros
Programa para realizar a transposição de uma matriz de números inteiros. Mostra as matrizes original e transposta na saída padrão.
Multiplicação de uma matriz pela sua transposta
Programa para realizar a multiplicação de uma matriz de números inteiros pela sua transposta. Mostra as matrizes original, transposta e resultado na saída padrão.
Atribuição de valores a uma matriz de Hankel
Função para atribuir valores a uma matriz de Hankel quadrada com a primeira linha na faixa de 1 a N e a última coluna na faixa de N a (2 * N – 1), onde N é a ordem da matriz quadrada.
Números de ponto flutuante
Cálculo do produto de dois números
Função para multiplicar dois números e retornar o resultado desta multiplicação.
Cálculo do determinante de uma matriz quadrada de 2 x 2
Função para calcular o determinante de uma matriz quadrada de 2 x 2 pela fórmula de Leibniz.
Atribuição de valores a uma matriz de Hilbert
Função para atribuir valores a uma matriz de Hilbert.

↑ Acima