fork download
  1. section .text ; Начало секции кода (инструкции процессора)
  2. global _start ; Объявляем метку _start как глобальную (точка входа)
  3.  
  4. _start: ; Начало программы (точка входа)
  5. ; Вывод первой строки
  6. mov eax, 4 ; Загружаем номер системного вызова (4 = write - вывод)
  7. mov ebx, 1 ; Загружаем файловый дескриптор (1 = stdout - стандартный вывод)
  8. mov ecx, msg1 ; Загружаем адрес первой строки в ecx
  9. mov edx, len1 ; Загружаем длину первой строки в edx
  10. int 0x80 ; ВЫЗОВ ПРЕРЫВАНИЯ - обращение к ядру ОС для выполнения вывода
  11.  
  12. ; Вывод второй строки
  13. mov eax, 4 ; Снова номер системного вызова write
  14. mov ebx, 1 ; Файловый дескриптор stdout
  15. mov ecx, msg2 ; Адрес второй строки
  16. mov edx, len2 ; Длина второй строки
  17. int 0x80 ; ВЫЗОВ ПРЕРЫВАНИЯ - второй вывод
  18.  
  19. ; Завершение программы
  20. mov eax, 1 ; Номер системного вызова (1 = exit - завершение программы)
  21. xor ebx, ebx ; Обнуляем ebx (код возврата 0 - успешное завершение)
  22. int 0x80 ; ВЫЗОВ ПРЕРЫВАНИЯ - завершение программы
  23.  
  24. section .data ; Начало секции данных (переменные и константы)
  25. msg1: db "Hello from NASM!", 0xA ; Первая строка + символ перевода строки (0xA)
  26. len1: equ $-msg1 ; Вычисляем длину первой строкы (текущая позиция - начало msg1)
  27.  
  28. msg2: db "64-bit with interrupts!", 0xA ; Вторая строка + перевод строки
  29. len2: equ $-msg2 ; Вычисляем длину второй строки
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
Hello from NASM!
64-bit with interrupts!