diff --git a/ASM.md b/ASM.md index 99e1513..fe3367b 100644 --- a/ASM.md +++ b/ASM.md @@ -1,10 +1,43 @@ # Assemly NTSYS Это справочник по ассемблеру в **NTSYS**. Тут представлены основные комманды и описание синтаксиса. ## Операторы -Основной программной единицей является оператор. Это одно из зарезервированных слов. Названия операторов те же, что и в [BINCOM](https://gitlabor.ru/German/ntsys/src/branch/main/BINCOM.md), но в нижнем регистре. -## Метки -Метки используются для относительного перехода в любое место программы. Они состоят из алфавитно-цифровых символов, двоеточия и переноса строки: +Основной программной единицей является оператор. Это одно из зарезервированных слов. Названия операторов те же, что и в [BINCOM](https://gitlabor.ru/German/ntsys/src/branch/main/BINCOM.md), но в нижнем регистре (нижнее подчеркивание заменено точкой). Их синтаксис следующий: ```asm -имя_метки: + оператор операнд1, операнд2, ... операндN +``` +Операнды нужны для передачи данных в операторы. +## Метки +Метки используются для относительного перехода в любое место программы. Они состоят из алфавитно-цифровых символов, а также нижнего подчеркивания и знака минус, двоеточия и переноса строки: +```asm +ИмяМетки: ; ... код -``` \ No newline at end of file +``` +Для записи метки используется специальный тип данных - **db**: +```asm +main: + push db main + jmp +``` +## Комментарии +Комментарий нужен для создания пояснения к коду. Любой текст в комментарии игнорируется. +Пример: +```asm +; Это комментарий +; Это тоже +``` +## Типы данных +Основные типы данных: +- ```byte``` - 8bit без знака +- ```word``` - 16bit без знака +- ```dword``` - 32bit без знака +- ```qword``` - 64bit без знака +- ```sbyte``` - 8bit знаковый +- ```sword``` - 16bit знаковый +- ```sdword``` - 32bit знаковый +- ```sqword``` - 64bit знаковый +- Строки - [ASCIIZ-строка](https://ru.wikipedia.org/wiki/%D0%9D%D1%83%D0%BB%D1%8C-%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B0?ysclid=mmhsfli7p5897685524) +Строки заключаются в двойные кавычки: +``` + push.string "Строка" +``` +Поддерживаются следующие управляющие символы: ```\0, \a, \b, \t, \n, \v, \f, \r, \\, \"```. diff --git a/OPTIONS.md b/OPTIONS.md index 01f7bbd..b5d40dd 100644 --- a/OPTIONS.md +++ b/OPTIONS.md @@ -4,6 +4,7 @@ - ```--asm / -a - compile assembler program``` - ```--out / -o - set output file name``` - ```--debug / -d - display debugging info``` +- ```--mem / -m - asm output memory size``` ## Опция HELP Может быть вызвана как ```--help``` или ```-h```. Эта опция выводит краткую справку. @@ -18,4 +19,8 @@ Эта опция выводит скомпилированную ассемблерную программу в файл. ## Опция DEBUG Может быть вызвана как ```--debug``` или ```-d```. -Эта опция включает режим отладчика. В этом режиме комманды будут выполняться по запросу пользователя и создавать дамп памяти. \ No newline at end of file +Эта опция включает режим отладчика. В этом режиме комманды будут выполняться по запросу пользователя и создавать дамп памяти. +## Опция MEM +Может быть вызвана как ```--mem``` или ```-m```. +Эта опция меняет размер памяти, выделяймой под программу при компиляции ассемблера. +Рекомендуется к использованию всегда. \ No newline at end of file diff --git a/loop.asm b/loop.asm new file mode 100644 index 0000000..afa0cf6 --- /dev/null +++ b/loop.asm @@ -0,0 +1,3 @@ +main: + push db main + jmp diff --git a/loop.exe b/loop.exe new file mode 100644 index 0000000..f06ff6a Binary files /dev/null and b/loop.exe differ diff --git a/ntsys b/ntsys index 34d9cc1..e14ff67 100755 Binary files a/ntsys and b/ntsys differ diff --git a/ntsys.h b/ntsys.h index 1a66880..6577ea3 100644 --- a/ntsys.h +++ b/ntsys.h @@ -84,7 +84,8 @@ static void __help(void) { " " "--version / -v - show version" "\n" " " "--asm / -a - compile assembler program" "\n" " " "--out / -o - set output file name" "\n" - " " "--debug / -d - display debugging info" "\0" + " " "--debug / -d - display debugging info" "\n" + " " "--mem / -m - asm output memory size" "\0" ); } static int __exe_run(__e_byte_t* memory, unsigned int memorysize, unsigned long filesize, FILE* fp, __e_byte_t debug) { @@ -230,6 +231,7 @@ int _lib_ntsys_main(int argc, char** argv) { break; case 'm': mem = 1; + mode = 'A'; break; default: ntsys_error("Unknown option!");