// ****************************************************************************
// * Nombre del archivo: practica.s
// * Descripción: Programa que comprueba si un programa tiene los mismos digitos
// * Autor: Roldan Castro Luis Alberto
// * Fecha: 10-04-2025
// * Plataforma: Raspberry Pi OS (64 bits)
// * Asciinema: https://asciinema.org/a/coR27O9ctXBDa4XvJ48IuMC8e
// ****************************************************************************
// ****************************************************************************
// Version en python
//
//def mismos_digitos(numero):
// numero_str = str(numero) # Convertimos el número a cadena
// return all(d == numero_str[0] for d in numero_str) # Verificamos si todos los dígitos son iguales
//
//# Entrada del usuario
//numero = input("Ingrese un número: ")
//
//# Comprobamos y mostramos el resultado
//if mismos_digitos(numero):
// print("Todos los dígitos son iguales.")
//else:
// print("Los dígitos no son iguales.")
// ****************************************************************************
.section .bss
buffer1: .skip 64
buffer2: .skip 64
count1: .skip 10 // conteo de dígitos para el primer número
count2: .skip 10 // conteo de dígitos para el segundo número
.section .data
msg_ingrese1: .ascii "Ingrese el primer numero: "
len_ingrese1 = . - msg_ingrese1
msg_ingrese2: .ascii "Ingrese el segundo numero: "
len_ingrese2 = . - msg_ingrese2
msg_iguales: .ascii "Tienen los mismos digitos\n"
len_iguales = . - msg_iguales
msg_diferentes: .ascii "NO tienen los mismos digitos\n"
len_diferentes = . - msg_diferentes
.section .text
.global _start
_start:
// --- Leer primer número ---
adr x0, msg_ingrese1
mov x1, #len_ingrese1
bl print_msg
mov x0, #0
adr x1, buffer1
mov x2, #64
mov x8, #63
svc #0
mov x9, x0 // longitud
// --- Leer segundo número ---
adr x0, msg_ingrese2
mov x1, #len_ingrese2
bl print_msg
mov x0, #0
adr x1, buffer2
mov x2, #64
mov x8, #63
svc #0
mov x10, x0 // longitud
// --- Limpiar conteos ---
mov x3, #0
adr x4, count1
adr x5, count2
clear_loop:
strb wzr, [x4, x3]
strb wzr, [x5, x3]
add x3, x3, #1
cmp x3, #10
blt clear_loop
// --- Contar dígitos en buffer1 ---
mov x3, #0
adr x1, buffer1
count1_loop:
cmp x3, x9
b.ge count2_start
ldrb w4, [x1, x3]
cmp w4, #'0'
blt count1_next
cmp w4, #'9'
bgt count1_next
sub w4, w4, #'0'
adr x5, count1
ldrb w6, [x5, x4]
add w6, w6, #1
strb w6, [x5, x4]
count1_next:
add x3, x3, #1
b count1_loop
// --- Contar dígitos en buffer2 ---
count2_start:
mov x3, #0
adr x1, buffer2
count2_loop:
cmp x3, x10
b.ge comparar_conteos
ldrb w4, [x1, x3]
cmp w4, #'0'
blt count2_next
cmp w4, #'9'
bgt count2_next
sub w4, w4, #'0'
adr x5, count2
ldrb w6, [x5, x4]
add w6, w6, #1
strb w6, [x5, x4]
count2_next:
add x3, x3, #1
b count2_loop
// --- Comparar conteos ---
comparar_conteos:
mov x3, #0
adr x4, count1
adr x5, count2
cmp_loop:
ldrb w6, [x4, x3]
ldrb w7, [x5, x3]
cmp w6, w7
b.ne diferentes
add x3, x3, #1
cmp x3, #10
blt cmp_loop
// Son iguales
adr x0, msg_iguales
mov x1, #len_iguales
bl print_msg
b salir
diferentes:
adr x0, msg_diferentes
mov x1, #len_diferentes
bl print_msg
b salir
// --- Salida ---
salir:
mov x8, #93
mov x0, #0
svc #0
// --- Función print_msg(x0 = ptr, x1 = len) ---
print_msg:
mov x2, x1
mov x1, x0
mov x0, #1
mov x8, #64
svc #0
ret