fork download
  1. section .data
  2. precio_articulo dd 0
  3. cantidad_comprada dd 0
  4. monto_a_pagar dd 0
  5. descuento dd 0
  6. monto_final dd 0
  7. MSG_PRECIO_ARTICULO db "Ingrese el precio del artículo: ", 0
  8. MSG_CANTIDAD_COMPRADA db "Ingrese la cantidad comprada: ", 0
  9. MSG_MONTO_FINAL db "El monto final a pagar es: ", 0
  10.  
  11. section .text
  12. global _start
  13.  
  14. _start:
  15. ; Ingresar precio del artículo
  16. mov rdi, MSG_PRECIO_ARTICULO ; Cargar dirección del mensaje en rdi
  17. call imprimir_mensaje
  18.  
  19. ; Leer precio del artículo
  20. mov rsi, precio_articulo ; Cargar dirección de la variable en rsi
  21. call leer_numero
  22.  
  23. ; Ingresar cantidad comprada
  24. mov rdi, MSG_CANTIDAD_COMPRADA ; Cargar dirección del mensaje en rdi
  25. call imprimir_mensaje
  26.  
  27. ; Leer cantidad comprada
  28. mov rsi, cantidad_comprada ; Cargar dirección de la variable en rsi
  29. call leer_numero
  30.  
  31. ; Calcular monto a pagar antes de descuento
  32. mov eax, dword [precio_articulo] ; Cargar precio_articulo en eax
  33. imul eax, dword [cantidad_comprada] ; Multiplicar precio por cantidad
  34. mov dword [monto_a_pagar], eax ; Guardar resultado en monto_a_pagar
  35.  
  36. ; Calcular descuento
  37. mov eax, dword [descuento] ; Cargar valor de descuento en eax
  38. sub dword [monto_a_pagar], eax ; Restar descuento al monto a pagar
  39. test eax, eax ; Comprobar si el monto a pagar es menor o igual a 0
  40. jle fin_descuento
  41.  
  42. ; Calcular monto final
  43. mov eax, dword [monto_a_pagar] ; Cargar monto_a_pagar en eax
  44.  
  45. fin_descuento:
  46. ; Imprimir monto final
  47. mov rdi, MSG_MONTO_FINAL ; Cargar dirección del mensaje en rdi
  48. call imprimir_mensaje
  49.  
  50. mov rsi, monto_final ; Cargar dirección de la variable en rsi
  51. call imprimir_numero
  52.  
  53. ; Finalizar programa
  54. mov eax, 60 ; Salir con syscall exit
  55. xor edi, edi ; Código de éxito
  56. syscall
  57.  
  58. imprimir_mensaje:
  59. ; Función para imprimir un mensaje
  60. mov rax, 0x1 ; Llamada al sistema para escribir en la salida estándar
  61. mov rdx, 0xFFFFFFFF ; Longitud máxima del mensaje
  62. syscall
  63. ret
  64.  
  65. leer_numero:
  66. ; Función para leer un número
  67. mov rax, 0 ; Llamada al sistema para leer de la entrada estándar
  68. mov rdx, 0xFFFFFFFF ; Longitud máxima del número
  69. syscall
  70. ret
  71.  
  72. imprimir_numero:
  73. ; Función para imprimir un número
  74. mov rax, 0x1 ; Llamada al sistema para escribir en la salida estándar
  75. mov rdx, 0xFFFFFFFF ; Longitud máxima del número
  76. syscall
  77. ret
  78.  
Success #stdin #stdout 0s 5308KB
stdin
Standard input is empty
stdout
Standard output is empty