**
Nombre: multi.s
Autor: Karla Itzel Vázquez Cruz
Fecha: 07-04-2025
Descripción: Verifica si un numero es multiplo de 5
Asciinema: multi.s
Versión en C:
using System;
class Programa {
static void Main() {
Console.Write("Ingresa un número: ");
int n = int.Parse(Console.ReadLine());
if (n % 5 == 0)
Console.WriteLine("Es múltiplo de 5");
else
Console.WriteLine("NO es múltiplo de 5");
}
}
Código en ARM64 RaspbianOS Linux:
.section .data
prompt: .asciz "Ingresa un número: "
buffer: .skip 20 // Espacio para almacenar el número como cadena
esMultiplo: .asciz "Es múltiplo de 5\n"
noMultiplo: .asciz "NO es múltiplo de 5\n"
.section .text
.global _start
_start:
// Mostrar mensaje "Ingresa un número: "
ldr x0, =prompt
mov x1, x0
mov x2, #19 // Longitud del mensaje
mov x0, #1 // stdout
mov x8, #64 // syscall write
svc #0
// Leer cadena desde stdin
ldr x1, =buffer // Dirección donde guardar entrada
mov x2, #20 // Tamaño máximo
mov x0, #0 // stdin
mov x8, #63 // syscall read
svc #0
// Convertir de cadena a entero (atoi)
ldr x1, =buffer
mov x2, #0 // x2 será nuestro acumulador
atoi_loop:
ldrb w3, [x1], #1 // Leer siguiente byte y avanzar
cmp w3, #'0'
blt end_atoi
cmp w3, #'9'
bgt end_atoi
sub w3, w3, #'0' // Convertir ASCII -> entero
mov x5, #10
mul x2, x2, x5 // x2 = x2 * 10
add x2, x2, x3 // x2 = x2 + dígito actual
b atoi_loop
end_atoi:
// Calcular x2 % 5
mov x1, #5
udiv x3, x2, x1 // x3 = x2 / 5
msub x4, x3, x1, x2 // x4 = x2 - (x3 * 5) → x4 = x2 % 5
cmp x4, #0
b.eq imprimir_multiplo
// NO es múltiplo
ldr x1, =noMultiplo
mov x2, #21
b imprimir
imprimir_multiplo:
ldr x1, =esMultiplo
mov x2, #19
imprimir:
mov x0, #1
mov x8, #64
svc #0
salir:
mov x0, #0
mov x8, #93
svc #0