GNU/Linux xterm-256color bash 144 views

// ****************************************************************************
// * Nombre del archivo: practica.s
// * Descripción: Dibujo de un corazon
// * Autor: Roldan Castro Luis Alberto
// * Fecha: 07-04-2025
// * Plataforma: Raspberry Pi OS (64 bits)
// * Asciinema: https://asciinema.org/a/D8oHsLx3XxGPWDPkTwmZt5Dwn
// ****************************************************************************

// ****************************************************************************
//Codigo equivalente en SWIFT
//
//import Foundation
//
// Declaramos un arreglo de cadenas, cada una representa una línea del corazón
//let corazon = [
//    "  **   **",
//    " **** ****",
//    " *********",
//    "  *******",
//    "   *****",
//   "    ***",
//    "     *"
//]
//
// Recorremos cada línea del arreglo y la imprimimos en consola
//for linea in corazon {
//    print(linea)
//}
//
// Dejamos una línea vacía al final
//print("")
// ****************************************************************************

// Sección de datos: aquí guardamos las cadenas de texto (las líneas del corazón)
.section .data

// Línea 1 del corazón en forma de texto
line1: .ascii "  **   **\n"
len1 = . - line1   // Calculamos la longitud de la línea (desde el inicio hasta el final)

// Línea 2 del corazón
line2: .ascii " **** ****\n"
len2 = . - line2

// Línea 3 del corazón
line3: .ascii " *********\n"
len3 = . - line3

// Línea 4 del corazón
line4: .ascii "  *******\n"
len4 = . - line4

// Línea 5 del corazón
line5: .ascii "   *****\n"
len5 = . - line5

// Línea 6 del corazón
line6: .ascii "    ***\n"
len6 = . - line6

// Línea 7 del corazón
line7: .ascii "     *\n"
len7 = . - line7

// Línea 8 vacía para dejar un espacio después del corazón
line8: .ascii "\n"
len8 = . - line8

// Sección de texto (código ejecutable)
.section .text
.global _start  // Punto de entrada principal del programa

_start:
    // Mostrar la línea 1
    ldr x0, =line1     // Cargar la dirección de la línea en x0
    mov x1, #len1      // Longitud de la línea en x1
    bl print_msg       // Llamar a la función print_msg

    // Mostrar la línea 2
    ldr x0, =line2
    mov x1, #len2
    bl print_msg

    // Mostrar la línea 3
    ldr x0, =line3
    mov x1, #len3
    bl print_msg

    // Mostrar la línea 4
    ldr x0, =line4
    mov x1, #len4
    bl print_msg

    // Mostrar la línea 5
    ldr x0, =line5
    mov x1, #len5
    bl print_msg

    // Mostrar la línea 6
    ldr x0, =line6
    mov x1, #len6
    bl print_msg

    // Mostrar la línea 7
    ldr x0, =line7
    mov x1, #len7
    bl print_msg

    // Mostrar la línea vacía (espacio final)
    ldr x0, =line8
    mov x1, #len8
    bl print_msg

    // Terminar el programa usando syscall exit
    mov x8, #93       // syscall 93 = exit
    mov x0, #0        // Código de salida 0 (éxito)
    svc #0            // Llamar al sistema operativo

// Función para imprimir un mensaje en pantalla (x0 = dirección, x1 = longitud)
print_msg:
    mov x2, x1        // Longitud del mensaje en x2
    mov x1, x0        // Dirección del mensaje en x1
    mov x0, #1        // Descriptor 1 = salida estándar (stdout)
    mov x8, #64       // syscall 64 = write
    svc #0            // Llamar al sistema operativo para escribir
    ret               // Regresar al programa principal