GNU/Linux xterm-256color bash 207 views

**
Nombre: circulo.s
Autor: Karla Itzel Vázquez Cruz
Fecha: 08-04-2025
Descripción: Calcula el área de un círculo con radio fijo.
Plataforma: Raspberry Pi OS 64-bit
Asciinema: circulo.s
**

Versión en ARM64 RaspbianOS Linux:

.global _start

.section .rodata
msg:    .asciz "Área del círculo: "
nl:     .asciz "\n"
pi:     .float 3.14159265
radio:  .float 9.0

.section .bss
    .lcomm buffer, 32  // Buffer para el número convertido a string

.section .text
_start:
    // Cargar radio
    ldr     x0, =radio
    ldr     s0, [x0]

    // Calcular radio * radio → s1
    fmul    s1, s0, s0

    // Cargar pi → s2
    ldr     x1, =pi
    ldr     s2, [x1]

    // Calcular área = pi * r² → s3
    fmul    s3, s1, s2

    // Convertir float a entero (ej: 254.469620 → 254)
    fcvtzs  w4, s3        // s3 → entero en w4

    // Convertir entero a string
    ldr     x5, =buffer   // Puntero al buffer
    mov     x6, x5        // Puntero en movimiento
    mov     w7, w4        // Copia del número

    // Convertir w7 a caracteres (mínimo una vez)
conv_loop:
    mov     w9, #10
    udiv    w8, w7, w9     // w8 = w7 / 10
    msub    w10, w8, w9, w7 // w10 = w7 - (w8 * 10) → residuo

    add     w10, w10, #'0' // convertir a ASCII
    strb    w10, [x6], #1  // guardar y avanzar buffer
    mov     w7, w8         // preparar siguiente dígito
    cbnz    w7, conv_loop

    // Ahora invertir el string (está al revés)
    sub     x6, x6, #1     // x6 apunta al último char válido
    ldr     x5, =buffer
rev_loop:
    cmp     x5, x6
    bge     print_msg
    ldrb    w7, [x5]
    ldrb    w8, [x6]
    strb    w8, [x5]
    strb    w7, [x6]
    add     x5, x5, #1
    sub     x6, x6, #1
    b       rev_loop

// --------------------
// Imprimir mensaje
print_msg:
    ldr     x0, =1          // stdout
    ldr     x1, =msg
    mov     x2, #18         // longitud del mensaje
    mov     x8, #64         // syscall write
    svc     #0

// Imprimir número
    ldr     x1, =buffer
    bl      strlen
    mov     x2, x0          // longitud
    mov     x0, #1
    mov     x8, #64
    svc     #0

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

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

// --------------------
// strlen: calcula longitud de string null-terminated
// Entrada: x1 = dirección del string
// Salida: x0 = longitud
strlen:
    mov     x0, #0
.strlen_loop:
    ldrb    w2, [x1, x0]
    cbz     w2, .done
    add     x0, x0, #1
    b       .strlen_loop
.done:
    ret

More recordings by Itzel

Browse all

MAYUSCULAS A MINISCULAS 1:02

by Itzel

BINARIO A OCTAL 1:44

by Itzel

OpenWeatherDashing 2:43

by Itzel

HOLA 3 VECES 1:37

by Itzel