Hello Assembly

/**
 * @file    hello_assembly.s
 * @author  Halley Pacheco de Oliveira
 * @version 1.0
 * 
 * @section DESCRIPTION
 *
 * Programa para escrever "Hello Assembly" na saída padrão.
 *
 * Tamanho da mensagem calculado pelo montador.
 *
 * @output "Hello Assembly"
 * @return Tamanho da mensagem
 */


// Raspberry Pi 3 Modelo A+
.cpu	cortex-a53
.fpu	neon-fp-armv8
.syntax	unified 				// Sintaxe moderna

// Equates

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

// Dados

.data

.align
mensagem:	.ascii	"Hello Assembly\n"	// Mensagem a ser exibida
.equ		TAMANHO, (. - mensagem)		// Tamanho da mensagem

// Código

.text
.global _start

_start:

	MOV	R7, #SYS_WRITE	// Número da chamada do sistema em R7 (escrever).
	MOV	R0, #STDOUT	// Identificador do fluxo em R0.
	LDR	R1, =mensagem	// Endereço da mensagem em R1
	LDR	R2, =TAMANHO	// Tamanho da mensagem em R2.
	SVC	0		// Chamar o sistema operacional.

end:

	MOV	R7, #1		// Número da chamada do sistema em R7 (terminar).
	LDR	R0, =TAMANHO	// Código de retorno = Tamanho da mensagem
	SVC	0		// Chamar o sistema operacional.

Makefile:

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

Construção e execução:

pi@raspberrypi:~/assembly/hello_assembly $ make clean
rm hello_assembly.o hello_assembly
pi@raspberrypi:~/assembly/hello_assembly $ make
as -o hello_assembly.o hello_assembly.s
ld -o hello_assembly hello_assembly.o
pi@raspberrypi:~/assembly/hello_assembly $ ./hello_assembly ; echo $?
Hello Assembly
15

↑ Acima