fork download
  1. bits 32
  2.  
  3. section .data
  4. num1 dd 10 ; Первое число
  5. num2 dd 5 ; Второе число
  6. num3 dd 0 ; Третье число (делитель)
  7. msg_result db "Result (lower byte): 0x", 0
  8. msg_error db "Division by zero!", 0
  9. newline db 10
  10.  
  11. section .bss
  12. hex_digit resb 2
  13.  
  14. section .text
  15. global _start
  16.  
  17. _start:
  18. ; Загружаем числа в регистры
  19. mov eax, [num1]
  20. mov ebx, [num2]
  21. mov ecx, [num3]
  22.  
  23. ; Умножаем num1 * num2
  24. mul ebx
  25.  
  26. ; Проверка: деление на ноль?
  27. cmp ecx, 0
  28. je division_by_zero
  29.  
  30. ; Делим результат умножения на num3
  31. mov ebx, ecx ; EBX = num3 (делитель)
  32. div ebx ; EDX:EAX / EBX. EAX - Quotient, EDX - remainder
  33.  
  34. ; Получаем младший байт частного и преобразуем в hex
  35. mov al, al
  36. and al, 0x0F
  37.  
  38. cmp al, 0x0A
  39. jl is_digit
  40. add al, 0x37
  41. jmp save_digit
  42.  
  43. is_digit:
  44. add al, 0x30
  45.  
  46. save_digit:
  47. mov [hex_digit], al
  48. mov byte [hex_digit+1], 0
  49.  
  50. ; Выводим результат
  51. mov eax, 4 ; sys_write
  52. mov ebx, 1 ; stdout
  53. mov ecx, msg_result ; message address
  54. mov edx, 22 ; message length
  55. int 0x80
  56.  
  57. mov eax, 4
  58. mov ebx, 1
  59. mov ecx, hex_digit
  60. mov edx, 1
  61. int 0x80
  62.  
  63. ; Выводим новую строку
  64. mov eax, 4
  65. mov ebx, 1
  66. mov ecx, newline
  67. mov edx, 1
  68. int 0x80
  69.  
  70. jmp end_program ; Пропускаем вывод ошибки
  71.  
  72. division_by_zero:
  73. ; Выводим сообщение об ошибке
  74. mov eax, 4 ; sys_write
  75. mov ebx, 1 ; stdout
  76. mov ecx, msg_error ; message address
  77. mov edx, 17 ; message length
  78. int 0x80
  79.  
  80. ; Выводим новую строку
  81. mov eax, 4
  82. mov ebx, 1
  83. mov ecx, newline
  84. mov edx, 1
  85. int 0x80
  86.  
  87. end_program:
  88. ; Выход
  89. mov eax, 1 ; sys_exit
  90. xor ebx, ebx
  91. int 0x80
  92.  
Success #stdin #stdout 0s 5288KB
stdin
Standard input is empty
stdout
Division by zero!