GNU/Linux xterm-256color bash 191 views

**
Nombre: recrat.s
Autor: Karla Itzel Vázquez Cruz
Fecha: 10-04-2025
Descripción: Area del rectangulo
Plataforma: Raspberry Pi OS 64-bit
Asciinema: recrat.s


Versión en C:

#include <stdio.h>
int main() {
    int base, altura;
    printf("Introduce la base: ");
    scanf("%d", &base);
    printf("Introduce la altura: ");
    scanf("%d", &altura);
    int area = base * altura;
    printf("El área del rectángulo (base=%d, altura=%d) es: %d\n", base, altura, area);
    return 0;
}

Versión en ARM64 RaspbianOS Linux:

.equ STDIN, 0
.equ STDOUT, 1
.equ READ, 63
.equ WRITE, 64
.equ EXIT, 93

.section .bss
base_input: .skip 8
altura_input: .skip 8
area_str: .skip 4

.section .data
prompt_base: .ascii "Introduce la base: "
len_prompt_base = . - prompt_base

prompt_altura: .ascii "Introduce la altura: "
len_prompt_altura = . - prompt_altura

msg_resultado: .ascii "El área del rectángulo es: "
len_msg_resultado = . - msg_resultado

newline: .ascii "\n"
len_newline = . - newline

.section .text
.global _start

_start:

    // ---- Pedir base ----
    mov x8, #WRITE
    mov x0, #STDOUT
    adr x1, prompt_base
    mov x2, #len_prompt_base
    svc 0

    // Leer base
    mov x8, #READ
    mov x0, #STDIN
    adr x1, base_input
    mov x2, #8
    svc 0

    // ---- Pedir altura ----
    mov x8, #WRITE
    mov x0, #STDOUT
    adr x1, prompt_altura
    mov x2, #len_prompt_altura
    svc 0

    // Leer altura
    mov x8, #READ
    mov x0, #STDIN
    adr x1, altura_input
    mov x2, #8
    svc 0

    // ---- Convertir base ASCII a entero ----
    adr x0, base_input
    bl ascii_to_int
    mov x20, x0    // Guardar base

    // ---- Convertir altura ASCII a entero ----
    adr x0, altura_input
    bl ascii_to_int
    mov x21, x0    // Guardar altura

    // ---- Calcular área = base × altura ----
    mul x22, x20, x21

    // ---- Mostrar mensaje ----
    mov x8, #WRITE
    mov x0, #STDOUT
    adr x1, msg_resultado
    mov x2, #len_msg_resultado
    svc 0

    // ---- Convertir área a ASCII ----
    mov x0, x22
    adr x1, area_str
    bl int_to_ascii

    // Mostrar área
    mov x8, #WRITE
    mov x0, #STDOUT
    adr x1, area_str
    mov x2, #4
    svc 0

    // ---- Salto de línea ----
    mov x8, #WRITE
    mov x0, #STDOUT
    adr x1, newline
    mov x2, #len_newline
    svc 0

    // ---- Salir ----
    mov x8, #EXIT
    mov x0, #0
    svc 0

// --------------------------------------------------------------------
// Rutina: ascii_to_int
// Convierte un string ASCII decimal a entero
// Entrada: x0 -> dirección del buffer ASCII
// Salida: x0 = número entero
ascii_to_int:
    mov x1, #0          // acumulador
.next_char:
    ldrb w2, [x0], #1   // leer byte y avanzar
    cmp w2, #'0'
    blt .done
    cmp w2, #'9'
    bgt .done

    sub x2, x2, #'0'    // convertir a número
    mov x3, #10
    mul x1, x1, x3
    add x1, x1, x2
    b .next_char
.done:
    mov x0, x1
    ret

// --------------------------------------------------------------------
// Rutina: int_to_ascii
// Convierte entero en rango 0–9999 a ASCII
// Entrada: x0 = entero, x1 = buffer destino
int_to_ascii:
    mov x2, #1000
    udiv x3, x0, x2
    msub x0, x3, x2, x0
    add x3, x3, #'0'
    strb w3, [x1]

    mov x2, #100
    udiv x3, x0, x2
    msub x0, x3, x2, x0
    add x3, x3, #'0'
    strb w3, [x1, #1]

    mov x2, #10
    udiv x3, x0, x2
    msub x0, x3, x2, x0
    add x3, x3, #'0'
    strb w3, [x1, #2]

    add x0, x0, #'0'
    strb w0, [x1, #3]
    ret

More recordings by Itzel

Browse all

PARES 2:38

by Itzel

REVERSA DE UNA CADENA 8:22

by Itzel

OCT 1:10

by Itzel