Operation documentation
This commit is contained in:
parent
c33f6c0d0b
commit
6527e308b8
48
BINCOM.md
Normal file
48
BINCOM.md
Normal 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 РАЗМЕР**
|
||||||
Loading…
x
Reference in New Issue
Block a user