Operation documentation

This commit is contained in:
german 2026-02-25 19:20:05 +04:00
parent c33f6c0d0b
commit 6527e308b8

48
BINCOM.md Normal file
View File

@ -0,0 +1,48 @@
# 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 РАЗМЕР**