GNU/Linux xterm-256color bash 142 views

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