ntsys/BINCOM.md
2026-02-25 19:20:05 +04:00

48 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# BINCOM - справочник по коммандам NTSYS
Эта страница посвящена коммандам в NTSYS.
## Кратко
```c
void (*operations[])(void) = {
/* Операции со стеком (0 - 2) */
push, pop, push_str,
/* Арифметические операции (3 - 6) */
add, sub, mul, div_r,
/* Логические операции (7 - 12) */
nt_not, nt_shr, nt_shl, nt_or,
nt_and, nt_xor,
/* Переход (13) */
nt_goto,
/* Условия (14 - 21) */
bnez, bez,
up, down,
eq, neq,
upne, downe,
/* Работа с памятью (22 - 23) */
mwrt, mrd,
/* Адресация на стеке (24 - 25) */
get_sp, set_sp,
/* Системные вызовы (26) */
nt_fs_syscall
};
```
## Справочник
### Стек
- **PUSH 0x00** - Запись данных на стек. Формат: **0x00 РАЗМЕР ДАННЫЕ_1 ... ДАННЫЕ_N**
- **POP 0x01** - Удаление данных со стека. Формат: **0x01 РАЗМЕР**
- **PUSH_STRING 0x02** - Запись строки на стек. Формат: **0x02 СИМВОЛ_1 ... СИМВОЛ_N 0x00**
### Арифметика
> [!WARNING]
> По умолчанию все арифметические операторы работают с **UNSIGNED**.
> Для **SIGNED** нужно добавить **0xF0**. Например (**SIGNED DWORD**):
> ```c
> unsigned char Y[2] = {0x03, 0x00};
> unsigned char X = 4;
> X = X | 0xF0;
> Y[1] = X;
> fwrite(Y, 1, sizeof(Y), my_program);
> ...
> ```
- **ADD 0x03** - Сложение **ARG1 + ARG2** - сначала берётся **ARG1**. Формат: **0x03 РАЗМЕР**
- **SUB 0x04** - Вычитание **ARG1 - ARG2** - сначала берётся **ARG1**. Формат: **0x04 РАЗМЕР**
- **MUL 0x05** - Умножение **ARG1 * ARG2** - сначала берётся **ARG1**. Формат: **0x05 РАЗМЕР**
- **MUL 0x06** - Деление **ARG1 / ARG2** - сначала берётся **ARG1**. Формат: **0x06 РАЗМЕР**