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