fork(1) download
  1. section .data
  2. msg1 db "Поток номер 1 запущен.", 10 ; строка для потока 1 + \n
  3. len1 equ $ - msg1 ; длина строки msg1
  4. msg2 db "Поток номер 2 запущен.", 10 ; строка для потока 2 + \n
  5. len2 equ $ - msg2 ; длина строки msg2
  6. msg3 db "Поток номер 3 запущен.", 10 ; строка для потока 3 + \n
  7. len3 equ $ - msg3 ; длина строки msg3
  8. waitmsg db "Основной поток ожидает завершения потоков...",10 ; сообщение ожидания
  9. waitlen equ $ - waitmsg ; длина waitmsg
  10. donemsg db "Все потоки завершены.", 10 ; финальное сообщение
  11. donelen equ $ - donemsg ; длина donemsg
  12.  
  13. section .text
  14. global _start
  15.  
  16. thread_func:
  17. ; ecx = адрес строки, edx = длина
  18. mov eax, 4 ; системный вызов write
  19. mov ebx, 1 ; вывод на stdout
  20. int 0x80 ; вызов ядра
  21. ret ; возврат из функции
  22.  
  23. _start:
  24. mov eax, 4
  25. mov ebx, 1
  26. mov ecx, waitmsg ; вывод сообщения ожидания
  27. mov edx, waitlen
  28. int 0x80
  29.  
  30. mov ecx, msg1 ; запуск "потока 1"
  31. mov edx, len1
  32. call thread_func
  33.  
  34. mov ecx, msg2 ; запуск "потока 2"
  35. mov edx, len2
  36. call thread_func
  37.  
  38. mov ecx, msg3 ; запуск "потока 3"
  39. mov edx, len3
  40. call thread_func
  41.  
  42. mov eax, 4
  43. mov ebx, 1
  44. mov ecx, donemsg ; вывод завершения
  45. mov edx, donelen
  46. int 0x80
  47.  
  48. mov eax, 1 ; системный вызов exit
  49. xor ebx, ebx ; код выхода 0
  50. int 0x80
Success #stdin #stdout 0s 5316KB
stdin
1
2
10
42
11
stdout
Основной поток ожидает завершения потоков...
Поток номер 1 запущен.
Поток номер 2 запущен.
Поток номер 3 запущен.
Все потоки завершены.