fork download
  1. section .data
  2. num1 dd -12345
  3. num2 dd 6789
  4.  
  5. msg db "Результат: "
  6. msg_len equ $ - msg
  7. newline db 10
  8. ; Буфер достаточно большой для 64-битного числа со знаком
  9. buffer db "00000000000000000000", 0 ; 20 нулей + терминатор
  10.  
  11. section .text
  12. global _start
  13.  
  14. _start:
  15. ; Умножение
  16. mov eax, [num1]
  17. imul dword [num2]
  18. mov [num1], eax ; временно сохраняем
  19.  
  20. ; Вывод сообщения
  21. mov rax, 1
  22. mov rdi, 1
  23. mov rsi, msg
  24. mov rdx, msg_len
  25. syscall
  26.  
  27. ; Преобразование числа в строку
  28. mov eax, [num1] ; результат умножения
  29. mov rdi, buffer + 19 ; конец буфера
  30. mov byte [rdi], 0 ; терминатор
  31. mov ebx, 10 ; делитель
  32. mov ecx, eax ; сохраняем для знака
  33.  
  34. ; Обработка знака
  35. cmp eax, 0
  36. jge .positive
  37. neg eax
  38.  
  39. .positive:
  40. xor edx, edx
  41. div ebx
  42. add dl, '0'
  43. dec rdi
  44. mov [rdi], dl
  45. test eax, eax
  46. jnz .positive
  47.  
  48. ; Добавляем минус если нужно
  49. cmp ecx, 0
  50. jge .output
  51. dec rdi
  52. mov byte [rdi], '-'
  53.  
  54. .output:
  55. ; Вывод результата
  56. mov rsi, rdi
  57. mov rdx, buffer + 20
  58. sub rdx, rdi
  59. mov rax, 1
  60. mov rdi, 1
  61. syscall
  62.  
  63. ; Новая строка
  64. mov rax, 1
  65. mov rdi, 1
  66. mov rsi, newline
  67. mov rdx, 1
  68. syscall
  69.  
  70. ; Выход
  71. mov rax, 60
  72. xor rdi, rdi
  73. syscall
Success #stdin #stdout 0s 5324KB
stdin
Standard input is empty
stdout
Результат: -83810205