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

2.1 KiB
Raw Blame History

BINCOM - справочник по коммандам NTSYS

Эта страница посвящена коммандам в NTSYS.

Кратко

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):

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 РАЗМЕР