// ****************************************************************************
// * Lenguajes de Interfaz en TECNM Campus ITT
// * Nombre del archivo: practica.s
// * Descripción: Ciclo de iteraciones con incremento personlizado de 2
// * Autor: [America Fernanda Nevarez de la Cruz]
// * Fecha: [2025-04-08]
// * Plataforma: Raspberry Pi OS (64 bits)
// * Demostración: [https://asciinema.org/a/3pge5jd2Kamm0LDKCFMU1EsMC]
// ****************************************************************************
// ****************************************************************************
// * Codigo equivalente en python
// *def print_number(num):
// * """Función equivalente a print_int: convierte entero a string y lo imprime"""
// * print(num)
// *
// *def main():
// * # Equivalente a _start
// * print("Ciclo de 10 iteraciones:") # Equivalente a print_msg
// *
// * i = 1 # x20 = contador (inicializado en 1)
// *
// * while i < 11: # Equivalente al loop (cmp x20, #11 / bge end_program)
// * print_number(i) # Equivalente a mov x0, x20 / bl print_int
// * i += 1 # Equivalente a add x20, x20, #1
// *
// * print() # Equivalente al salto de línea final
// *
// *if __name__ == "__main__":
// * main()
// ****************************************************************************
.section .data
msg: .ascii "Ciclo con incremento de 2:\n"
len_msg = . - msg
newline: .ascii "\n"
.section .bss
num_buffer: .skip 16
.section .text
.global _start
_start:
// Imprimir mensaje
ldr x0, =msg
mov x1, #len_msg
bl print_msg
mov x20, #1 // Contador i = 1
loop:
cmp x20, #11 // ¿i > 10?
bge end_program
mov x0, x20 // Copiar i en x0 para imprimir
bl print_int
add x20, x20, #2 // i += 2
b loop
end_program:
// Salto de línea final
ldr x1, =newline
mov x2, #1
mov x0, #1
mov x8, #64
svc #0
// Salir
mov x8, #93
mov x0, #0
svc #0
// ---------------- Funciones ----------------
print_msg:
mov x2, x1
mov x1, x0
mov x0, #1
mov x8, #64
svc #0
ret
print_int:
ldr x1, =num_buffer
add x1, x1, #15
mov x2, #10
mov x3, x0
mov x4, x1
convert:
udiv x5, x3, x2
msub x6, x5, x2, x3
add x6, x6, #'0'
sub x1, x1, #1
strb w6, [x1]
mov x3, x5
cbz x3, print_it
b convert
print_it:
sub x2, x4, x1
mov x0, #1
mov x8, #64
mov x1, x1
svc #0
// Salto de línea
ldr x1, =newline
mov x2, #1
mov x0, #1
mov x8, #64
svc #0
ret