ntsys/EXAMPLES.md
2026-03-10 16:50:29 +04:00

3.3 KiB
Raw Blame History

Примеры на ассемблере NTSYS

Это небольшой набор примеров для ассемблера NTSYS. Для их компиляции используйте:

ntsys --asm имя_файла.asm --out имя_файла.exe --mem 128

Hello, world!

main:                             ; Метка main
    push.string "Hello, world!\n" ; Записываем строку
    push byte, 0x00               ; Запись номера SYSCALL
    syscall                       ; Системный вызов

Выводим имя пользователя

main:                                             ; Метка main
    push.string "echo Ваше имя: $USER\n"          ; Запрос к системе
    push byte, 0x03                               ; Код
    syscall                                       ; Вызов

Пример программной задержки

main:                                             ; Метка main
    push.string "This is example of wait!\n"      ; Строка
    push byte, 0x00                               ; Номер
    syscall                                       ; Системный вызов

mload:                                            ; Функция mload
    push word, 0x00                               ; Данные для записи
    push word, 0x00                               ; Адрес в VRAM
    mwrt word                                     ; Комманда записи

lwait:                                            ; Цикл задержки
    push db, lwait                                ; Его адрес
    push word, 0x01                               ; Увеличивать счетчик на 1
    push word, 0x00                               ; Счетчик по адресу 0x00
    mread word                                    ; Читаем
    add word                                      ; Складываем
    push word, 0x00                               ; Адрес для записи
    mwrt word                                     ; Записываем обратно
    push word, 0x00                               ; Адрес
    mread word                                    ; Читаем
    push word, 0xFFFF                             ; Значение для сравнения
    neq word                                      ; Если не равно - повторить цикл

mloop:                                            ; Главный цикл              
    push db, main                                 ; Адрес main
    jmp                                           ; Повторяем цикл

Пример инструкции SWAP

main:                                 ; Метка main
    push.string "Hello, world!\n"     ; Строка
    push byte 0x00                    ; Дескриптор
    syscall                           ; Системный вызов
    push.string "Hello, world!\n"     ; Строка
    push byte 3                       ; Кол-во блоков
    swap word                         ; Блок размером в 2 байта
    push byte 0x00                    ; Дескриптор
    syscall                           ; Системный вызов