49 lines
2.8 KiB
Markdown
49 lines
2.8 KiB
Markdown
# Примеры на ассемблере NTSYS
|
||
Это небольшой набор примеров для ассемблера NTSYS. Для их компиляции используйте:
|
||
```bash
|
||
ntsys --asm имя_файла.asm --out имя_файла.exe --mem 128
|
||
```
|
||
## Hello, world!
|
||
```asm
|
||
main: ; Метка main
|
||
push.string "Hello, world!\n" ; Записываем строку
|
||
push byte, 0x00 ; Запись номера SYSCALL
|
||
syscall ; Системный вызов
|
||
```
|
||
## Выводим имя пользователя
|
||
```asm
|
||
main: ; Метка main
|
||
push.string "echo \"Ваше имя: $USER\"\n" ; Запрос к системе
|
||
push byte, 0x03 ; Код
|
||
syscall ; Вызов
|
||
```
|
||
## Пример программной задержки
|
||
```asm
|
||
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: ; Главный цикл
|
||
pop byte ; Убираем оставщийся байт
|
||
push db, main ; Адрес main
|
||
jmp ; Повторяем цикл
|
||
``` |