GNU/Linux xterm-256color bash 174 views

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


Versión en C:

float area_triangulo(float base, float altura) {
    return (base * altura) / 2;
}

Versión en ARM64 RaspbianOS Linux:

.equ STDOUT, 1          // Descriptor de archivo para salida estándar
.equ WRITE, 64          // Número de syscall para write
.equ EXIT, 93           // Número de syscall para exit

// Valores del triángulo (base y altura)
.equ BASE, 12           // Base del triángulo
.equ ALTURA, 6          // Altura del triángulo

// Datos para los mensajes
.section .data
mensaje:
    .ascii "El área del triángulo (base="
    .equ len_mensaje, . - mensaje
base_str:
    .ascii "x"
    .equ len_base_str, . - base_str
    .ascii ", altura="
altura_str:
    .ascii "x"
    .equ len_altura_str, . - altura_str
    .ascii ") es: "
area_str:
    .ascii "x\n"
    .equ len_area_str, . - area_str

.section .text
.global _start

_start:
    // Calcular el área (base × altura / 2)
    mov x0, #BASE       // Cargar base en x0
    mov x1, #ALTURA     // Cargar altura en x1
    mul x2, x0, x1      // x2 = base × altura
    lsr x2, x2, #1      // x2 = x2 / 2 (área)

    // Convertir valores a strings ASCII
    mov x0, #BASE
    adr x1, base_str
    bl int_to_ascii

    mov x0, #ALTURA
    adr x1, altura_str
    bl int_to_ascii

    mov x0, x2          // Área calculada
    adr x1, area_str
    bl int_to_ascii

    // Escribir el mensaje completo
    mov x8, #WRITE      // Syscall write
    mov x0, #STDOUT     // Descriptor de archivo (stdout)
    adr x1, mensaje     // Puntero al mensaje
    mov x2, #len_mensaje // Longitud
    svc 0

    // Escribir la base
    mov x8, #WRITE
    mov x0, #STDOUT
    adr x1, base_str
    mov x2, #len_base_str
    svc 0

    // Escribir ", altura="
    adr x1, mensaje + len_mensaje
    mov x2, #10          // Longitud de ", altura="
    svc 0

    // Escribir la altura
    mov x8, #WRITE
    mov x0, #STDOUT
    adr x1, altura_str
    mov x2, #len_altura_str
    svc 0

    // Escribir ") es: "
    adr x1, mensaje + len_mensaje + 9 + len_altura_str
    mov x2, #7          // Longitud de ") es: "
    svc 0

    // Escribir el área
    mov x8, #WRITE
    mov x0, #STDOUT
    adr x1, area_str
    mov x2, #len_area_str
    svc 0

    // Salir del programa
    mov x8, #EXIT       // Syscall exit
    mov x0, #0          // Código de salida 0 (éxito)
    svc 0

// Rutina para convertir entero (0-99) a string ASCII de 2 dígitos
// Entrada: x0 = número, x1 = puntero a buffer de salida (2 bytes)
int_to_ascii:
    mov x2, #10         // Divisor
    udiv x3, x0, x2     // x3 = x0 / 10 (dígito decenas)
    msub x4, x3, x2, x0 // x4 = x0 % 10 (dígito unidades)

    add x3, x3, #'0'    // Convertir a ASCII
    add x4, x4, #'0'

    strb w3, [x1]       // Almacenar decenas
    strb w4, [x1, #1]   // Almacenar unidades

    ret                 // Retornar

More recordings by Itzel

Browse all

MULTIPLICAION 3:24

by Itzel

BUCLE 3:15

by Itzel

CONTADOR DE A'S 1:07

by Itzel

PARES 2:38

by Itzel