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.
 */

.equ	SYS_EXIT, 1
.equ	SYS_READ, 3
.equ	SYS_WRITE, 4
.equ	STDIN, 0
.equ	STDOUT, 1

.data

.align 4
pedido:
	.string	"Oi, digite seu nome: "
.equ	TAM_PEDIDO, (. - pedido)	// Tamanho da mensagem do pedido.

.align 4
elogio:
	.string	"Bonito nome o seu "
.equ	TAM_ELOG, (. - elogio)		// Tamanho da mensagem de elogio.

.align 4
nome:
	.space	256
.equ	TAM_MAX, (. - nome)		// Tamanho máximo do nome lido.

.text
.global _start

_start:

	LDR	R7, =SYS_WRITE	// Número da chamada do sistema em R7 (escrever).
	LDR	R0, =STDOUT	// Valor do destino em R0 (saída padrão, 1).
	LDR	R1, =pedido	// Endereço da mensagem de pedido em R1.
	LDR	R2, =TAM_PEDIDO	// Número de bytes a serem escritos.
	SVC	0		// Chamar o sistema operacional.

	LDR	R7, =SYS_READ	// Número da chamada do sistema em R7 (ler).
	LDR	R0, =STDIN	// Valor do destino em R0 (entrada padrão, 0).
	LDR	R1, =nome	// Endereço para guardar o nome lido em R1.
	LDR	R2, =TAM_MAX	// Tamanho máximo do nome a ser lido.
	SVC	0		// Chamar o sistema operacional.
	
	PUSH	{R0}		// Guardar o número de bytes lidos na pilha.

	LDR	R7, =SYS_WRITE	// Número da chamada do sistema em R7 (escrever).
	LDR	R0, =STDOUT	// Valor do destino em R0 (saída padrão, 1).
	LDR	R1, =elogio	// Endereço da mensagem de elogio em R1.
	LDR	R2, =TAM_ELOG	// Tamanho da mensagem de elogio em R2.
	SVC	0		// Chamar o sistema operacional.

	LDR	R7, =SYS_WRITE	// Número da chamada do sistema em R7 (escrever).
	LDR	R0, =STDOUT	// Valor do destino em R0 (saída padrão, 1).
	LDR	R1, =nome	// Endereço do nome lido em R1.
	LDR	R2, [SP]	// Número de bytes lidos (ler na pilha).
	SVC	0		// Chamar o sistema operacional.
end:
	LDR	R7, =SYS_EXIT	// Número da chamada do sistema em R7 (terminar).
	POP	{R0}		// Número de bytes lidos (trazer da pilha).
	SVC	0		// Chamar o sistema operacional.

Makefile:

bonito_nome_seu: bonito_nome_seu.o
	ld -o bonito_nome_seu bonito_nome_seu.o
bonito_nome_seu.o: bonito_nome_seu.s
	as -o bonito_nome_seu.o bonito_nome_seu.s
clean:
	rm bonito_nome_seu.o bonito_nome_seu

Construção e execução:

pi@raspberrypi:~/assembly/bonito_nome_seu $ make clean
rm bonito_nome_seu.o bonito_nome_seu
pi@raspberrypi:~/assembly/bonito_nome_seu $ make
as -o bonito_nome_seu.o bonito_nome_seu.s
ld -o bonito_nome_seu bonito_nome_seu.o
pi@raspberrypi:~/assembly/bonito_nome_seu $ ./bonito_nome_seu  ; echo $?
Oi, digite seu nome: Zé Osório Gonçalves
Bonito nome o seu Zé Osório Gonçalves
23

↑ Acima