Este ejemplo convierte una letra numérica (como '5') ingresada por el usuario a su valor entero (5).
🧠 ¿Qué hace este programa?
-
Muestra un mensaje pidiendo una letra numérica.
-
Lee un carácter desde el teclado.
-
Convierte ese carácter de tipo
char (ASCII) a un número int.
-
Muestra el número resultante en consola.
📦 Sección .data — Datos usados por el programa
msg_ingreso: .string "Ingrese la letra a convertir a entero: "
msg_resultado: .string "El valor entero es: %d\n"
formato_char: .string " %c" // Espacio para ignorar ENTER o espacio previo
buffer: .skip 2 // Reservamos 2 bytes para el carácter (1 + 1 por seguridad)
-
msg_ingreso: Cadena que se muestra para pedir el carácter.
-
msg_resultado: Cadena con formato para imprimir el número entero.
-
formato_char: Cadena usada por scanf. El espacio antes de %c es importante, evita que se lea un ENTER anterior.
-
buffer: Espacio reservado en memoria para guardar el carácter ingresado.
🧾 Sección .text — Código ejecutable
.global main
.align 2
-
main: Punto de entrada del programa.
-
.align 2: Alinea el código a una dirección múltiplo de 4 bytes (recomendado por rendimiento).
🔧 Prólogo — Preparar el Stack Frame
main:
stp x29, x30, [sp, -16]! // Guardar FP (x29) y LR (x30)
mov x29, sp // Nuevo Frame Pointer
🖨️ Mostrar mensaje
adr x0, msg_ingreso // Dirección del string en x0
bl printf
-
adr coloca la dirección del mensaje en x0 (primer parámetro de printf).
-
Se llama a
printf para mostrarlo.
⌨️ Leer el carácter
adr x0, formato_char // "%c"
adr x1, buffer // Donde guardar el carácter
bl scanf
-
scanf("%c", buffer) para leer un único carácter y guardarlo en buffer.
🔢 Convertir ASCII a entero
adr x0, buffer
ldrb w0, [x0] // Lee el byte del buffer (carácter)
sub w0, w0, #48 // ASCII '0' = 48 → '5' - 48 = 5
-
ldrb: carga 1 byte (char) como entero sin signo.
-
Se le resta 48 (
'0' en ASCII) para obtener el valor real del dígito.
📤 Mostrar el resultado
mov w1, w0 // Mover resultado a w1 (segundo argumento de printf)
adr x0, msg_resultado
bl printf
-
w1: contiene el valor entero.
-
x0: contiene el string de formato.
-
Llama a
printf("El valor entero es: %d\n", valor);
🧹 Epílogo — Restaurar stack y salir
mov w0, #0 // Código de salida
ldp x29, x30, [sp], 16 // Restaurar FP y LR
ret // Retornar a Linux
🧪 Ejemplo de uso
./convertir
Ingrese la letra a convertir a entero: 7
El valor entero es: 7
❗ Nota importante
Este programa solo funciona correctamente con dígitos del 0 al 9. Si el usuario mete una letra como 'A', obtendrás un valor erróneo ('A' = 65 → 65 - 48 = 17).