section .text ; Начало секции кода (инструкции процессора)
global _start ; Объявляем метку _start как глобальную (точка входа)
_start: ; Начало программы (точка входа)
; Вывод первой строки
mov eax, 4 ; Загружаем номер системного вызова (4 = write - вывод)
mov ebx, 1 ; Загружаем файловый дескриптор (1 = stdout - стандартный вывод)
mov ecx, msg1 ; Загружаем адрес первой строки в ecx
mov edx, len1 ; Загружаем длину первой строки в edx
int 0x80 ; ВЫЗОВ ПРЕРЫВАНИЯ - обращение к ядру ОС для выполнения вывода
; Вывод второй строки
mov eax, 4 ; Снова номер системного вызова write
mov ebx, 1 ; Файловый дескриптор stdout
mov ecx, msg2 ; Адрес второй строки
mov edx, len2 ; Длина второй строки
int 0x80 ; ВЫЗОВ ПРЕРЫВАНИЯ - второй вывод
; Завершение программы
mov eax
, 1 ; Номер системного вызова
(1 = exit - завершение программы
) xor ebx, ebx ; Обнуляем ebx (код возврата 0 - успешное завершение)
int 0x80 ; ВЫЗОВ ПРЕРЫВАНИЯ - завершение программы
section .data ; Начало секции данных (переменные и константы)
msg1: db "Hello from NASM!", 0xA ; Первая строка + символ перевода строки (0xA)
len1: equ $-msg1 ; Вычисляем длину первой строкы (текущая позиция - начало msg1)
msg2: db "64-bit with interrupts!", 0xA ; Вторая строка + перевод строки
len2: equ $-msg2 ; Вычисляем длину второй строки
c2VjdGlvbiAudGV4dCAgICAgICA7INCd0LDRh9Cw0LvQviDRgdC10LrRhtC40Lgg0LrQvtC00LAgKNC40L3RgdGC0YDRg9C60YbQuNC4INC/0YDQvtGG0LXRgdGB0L7RgNCwKQogICAgZ2xvYmFsIF9zdGFydCAgIDsg0J7QsdGK0Y/QstC70Y/QtdC8INC80LXRgtC60YMgX3N0YXJ0INC60LDQuiDQs9C70L7QsdCw0LvRjNC90YPRjiAo0YLQvtGH0LrQsCDQstGF0L7QtNCwKQoKX3N0YXJ0OiAgICAgICAgICAgICA7INCd0LDRh9Cw0LvQviDQv9GA0L7Qs9GA0LDQvNC80YsgKNGC0L7Rh9C60LAg0LLRhdC+0LTQsCkKICAgIDsg0JLRi9Cy0L7QtCDQv9C10YDQstC+0Lkg0YHRgtGA0L7QutC4CiAgICBtb3YgZWF4LCA0ICAgICAgOyDQl9Cw0LPRgNGD0LbQsNC10Lwg0L3QvtC80LXRgCDRgdC40YHRgtC10LzQvdC+0LPQviDQstGL0LfQvtCy0LAgKDQgPSB3cml0ZSAtINCy0YvQstC+0LQpCiAgICBtb3YgZWJ4LCAxICAgICAgOyDQl9Cw0LPRgNGD0LbQsNC10Lwg0YTQsNC50LvQvtCy0YvQuSDQtNC10YHQutGA0LjQv9GC0L7RgCAoMSA9IHN0ZG91dCAtINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0LLRi9Cy0L7QtCkKICAgIG1vdiBlY3gsIG1zZzEgICA7INCX0LDQs9GA0YPQttCw0LXQvCDQsNC00YDQtdGBINC/0LXRgNCy0L7QuSDRgdGC0YDQvtC60Lgg0LIgZWN4CiAgICBtb3YgZWR4LCBsZW4xICAgOyDQl9Cw0LPRgNGD0LbQsNC10Lwg0LTQu9C40L3RgyDQv9C10YDQstC+0Lkg0YHRgtGA0L7QutC4INCyIGVkeAogICAgaW50IDB4ODAgICAgICAgIDsg0JLQq9CX0J7QkiDQn9Cg0JXQoNCr0JLQkNCd0JjQryAtINC+0LHRgNCw0YnQtdC90LjQtSDQuiDRj9C00YDRgyDQntChINC00LvRjyDQstGL0L/QvtC70L3QtdC90LjRjyDQstGL0LLQvtC00LAKCiAgICA7INCS0YvQstC+0LQg0LLRgtC+0YDQvtC5INGB0YLRgNC+0LrQuAogICAgbW92IGVheCwgNCAgICAgIDsg0KHQvdC+0LLQsCDQvdC+0LzQtdGAINGB0LjRgdGC0LXQvNC90L7Qs9C+INCy0YvQt9C+0LLQsCB3cml0ZQogICAgbW92IGVieCwgMSAgICAgIDsg0KTQsNC50LvQvtCy0YvQuSDQtNC10YHQutGA0LjQv9GC0L7RgCBzdGRvdXQKICAgIG1vdiBlY3gsIG1zZzIgICA7INCQ0LTRgNC10YEg0LLRgtC+0YDQvtC5INGB0YLRgNC+0LrQuAogICAgbW92IGVkeCwgbGVuMiAgIDsg0JTQu9C40L3QsCDQstGC0L7RgNC+0Lkg0YHRgtGA0L7QutC4CiAgICBpbnQgMHg4MCAgICAgICAgOyDQktCr0JfQntCSINCf0KDQldCg0KvQktCQ0J3QmNCvIC0g0LLRgtC+0YDQvtC5INCy0YvQstC+0LQKCiAgICA7INCX0LDQstC10YDRiNC10L3QuNC1INC/0YDQvtCz0YDQsNC80LzRiwogICAgbW92IGVheCwgMSAgICAgIDsg0J3QvtC80LXRgCDRgdC40YHRgtC10LzQvdC+0LPQviDQstGL0LfQvtCy0LAgKDEgPSBleGl0IC0g0LfQsNCy0LXRgNGI0LXQvdC40LUg0L/RgNC+0LPRgNCw0LzQvNGLKQogICAgeG9yIGVieCwgZWJ4ICAgIDsg0J7QsdC90YPQu9GP0LXQvCBlYnggKNC60L7QtCDQstC+0LfQstGA0LDRgtCwIDAgLSDRg9GB0L/QtdGI0L3QvtC1INC30LDQstC10YDRiNC10L3QuNC1KQogICAgaW50IDB4ODAgICAgICAgIDsg0JLQq9CX0J7QkiDQn9Cg0JXQoNCr0JLQkNCd0JjQryAtINC30LDQstC10YDRiNC10L3QuNC1INC/0YDQvtCz0YDQsNC80LzRiwoKc2VjdGlvbiAuZGF0YSAgICAgICA7INCd0LDRh9Cw0LvQviDRgdC10LrRhtC40Lgg0LTQsNC90L3Ri9GFICjQv9C10YDQtdC80LXQvdC90YvQtSDQuCDQutC+0L3RgdGC0LDQvdGC0YspCm1zZzE6IGRiICJIZWxsbyBmcm9tIE5BU00hIiwgMHhBICA7INCf0LXRgNCy0LDRjyDRgdGC0YDQvtC60LAgKyDRgdC40LzQstC+0Lsg0L/QtdGA0LXQstC+0LTQsCDRgdGC0YDQvtC60LggKDB4QSkKbGVuMTogZXF1ICQtbXNnMSAgICA7INCS0YvRh9C40YHQu9GP0LXQvCDQtNC70LjQvdGDINC/0LXRgNCy0L7QuSDRgdGC0YDQvtC60YsgKNGC0LXQutGD0YnQsNGPINC/0L7Qt9C40YbQuNGPIC0g0L3QsNGH0LDQu9C+IG1zZzEpCgptc2cyOiBkYiAiNjQtYml0IHdpdGggaW50ZXJydXB0cyEiLCAweEEgIDsg0JLRgtC+0YDQsNGPINGB0YLRgNC+0LrQsCArINC/0LXRgNC10LLQvtC0INGB0YLRgNC+0LrQuApsZW4yOiBlcXUgJC1tc2cyICAgIDsg0JLRi9GH0LjRgdC70Y/QtdC8INC00LvQuNC90YMg0LLRgtC+0YDQvtC5INGB0YLRgNC+0LrQuA==