Este programa en ARM64 para Raspberry Pi OS convierte un número entero del 0 al 9 ingresado por el usuario a su carácter ASCII equivalente, y luego lo imprime como un carácter. Vamos a desglosarlo paso a paso en español.
🧠 ¿Qué hace este programa?
Solicita un número entero del 0 al 9.
Lo convierte a su equivalente ASCII.
Imprime ese carácter (por ejemplo, si el usuario ingresa 5, el programa imprime '5').
🗂️ .data — Segmento de datos
msg_ingreso: .string "Ingrese un número entero (0-9): "
msg_resultado: .string "El carácter ASCII es: %c\n"
formato_int: .string "%d"
numero: .word 0
msg_ingreso: mensaje para solicitar un número.
msg_resultado: mensaje con formato para imprimir un carácter (%c).
formato_int: formato que usa scanf para leer un entero.
numero: almacena el valor ingresado por el usuario.
🧾 .text — Lógica del programa
🔧 Prólogo
stp x29, x30, [sp, -16]!
mov x29, sp
Establece el stack frame y guarda registros necesarios (x29, x30).
⌨️ Solicitar número entero
adr x0, msg_ingreso
bl printf
Imprime en pantalla: "Ingrese un número entero (0-9):"
📥 Leer número
adr x0, formato_int
adr x1, numero
bl scanf
Lee un número entero con scanf("%d", &numero).
🔢 Convertir entero a carácter ASCII
adr x0, numero
ldr w0, [x0] // w0 = número ingresado
add w1, w0, #48 // w1 = número + 48 → ASCII de '0' = 48
Ejemplo: si w0 = 5, entonces w1 = 53, que es el ASCII de '5'.
🖨️ Mostrar el carácter
adr x0, msg_resultado
bl printf
w1 se pasa automáticamente como segundo argumento a printf.
Se imprime: "El carácter ASCII es: 5" si se ingresó 5.
🧹 Epílogo y salida
mov w0, #0
ldp x29, x30, [sp], 16
ret
Restaura registros y retorna de la función main.
🧪 Ejemplo de ejecución
$ ./ascii_out
Ingrese un número entero (0-9): 7
El carácter ASCII es: 7
🧠 ¿Qué técnica usa?
Este programa aplica una conversión básica de número a carácter ASCII usando la conocida fórmula:
[
\text{ASCII de dígito} = \text{valor numérico} + 48
]