This commit is contained in:
german 2026-03-06 20:13:15 +04:00
parent bd8f8893d6
commit a70bb88e5a
5 changed files with 27 additions and 4 deletions

View File

@ -46,7 +46,7 @@ void (*operations[])(void) = {
- **ADD 0x03** - Сложение **ARG1 + ARG2** - сначала берётся **ARG1**. Формат: **0x03 РАЗМЕР** - **ADD 0x03** - Сложение **ARG1 + ARG2** - сначала берётся **ARG1**. Формат: **0x03 РАЗМЕР**
- **SUB 0x04** - Вычитание **ARG1 - ARG2** - сначала берётся **ARG1**. Формат: **0x04 РАЗМЕР** - **SUB 0x04** - Вычитание **ARG1 - ARG2** - сначала берётся **ARG1**. Формат: **0x04 РАЗМЕР**
- **MUL 0x05** - Умножение **ARG1 * ARG2** - сначала берётся **ARG1**. Формат: **0x05 РАЗМЕР** - **MUL 0x05** - Умножение **ARG1 * ARG2** - сначала берётся **ARG1**. Формат: **0x05 РАЗМЕР**
- **MUL 0x06** - Деление **ARG1 / ARG2** - сначала берётся **ARG1**. Формат: **0x06 РАЗМЕР** - **DIV 0x06** - Деление **ARG1 / ARG2** - сначала берётся **ARG1**. Формат: **0x06 РАЗМЕР**
### Логика ### Логика
- **NOT 0x07** - Инвертирование **NOT ARG**. Формат: **0x07 РАЗМЕР** - **NOT 0x07** - Инвертирование **NOT ARG**. Формат: **0x07 РАЗМЕР**
- **SHR 0x08** - Сдвиг вправо **ARG1 >> ARG2** - сначала берётся **ARG1**. Формат: **0x08 РАЗМЕР** - **SHR 0x08** - Сдвиг вправо **ARG1 >> ARG2** - сначала берётся **ARG1**. Формат: **0x08 РАЗМЕР**

View File

@ -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) { static int __arg_writer(char* str, ntsys_argument_parser_t* parser, byte_t* mode) {
if (str[0] == ':') { if (str[0] == ':') {
if (str[1] == 'T') { if (str[1] == 'T') {
__input_datatype(parser, mode); __input_datatype(parser, mode);
} else if (str[1] == 'D') { } else if (str[1] == 'D') {
__input_data(parser, mode); __input_data(parser, mode);
} else if (str[1] == 'S') {
__input_string(parser);
} }
} else { } else {
byte_t x = strtol(str, NULL, 16); 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) { if (str[strlen(str) - 1] == ':' && parser->is_rewrite == 0) {
return __load_label(parser); return __load_label(parser);
} }
if (str[strlen(str) - 1] == ':') return EXIT_SUCCESS;
char buf[64]; char buf[64];
char** table = parser->table; char** table = parser->table;
while (i < parser->table_length) { while (i < parser->table_length) {
@ -339,7 +356,8 @@ static int select_argument(ntsys_argument_parser_t* parser) {
i ++; i ++;
} }
ntsys_error("Undefined operator!"); ntsys_error("Undefined operator!");
/* Обязательно заменить на EXIT_FAILURE! EXIT_SUCCESS нужен для отладки! */ /* WARNING! Обязательно заменить на EXIT_FAILURE! EXIT_SUCCESS нужен для отладки! */
puts(str);
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }

BIN
ntsys

Binary file not shown.

View File

@ -8,13 +8,18 @@
/* /*
* :T - тип данных * :T - тип данных
* :D - данные * :D - данные
* :S - строка
* XX - шестнадцатиричные данные * XX - шестнадцатиричные данные
*/ */
const size_t ntsys_command_count = 1; const size_t ntsys_command_count = 3;
char* ntsys_asm_table[] = { 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) { 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) {

BIN
out.exe

Binary file not shown.