// ****************************************************************************
// * Nombre del archivo: practica.s
// * Descripción: Imprimir un patron
// * Autor: Roldan Castro Luis Alberto
// * Fecha: 07-04-2025
// * Plataforma: Raspberry Pi OS (64 bits)
// * Asciinema: https://asciinema.org/a/dz3az769seg7cyiBkFMqFpbUV
// ****************************************************************************
// ****************************************************************************
// * Codigo equivalente en C
// *
// * void print_line(char *line) {
// * printf("%s\n", line);
// * }
// * int main() {
// * char line1[] = "1 0 0 1 0 1";
// * char line2[] = "1 0 0 0 0 1";
// * char line3[] = "0 1 1 1 0 1";
// * print_line(line1);
// * print_line(line2);
// * print_line(line3);
// * return 0;
// * }
// ****************************************************************************
.section .data
line1: .asciz "1 0 0 1 0 1"
line2: .asciz "1 0 0 0 0 1"
line3: .asciz "0 1 1 1 0 1"
newline: .asciz "\n" // Nueva línea para cada impresión
.section .text
.global _start
_start:
// Imprimir la primera línea con salto de línea
ldr x0, =line1 // Dirección de la línea 1
mov x1, #9 // Longitud de la línea (9 caracteres)
bl print // Llamada a la función print
ldr x0, =newline // Dirección de la nueva línea
mov x1, #1 // Longitud de la nueva línea
bl print // Imprimir salto de línea
// Imprimir la segunda línea con salto de línea
ldr x0, =line2 // Dirección de la línea 2
mov x1, #9 // Longitud de la línea (9 caracteres)
bl print // Llamada a la función print
ldr x0, =newline // Dirección de la nueva línea
mov x1, #1 // Longitud de la nueva línea
bl print // Imprimir salto de línea
// Imprimir la tercera línea con salto de línea
ldr x0, =line3 // Dirección de la línea 3
mov x1, #9 // Longitud de la línea (9 caracteres)
bl print // Llamada a la función print
ldr x0, =newline // Dirección de la nueva línea
mov x1, #1 // Longitud de la nueva línea
bl print // Imprimir salto de línea
// Terminar el programa
mov x8, #93 // Syscall para salir
mov x0, #0 // Código de salida 0
svc #0 // Llamada al sistema
// Función print: (x0 = ptr, x1 = len)
print:
mov x2, x1 // Longitud
mov x1, x0 // Dirección del texto
mov x0, #1 // File descriptor (stdout)
mov x8, #64 // Syscall número 64 (write)
svc #0 // Llamada al sistema
ret