GNU/Linux xterm bash 160 views

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?

  1. Solicita un número entero del 0 al 9.
  2. Lo convierte a su equivalente ASCII.
  3. 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 ]

Ya que en ASCII:

  • '0' = 48
  • '1' = 49
  • '9' = 57