fork download
section .data
    precio_articulo dd 0
    cantidad_comprada dd 0
    monto_a_pagar dd 0
    descuento dd 0
    monto_final dd 0
    MSG_PRECIO_ARTICULO db "Ingrese el precio del artículo: ", 0
    MSG_CANTIDAD_COMPRADA db "Ingrese la cantidad comprada: ", 0
    MSG_MONTO_FINAL db "El monto final a pagar es: ", 0

section .text
    global _start

_start:
    ; Ingresar precio del artículo
    mov rdi, MSG_PRECIO_ARTICULO ; Cargar dirección del mensaje en rdi
    call imprimir_mensaje

    ; Leer precio del artículo
    mov rsi, precio_articulo ; Cargar dirección de la variable en rsi
    call leer_numero

    ; Ingresar cantidad comprada
    mov rdi, MSG_CANTIDAD_COMPRADA ; Cargar dirección del mensaje en rdi
    call imprimir_mensaje

    ; Leer cantidad comprada
    mov rsi, cantidad_comprada ; Cargar dirección de la variable en rsi
    call leer_numero

    ; Calcular monto a pagar antes de descuento
    mov eax, dword [precio_articulo] ; Cargar precio_articulo en eax
    imul eax, dword [cantidad_comprada] ; Multiplicar precio por cantidad
    mov dword [monto_a_pagar], eax ; Guardar resultado en monto_a_pagar

    ; Calcular descuento
    mov eax, dword [descuento] ; Cargar valor de descuento en eax
    sub dword [monto_a_pagar], eax ; Restar descuento al monto a pagar
    test eax, eax ; Comprobar si el monto a pagar es menor o igual a 0
    jle fin_descuento

    ; Calcular monto final
    mov eax, dword [monto_a_pagar] ; Cargar monto_a_pagar en eax

fin_descuento:
    ; Imprimir monto final
    mov rdi, MSG_MONTO_FINAL ; Cargar dirección del mensaje en rdi
    call imprimir_mensaje

    mov rsi, monto_final ; Cargar dirección de la variable en rsi
    call imprimir_numero

    ; Finalizar programa
    mov eax, 60 ; Salir con syscall exit
    xor edi, edi ; Código de éxito
    syscall

imprimir_mensaje:
    ; Función para imprimir un mensaje
    mov rax, 0x1 ; Llamada al sistema para escribir en la salida estándar
    mov rdx, 0xFFFFFFFF ; Longitud máxima del mensaje
    syscall
    ret

leer_numero:
    ; Función para leer un número
    mov rax, 0 ; Llamada al sistema para leer de la entrada estándar
    mov rdx, 0xFFFFFFFF ; Longitud máxima del número
    syscall
    ret

imprimir_numero:
    ; Función para imprimir un número
    mov rax, 0x1 ; Llamada al sistema para escribir en la salida estándar
    mov rdx, 0xFFFFFFFF ; Longitud máxima del número
    syscall
    ret
Success #stdin #stdout 0s 5308KB
stdin
Standard input is empty
stdout
Standard output is empty