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