fork download
  1. section .data
  2. a dd 2 ; значение a
  3. x dd 4 ; значение x
  4. result dd 0 ; место для результата
  5.  
  6. section .text
  7. global _start
  8.  
  9. _start:
  10. ; загрузка a и x
  11. mov eax, [a]
  12. mov ebx, [x]
  13.  
  14. ; вычисление a^2
  15. mov ecx, eax
  16. imul ecx, eax ; ecx = a^2
  17.  
  18. ; вычисление x^2 и x^3
  19. mov edx, ebx
  20. imul edx, ebx ; edx = x^2
  21. mov esi, ebx
  22. imul esi, ebx ; esi = x^3
  23.  
  24. ; вычисление a^2 * x^2
  25. mov edi, ecx
  26. imul edi, edx ; edi = a^2 * x^2
  27.  
  28. ; деление на -2
  29. ; деление по знакомому делителю
  30. ; для деления на -2 используем деление с учетом знака
  31. ; делим edi на 2
  32. mov eax, edi
  33. cdq ; расширение eax в edx:eax
  34. mov ebx, 2
  35. idiv ebx ; eax = (a^2 * x^2) / 2
  36.  
  37. ; учитываем деление на -2
  38. ; так как делим на -2, результат будет - (a^2 * x^2) / 2
  39. ; то есть делим на 2 и меняем знак
  40. ; при делении на -2, делим на 2 и меняем знак результата
  41. neg eax ; результат деления с учетом деления на -2
  42.  
  43. ; сохраняем результат в память
  44. mov [result], eax
  45.  
  46. ; вычисление -3a x^3
  47. mov ebx, [a]
  48. imul ebx, 3 ; ebx = 3a
  49. mov ecx, ebx
  50. imul ecx, [x] ; ecx = 3a x
  51. imul ecx, [x] ; ecx = 3a x^2
  52. imul ecx, [x] ; ecx = 3a x^3
  53.  
  54. ; умножение 3a x^3
  55. ; результат в ecx
  56. ; умножение на -1
  57. neg ecx ; -3a x^3
  58.  
  59. ; прибавляем к результату
  60. mov ebx, [result]
  61. add ebx, ecx
  62. mov [result], ebx
  63.  
  64. ; вычисление (x + a^3) / 5
  65. mov eax, [a]
  66. mov edx, 0
  67. imul eax, eax
  68. imul eax, eax ; a^3
  69. mov ebx, [x]
  70. add ebx, eax ; x + a^3
  71.  
  72. ; делим на 5
  73. mov ecx, 5
  74. mov edx, 0
  75. div ecx ; eax = (x + a^3) / 5
  76. ; сохраняем результат
  77. ; прибавляем к предыдущему результату
  78. mov ebx, [result]
  79. add ebx, eax
  80. mov [result], ebx
  81.  
  82. ; завершение программы
  83. mov eax, 1
  84. xor ebx, ebx
  85. int 0x80
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
Standard output is empty