GNU/Linux xterm-256color bash 141 views

// ****************************************************************************
// * Lenguajes de Interfaz en TECNM Campus ITT
// * Nombre del archivo: practica.s
// * Descripción: Programa que dibuja un cohete a partir de una figura base
// * Autor: [America Fernanda Nevarez de la Cruz]
// * Fecha: [2025-04-08]
// * Plataforma: Raspberry Pi OS (64 bits)
// * Demostración:  [https://asciinema.org/a/ngaHoQcIdC5VrGBcaP4ND1uft]
// ****************************************************************************

// ****************************************************************************
// * Codigo equivalente en C
// *#include <stdio.h>
// *
// *void print_line(const char* line) {
// *    // Equivalente a print_line en ensamblador
// *    printf("%s", line);
// *}
// *
// *int main() {
// *    // Equivalente a _start
// *    print_line("   /\\   \n");  // line1
// *    print_line("  /  \\  \n");  // line2
// *    print_line(" /____\\ \n");  // line3
// *    print_line(" |    | \n");  // line4
// *    print_line(" | [] | \n");  // line5
// *    print_line(" |____| \n");  // line6
// *    
// *    return 0;  // Equivalente a svc #0 exit
// *}
// ****************************************************************************
.section .data
line1:  .ascii "   /\\   \n"
line2:  .ascii "  /  \\  \n"
line3:  .ascii " /____\\ \n"
line4:  .ascii " |    | \n"
line5:  .ascii " | [] | \n"
line6:  .ascii " |____| \n"

len1 = . - line1
len2 = . - line2
len3 = . - line3
len4 = . - line4
len5 = . - line5
len6 = . - line6

.section .text
.global _start

_start:
    ldr x0, =line1
    mov x1, #len1
    bl print_line

    ldr x0, =line2
    mov x1, #len2
    bl print_line

    ldr x0, =line3
    mov x1, #len3
    bl print_line

    ldr x0, =line4
    mov x1, #len4
    bl print_line

    ldr x0, =line5
    mov x1, #len5
    bl print_line

    ldr x0, =line6
    mov x1, #len6
    bl print_line

    // Salida del programa
    mov x8, #93
    mov x0, #0
    svc #0

// ---------- Función para imprimir ----------

print_line:
    mov x2, x1      // longitud
    mov x1, x0      // puntero a la línea
    mov x0, #1      // stdout
    mov x8, #64     // syscall write
    svc #0
    ret