R a s p b e r e d

Usando o Raspberry Pi

Bonito nome o seu (gets e printf)

Programa para ler o nome e mostrar “Bonito nome o seu {nome lido}”

Chama as funções “gets” e “printf” da linguagem C para ler o nome na entrada padrão e mostrar o texto na saída padrão

/**
 * @file    bonito_nome_gets_printf.s
 * @author  Halley Pacheco de Oliveira
 * @version 1.0
 * 
 * @section DESCRIPTION
 *
 * Programa para ler o nome e mostrar "Bonito nome o seu {nome lido}"
 * 
 * Chama as funções
 *     "char *gets(char *str)"
 *     "int printf(const char *format, ...)"
 * da linguagem C para ler o nome na entrada
 * padrão e mostrar o texto na saída padrão
 *
 * @output "Bonito nome o seu {nome lido}"
 * @return Tamanho da mensagem, ou EOF se der erro.
 */

// Raspberry Pi 3 Modelo A+
.cpu    cortex-a53
.fpu    neon-fp-armv8
.syntax unified         // Sintaxe moderna (UAL=Unified Assembler Language)

// Definição

.set    SYS_EXIT, 1

// Dados

.data

.align
pedido:
        .string "Oi, digite o seu nome: "

.align
formato:
        .string "Bonito nome o seu %s\n"

.align
nome:
        .space  256

// Código

.text
.global main
.global printf                  // Função printf da linguagem C.
.global gets                    // Função gets da linguagem C.

main:
        LDR     R0, =pedido     // R0 -> Texto contendo o pedido para digitar o nome.
        BL      printf
        LDR     R0, =nome       // R0 -> Onde o nome lido vai ser armazenado.
        BL      gets
        LDR     R0, =formato    // R0 -> Texto com formatação.
        LDR     R1, =nome       // R1 -> Nome lido = Argumento para a formatação.
        BL      printf
end:
        LDR     R7, =SYS_EXIT   // Número da chamada do sistema em R7 (terminar).
        SVC     0               // Chamar o sistema operacional.

Makefile:

bonito_nome_gets_printf: bonito_nome_gets_printf.o
        gcc -o bonito_nome_gets_printf bonito_nome_gets_printf.o
bonito_nome_gets_printf.o: bonito_nome_gets_printf.s
        as -o bonito_nome_gets_printf.o bonito_nome_gets_printf.s
clean:
        rm bonito_nome_gets_printf.o bonito_nome_gets_printf

Construção e execução:

pi@raspberrypi:~/raspbered/assembly/bonito_nome_gets_printf $ make clean
rm bonito_nome_gets_printf.o bonito_nome_gets_printf

pi@raspberrypi:~/raspbered/assembly/bonito_nome_gets_printf $ make
as -o bonito_nome_gets_printf.o bonito_nome_gets_printf.s
gcc -o bonito_nome_gets_printf bonito_nome_gets_printf.o
bonito_nome_gets_printf.o: In function `main':
(.text+0xc): warning: the `gets' function is dangerous and should not be used.

pi@raspberrypi:~/raspbered/assembly/bonito_nome_gets_printf $ ./bonito_nome_gets_printf ; echo $?
Oi, digite o seu nome: Zé Osório Gonçalves
Bonito nome o seu Zé Osório Gonçalves
41
Última atualização em 2019-07-27
Publicado em 2019-07-27