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
c2VjdGlvbiAuZGF0YQogICAgcHJlY2lvX2FydGljdWxvIGRkIDAKICAgIGNhbnRpZGFkX2NvbXByYWRhIGRkIDAKICAgIG1vbnRvX2FfcGFnYXIgZGQgMAogICAgZGVzY3VlbnRvIGRkIDAKICAgIG1vbnRvX2ZpbmFsIGRkIDAKICAgIE1TR19QUkVDSU9fQVJUSUNVTE8gZGIgIkluZ3Jlc2UgZWwgcHJlY2lvIGRlbCBhcnTDrWN1bG86ICIsIDAKICAgIE1TR19DQU5USURBRF9DT01QUkFEQSBkYiAiSW5ncmVzZSBsYSBjYW50aWRhZCBjb21wcmFkYTogIiwgMAogICAgTVNHX01PTlRPX0ZJTkFMIGRiICJFbCBtb250byBmaW5hbCBhIHBhZ2FyIGVzOiAiLCAwCgpzZWN0aW9uIC50ZXh0CiAgICBnbG9iYWwgX3N0YXJ0Cgpfc3RhcnQ6CiAgICA7IEluZ3Jlc2FyIHByZWNpbyBkZWwgYXJ0w61jdWxvCiAgICBtb3YgcmRpLCBNU0dfUFJFQ0lPX0FSVElDVUxPIDsgQ2FyZ2FyIGRpcmVjY2nDs24gZGVsIG1lbnNhamUgZW4gcmRpCiAgICBjYWxsIGltcHJpbWlyX21lbnNhamUKCiAgICA7IExlZXIgcHJlY2lvIGRlbCBhcnTDrWN1bG8KICAgIG1vdiByc2ksIHByZWNpb19hcnRpY3VsbyA7IENhcmdhciBkaXJlY2Npw7NuIGRlIGxhIHZhcmlhYmxlIGVuIHJzaQogICAgY2FsbCBsZWVyX251bWVybwoKICAgIDsgSW5ncmVzYXIgY2FudGlkYWQgY29tcHJhZGEKICAgIG1vdiByZGksIE1TR19DQU5USURBRF9DT01QUkFEQSA7IENhcmdhciBkaXJlY2Npw7NuIGRlbCBtZW5zYWplIGVuIHJkaQogICAgY2FsbCBpbXByaW1pcl9tZW5zYWplCgogICAgOyBMZWVyIGNhbnRpZGFkIGNvbXByYWRhCiAgICBtb3YgcnNpLCBjYW50aWRhZF9jb21wcmFkYSA7IENhcmdhciBkaXJlY2Npw7NuIGRlIGxhIHZhcmlhYmxlIGVuIHJzaQogICAgY2FsbCBsZWVyX251bWVybwoKICAgIDsgQ2FsY3VsYXIgbW9udG8gYSBwYWdhciBhbnRlcyBkZSBkZXNjdWVudG8KICAgIG1vdiBlYXgsIGR3b3JkIFtwcmVjaW9fYXJ0aWN1bG9dIDsgQ2FyZ2FyIHByZWNpb19hcnRpY3VsbyBlbiBlYXgKICAgIGltdWwgZWF4LCBkd29yZCBbY2FudGlkYWRfY29tcHJhZGFdIDsgTXVsdGlwbGljYXIgcHJlY2lvIHBvciBjYW50aWRhZAogICAgbW92IGR3b3JkIFttb250b19hX3BhZ2FyXSwgZWF4IDsgR3VhcmRhciByZXN1bHRhZG8gZW4gbW9udG9fYV9wYWdhcgoKICAgIDsgQ2FsY3VsYXIgZGVzY3VlbnRvCiAgICBtb3YgZWF4LCBkd29yZCBbZGVzY3VlbnRvXSA7IENhcmdhciB2YWxvciBkZSBkZXNjdWVudG8gZW4gZWF4CiAgICBzdWIgZHdvcmQgW21vbnRvX2FfcGFnYXJdLCBlYXggOyBSZXN0YXIgZGVzY3VlbnRvIGFsIG1vbnRvIGEgcGFnYXIKICAgIHRlc3QgZWF4LCBlYXggOyBDb21wcm9iYXIgc2kgZWwgbW9udG8gYSBwYWdhciBlcyBtZW5vciBvIGlndWFsIGEgMAogICAgamxlIGZpbl9kZXNjdWVudG8KCiAgICA7IENhbGN1bGFyIG1vbnRvIGZpbmFsCiAgICBtb3YgZWF4LCBkd29yZCBbbW9udG9fYV9wYWdhcl0gOyBDYXJnYXIgbW9udG9fYV9wYWdhciBlbiBlYXgKCmZpbl9kZXNjdWVudG86CiAgICA7IEltcHJpbWlyIG1vbnRvIGZpbmFsCiAgICBtb3YgcmRpLCBNU0dfTU9OVE9fRklOQUwgOyBDYXJnYXIgZGlyZWNjacOzbiBkZWwgbWVuc2FqZSBlbiByZGkKICAgIGNhbGwgaW1wcmltaXJfbWVuc2FqZQoKICAgIG1vdiByc2ksIG1vbnRvX2ZpbmFsIDsgQ2FyZ2FyIGRpcmVjY2nDs24gZGUgbGEgdmFyaWFibGUgZW4gcnNpCiAgICBjYWxsIGltcHJpbWlyX251bWVybwoKICAgIDsgRmluYWxpemFyIHByb2dyYW1hCiAgICBtb3YgZWF4LCA2MCA7IFNhbGlyIGNvbiBzeXNjYWxsIGV4aXQKICAgIHhvciBlZGksIGVkaSA7IEPDs2RpZ28gZGUgw6l4aXRvCiAgICBzeXNjYWxsCgppbXByaW1pcl9tZW5zYWplOgogICAgOyBGdW5jacOzbiBwYXJhIGltcHJpbWlyIHVuIG1lbnNhamUKICAgIG1vdiByYXgsIDB4MSA7IExsYW1hZGEgYWwgc2lzdGVtYSBwYXJhIGVzY3JpYmlyIGVuIGxhIHNhbGlkYSBlc3TDoW5kYXIKICAgIG1vdiByZHgsIDB4RkZGRkZGRkYgOyBMb25naXR1ZCBtw6F4aW1hIGRlbCBtZW5zYWplCiAgICBzeXNjYWxsCiAgICByZXQKCmxlZXJfbnVtZXJvOgogICAgOyBGdW5jacOzbiBwYXJhIGxlZXIgdW4gbsO6bWVybwogICAgbW92IHJheCwgMCA7IExsYW1hZGEgYWwgc2lzdGVtYSBwYXJhIGxlZXIgZGUgbGEgZW50cmFkYSBlc3TDoW5kYXIKICAgIG1vdiByZHgsIDB4RkZGRkZGRkYgOyBMb25naXR1ZCBtw6F4aW1hIGRlbCBuw7ptZXJvCiAgICBzeXNjYWxsCiAgICByZXQKCmltcHJpbWlyX251bWVybzoKICAgIDsgRnVuY2nDs24gcGFyYSBpbXByaW1pciB1biBuw7ptZXJvCiAgICBtb3YgcmF4LCAweDEgOyBMbGFtYWRhIGFsIHNpc3RlbWEgcGFyYSBlc2NyaWJpciBlbiBsYSBzYWxpZGEgZXN0w6FuZGFyCiAgICBtb3YgcmR4LCAweEZGRkZGRkZGIDsgTG9uZ2l0dWQgbcOheGltYSBkZWwgbsO6bWVybwogICAgc3lzY2FsbAogICAgcmV0Cg==