/*
Autor: Victor Manuel Madrid Lugo
Fecha: 09/04/2025
Descripción: Contador de 0 a 9 usando un bucle
Demostración: [https://asciinema.org/a/5j0TYAnvYiHFMHSACGMc5foP7]
Equivalente en Python:
for i in range(10):
print(i)
*/
// Contador de 0 a 9 en ensamblador ARM64
// Archivo: contador.s
// Contador cíclico de 0 a 9 en ensamblador ARM64
// Archivo: contador_ciclico.s
.global _start // Punto de entrada global
.data
msg: .ascii "Contador: "
digit: .ascii "0\n" // Dígito a mostrar, seguido de salto de línea
len = . - msg // Longitud del mensaje completo
.text
_start:
// Inicializar contador en x19
mov x19, #0 // x19 = 0 (nuestro contador)
loop:
// Imprime "Contador: X"
mov x0, #1 // fd = 1 (stdout)
adr x1, msg // buffer = dirección del mensaje
mov x2, #len // longitud = len
mov x8, #64 // syscall = write (64)
svc #0 // llamada al sistema
// Convierte el dígito actual a ASCII
add x20, x19, #48 // Convierte el dígito a ASCII (0 = 48 en ASCII)
// Actualiza el dígito en memoria
adr x21, digit // Carga la dirección de 'digit'
strb w20, [x21] // Almacena el byte del dígito ASCII en la dirección
// Imprime el dígito con salto de línea
mov x0, #1 // fd = 1 (stdout)
adr x1, digit // buffer = dirección del dígito
mov x2, #2 // longitud = 2 (dígito + salto de línea)
mov x8, #64 // syscall = write (64)
svc #0 // llamada al sistema
// Incrementa el contador
add x19, x19, #1 // x19 = x19 + 1
// Si el contador llega a 10, reiniciarlo a 0
cmp x19, #10 // Compara x19 con 10
b.ne skip_reset // Si no es igual a 10, salta la reinicialización
mov x19, #0 // Si es 10, reinicia a 0
skip_reset:
// Pequeña pausa (con valor más pequeño)
mov x0, #0xFFFFF // Valor para un bucle de retardo (más pequeño)
delay:
subs x0, x0, #1 // Decrementa el contador de retardo
b.ne delay // Continúa mientras no sea cero
// Siempre vuelve al inicio del bucle (bucle infinito)
b loop // Salto incondicional a 'loop'
// Este código nunca se ejecutará debido al bucle infinito
mov x0, #0 // código de salida = 0 (éxito)
mov x8, #93 // syscall = exit (93)
svc #0 // llamada al sistema