GNU/Linux xterm-256color bash 141 views

// ****************************************************************************
// * Nombre del archivo: practica.s
// * Descripción: Imprimir los numeros impares del 7 al 51
// * Autor: Roldan Castro Luis Alberto
// * Fecha: 07-04-2025
// * Plataforma: Raspberry Pi OS (64 bits)
// * Asciinema: https://asciinema.org/a/szLPDnmH82IXW6E74I0qchmha
// ****************************************************************************

// ****************************************************************************
// Version en python
//
//def version_for_paso():
//    print("\nMétodo 1: Bucle for con paso 2")
//    for i in range(7, 52, 2):
//        print(i, end=' ')
//    print("\n")
// ****************************************************************************

.section .data
newline: .asciz "\n"

.section .bss
buffer: .skip 20         // Espacio para convertir número a texto

.section .text
.global _start

_start:
    mov x20, #7          // Número inicial impar

loop:
    cmp x20, #52         // Hasta el 51
    b.ge fin

    mov x0, x20
    bl print_num         // Imprimir el número actual

    // Salto de línea
    ldr x0, =newline
    mov x1, #1
    bl print

    add x20, x20, #2     // Saltar al siguiente impar
    b loop

fin:
    mov x8, #93          // syscall: exit
    mov x0, #0
    svc #0

// -------------------------------
// print_num:
// Convierte el número en x0 a cadena y lo imprime
// -------------------------------
print_num:
    ldr x1, =buffer
    add x1, x1, #19      // Ir al final del buffer
    mov x2, #0           // Contador de dígitos

.num_loop:
    mov x3, #10
    udiv x4, x0, x3
    msub x5, x4, x3, x0  // x5 = x0 - x4*10 = resto

    add x5, x5, #'0'
    sub x1, x1, #1
    strb w5, [x1]
    mov x0, x4
    add x2, x2, #1
    cmp x0, #0
    b.ne .num_loop

    // Imprimir la cadena
    mov x0, #1          // stdout
    mov x8, #64         // syscall write
    mov x2, x2          // longitud
    mov x1, x1          // puntero al número
    svc #0
    ret

// -------------------------------
// print:
// Imprime una cadena (x0 = puntero, x1 = longitud)
// -------------------------------
print:
    mov x2, x1
    mov x1, x0
    mov x0, #1
    mov x8, #64
    svc #0
    ret