Correct
This commit is contained in:
parent
bd8f8893d6
commit
a70bb88e5a
@ -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 РАЗМЕР**
|
||||||
|
|||||||
20
asm-savers.h
20
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) {
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user