.section .data
msg: .asciz "Costo: $"
result_buf: .space 16
newline: .asciz "\n"
// Constantes grandes como literales
factor_m2: .quad 92903 // 1 pie² ≈ 0.092903 m² × 1_000_000
precio_m2: .quad 9000 // $9 por m² × 1000
escala: .quad 1000000000 // Para dividir y volver a dólares reales
.section .text
.global _start
_start:
// -----------------------------------------
// Paso 1: área en pies² = 10 × 15 = 150
// -----------------------------------------
mov x0, #10
mov x1, #15
mul x2, x0, x1 // x2 = 150
// -----------------------------------------
// Paso 2: convertir a m² con escala
// area_m2_scaled = 150 × 92903
// -----------------------------------------
ldr x3, =factor_m2
ldr x3, [x3]
mul x4, x2, x3 // x4 = 150 × 92903
// -----------------------------------------
// Paso 3: multiplicar por precio por m² ($9 × 1000)
// -----------------------------------------
ldr x5, =precio_m2
ldr x5, [x5]
mul x6, x4, x5 // x6 = (área en milésimas) × precio_m2
// -----------------------------------------
// Paso 4: dividir entre 1_000_000_000 (escala total)
// -----------------------------------------
ldr x7, =escala
ldr x7, [x7]
udiv x8, x6, x7 // x8 = resultado entero en dólares
// -----------------------------------------
// Convertir número a ASCII
// -----------------------------------------
mov x0, x8
ldr x1, =result_buf
bl int_to_ascii
// Mostrar "Costo: $"
mov x0, #1
ldr x1, =msg
mov x2, #8
mov x8, #64
svc 0
// Mostrar resultado
mov x0, #1
ldr x1, =result_buf
mov x2, #8
mov x8, #64
svc 0
// Nueva línea
mov x0, #1
ldr x1, =newline
mov x2, #1
mov x8, #64
svc 0
// Salir
mov x0, #0
mov x8, #93
svc 0
// ------------------------------------------------------------
// int_to_ascii: convierte número entero positivo a texto ASCII
// Entrada: x0 = número, x1 = buffer destino
// ------------------------------------------------------------
int_to_ascii:
mov x2, #10
mov x3, x1
mov x4, #0
convert_loop:
udiv x5, x0, x2
msub x6, x5, x2, x0
add x6, x6, #'0'
strb w6, [x1], #1
add x4, x4, #1
mov x0, x5
cbz x0, reverse_ascii
b convert_loop
reverse_ascii:
sub x1, x1, x4
mov x5, #0
rev_loop:
cmp x5, x4
bge done_ascii
sub x4, x4, #1
ldrb w6, [x1, x5]
ldrb w7, [x1, x4]
strb w7, [x1, x5]
strb w6, [x1, x4]
add x5, x5, #1
b rev_loop
done_ascii:
ret