diff --git a/BINCOM.md b/BINCOM.md index 295c33b..2cb8620 100644 --- a/BINCOM.md +++ b/BINCOM.md @@ -46,7 +46,7 @@ void (*operations[])(void) = { - **ADD 0x03** - Сложение **ARG1 + ARG2** - сначала берётся **ARG1**. Формат: **0x03 РАЗМЕР** - **SUB 0x04** - Вычитание **ARG1 - ARG2** - сначала берётся **ARG1**. Формат: **0x04 РАЗМЕР** - **MUL 0x05** - Умножение **ARG1 * ARG2** - сначала берётся **ARG1**. Формат: **0x05 РАЗМЕР** -- **MUL 0x06** - Деление **ARG1 / ARG2** - сначала берётся **ARG1**. Формат: **0x06 РАЗМЕР** +- **DIV 0x06** - Деление **ARG1 / ARG2** - сначала берётся **ARG1**. Формат: **0x06 РАЗМЕР** ### Логика - **NOT 0x07** - Инвертирование **NOT ARG**. Формат: **0x07 РАЗМЕР** - **SHR 0x08** - Сдвиг вправо **ARG1 >> ARG2** - сначала берётся **ARG1**. Формат: **0x08 РАЗМЕР** diff --git a/asm-savers.h b/asm-savers.h index d7a71bf..62e5d1f 100644 --- a/asm-savers.h +++ b/asm-savers.h @@ -275,12 +275,28 @@ static void __input_data(ntsys_argument_parser_t* parser, byte_t* mode) { } +static void __input_string(ntsys_argument_parser_t* parser) { + ntsys_exit_if_error(parser) { + ntsys_error("Cannot find argument!"); + return; + } + char* str = parser->string; + size_t i = 0; + while (i < strlen(str)) { + fputc(str[i], parser->fp); + i ++; + } + fputc('\0', parser->fp); +} + static int __arg_writer(char* str, ntsys_argument_parser_t* parser, byte_t* mode) { if (str[0] == ':') { if (str[1] == 'T') { __input_datatype(parser, mode); } else if (str[1] == 'D') { __input_data(parser, mode); + } else if (str[1] == 'S') { + __input_string(parser); } } else { byte_t x = strtol(str, NULL, 16); @@ -312,6 +328,7 @@ static int select_argument(ntsys_argument_parser_t* parser) { if (str[strlen(str) - 1] == ':' && parser->is_rewrite == 0) { return __load_label(parser); } + if (str[strlen(str) - 1] == ':') return EXIT_SUCCESS; char buf[64]; char** table = parser->table; while (i < parser->table_length) { @@ -339,7 +356,8 @@ static int select_argument(ntsys_argument_parser_t* parser) { i ++; } ntsys_error("Undefined operator!"); - /* Обязательно заменить на EXIT_FAILURE! EXIT_SUCCESS нужен для отладки! */ + /* WARNING! Обязательно заменить на EXIT_FAILURE! EXIT_SUCCESS нужен для отладки! */ + puts(str); return EXIT_SUCCESS; } diff --git a/ntsys b/ntsys index 69edfff..40f64f9 100755 Binary files a/ntsys and b/ntsys differ diff --git a/ntsys-assembler.h b/ntsys-assembler.h index e464661..fc4a5d0 100644 --- a/ntsys-assembler.h +++ b/ntsys-assembler.h @@ -8,13 +8,18 @@ /* * :T - тип данных * :D - данные + * :S - строка * XX - шестнадцатиричные данные */ -const size_t ntsys_command_count = 1; +const size_t ntsys_command_count = 3; char* ntsys_asm_table[] = { - "push=00:T:D" + "push=00:T:D", + "pop=01:T", + "push.string=02:S", + "add=03:T", + "sub=04:T", }; int ntsys_asm_from_string(size_t* mempos, char* str, FILE* fp, byte_t cycle, ntsys_labels_array_t labels, word_t* labels_pos, size_t* labels_count) { diff --git a/out.exe b/out.exe index 4fed40a..0d27294 100644 Binary files a/out.exe and b/out.exe differ