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