GNU/Linux xterm-256color bash 225 views

// ****************************************************************************
// * Lenguajes de Interfaz en TECNM Campus ITT
// * Nombre del archivo: practica.s
// * Descripción: Programa que hace la division de dos numeros
// * Autor: [America Fernanda Nevarez de la Cruz]
// * Fecha: [2025-04-10]
// * Plataforma: Raspberry Pi OS (64 bits)
// * Demostración:  [https://asciinema.org/a/URc0NQluyrK5uiNL03gorZ1PL]
// ****************************************************************************

// ****************************************************************************
// * Codigo equivalente en Python
// *def dividir_numeros():
// *    try:
// *        print("// *División de dos números")
// *        num1 = float(input("// *Ingrese el primer número: "))
// *        num2 = float(input("// *Ingrese el segundo número: "))
// *        
// *        if num2 == 0:
// *            print("// *Error: No se puede dividir por cero")
// *        else:
// *            resultado = num1 / num2
// *            print(f"// *Resultado: {num1} ÷ {num2} = {resultado:.2f}")
// *            
// *    except ValueError:
// *        print("// *Error: Ingrese solo números válidos")
// *
// *if __name__ == "__main__":
// *    dividir_numeros()
// ****************************************************************************

.global _start              // Punto de entrada del programa

.section .data
mensaje: .asciz "Division\n"             // Mensaje inicial
resultado_msg: .asciz "42 / 6 = "        // Mensaje antes del resultado
salto: .asciz "\n"                       // Salto de línea

.section .bss
resultado_buffer: .skip 3                // Espacio para el número convertido (2 dígitos + null)

.section .text
_start:
    // Imprimir "Division"
    mov x0, 1
    ldr x1, =mensaje
    mov x2, 9
    mov x8, 64
    svc 0

    // Imprimir "42 / 6 = "
    mov x0, 1
    ldr x1, =resultado_msg
    mov x2, 9
    mov x8, 64
    svc 0

    // Dividir 42 / 6
    mov w0, 42
    mov w1, 6
    udiv w2, w0, w1             // w2 = w0 / w1 = 7

    // Convertir resultado a ASCII
    ldr x3, =resultado_buffer
    mov w10, 10

    // Extraer decenas
    mov w4, w2
    udiv w5, w4, w10
    mul w6, w5, w10
    sub w4, w4, w6

    // Convertir a ASCII
    add w5, w5, '0'
    add w4, w4, '0'
    strb w5, [x3], #1
    strb w4, [x3], #1
    mov w7, 0
    strb w7, [x3]

    // Imprimir resultado
    mov x0, 1
    ldr x1, =resultado_buffer
    mov x2, 2
    mov x8, 64
    svc 0

    // Salto de línea
    mov x0, 1
    ldr x1, =salto
    mov x2, 1
    mov x8, 64
    svc 0

    // Salir
    mov x0, 0
    mov x8, 93
    svc 0