GNU/Linux xterm-256color bash 220 views

**
Nombre: cefa.s
Autor: Karla Itzel Vázquez Cruz
Fecha: 09-04-2025
Descripción: Celsius a Fahrenheit
Plataforma: Raspberry Pi OS 64-bit
Asciinema: cefa.s


Versión en C:

Versión en ARM64 RaspbianOS Linux:

.section .data
msg_input:     .asciz "Ingresa la temperatura en Celsius: "
msg_result:    .asciz "\nTemperatura en Fahrenheit: "
buffer:        .skip 10               // buffer para la entrada
newline:       .asciz "\n"

.section .text
.global _start

_start:
    // Mostrar mensaje de entrada
    mov     x0, 1                    // STDOUT
    ldr     x1, =msg_input
    mov     x2, 31                   // longitud del mensaje
    mov     x8, 64                   // syscall write
    svc     0

    // Leer desde teclado
    mov     x0, 0                    // STDIN
    ldr     x1, =buffer
    mov     x2, 10                   // leer hasta 10 bytes
    mov     x8, 63                   // syscall read
    svc     0

    // Convertir cadena ASCII a número entero (en x2)
    ldr     x1, =buffer
    mov     x2, 0                    // resultado
convert_loop:
    ldrb    w3, [x1], 1              // leer byte
    cmp     w3, #'0'
    blt     conversion_done
    cmp     w3, #'9'
    bgt     conversion_done
    sub     x3, x3, '0'              // convertir ASCII a número

    mov     x4, #10
    mul     x2, x2, x4               // x2 *= 10
    add     x2, x2, x3               // x2 += nuevo dígito
    b       convert_loop

conversion_done:
    // Fórmula: Fahrenheit = (Celsius * 9) / 5 + 32
    mov     x3, x2
    mov     x4, #9
    mul     x3, x3, x4               // Celsius * 9

    mov     x4, #5
    udiv    x3, x3, x4               // /5

    add     x3, x3, 32               // +32

    // Convertir resultado x3 a ASCII en buffer
    mov     x5, x3                   // copiar resultado
    ldr     x6, =buffer+9            // apuntar al final
    mov     x7, 10                   // divisor base 10
int_to_ascii:
    mov     x8, x5
    udiv    x5, x5, x7               // x5 = x5 / 10
    msub    x9, x5, x7, x8           // x9 = x8 - x5*10
    add     x9, x9, '0'              // convertir a ASCII
    strb    w9, [x6, -1]!            // guardar y retroceder
    cmp     x5, 0
    bne     int_to_ascii

    // Mostrar mensaje resultado
    mov     x0, 1
    ldr     x1, =msg_result
    mov     x2, 28                   // longitud con \n
    mov     x8, 64
    svc     0

    // Mostrar número
    mov     x0, 1
    mov     x1, x6
    ldr     x2, =buffer+9
    sub     x2, x2, x6
    mov     x8, 64
    svc     0

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

    // Salida limpia
    mov     x0, 0
    mov     x8, 93
    svc     0

More recordings by Itzel

Browse all

FAHRENHEIT A CELSIUS 1:26

by Itzel

AREA DE UN TRIANGULO 1:17

by Itzel

DECIMAL A HEXADECIMAL 1:38

by Itzel

CADENA N VECES 1:55

by Itzel