summaryrefslogtreecommitdiff
path: root/doc/src/libmcpu-opcode-table.tex
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/libmcpu-opcode-table.tex')
-rw-r--r--doc/src/libmcpu-opcode-table.tex174
1 files changed, 174 insertions, 0 deletions
diff --git a/doc/src/libmcpu-opcode-table.tex b/doc/src/libmcpu-opcode-table.tex
new file mode 100644
index 0000000..33d0bc4
--- /dev/null
+++ b/doc/src/libmcpu-opcode-table.tex
@@ -0,0 +1,174 @@
+\begin{longtable}{@{}L{20mm}L{19mm}L{43mm}L{77mm}@{}}
+\toprule
+\textbf{Mnemonic} & \textbf{OPCODE16} & \textbf{Operands} & \textbf{Назначение} \\
+\midrule
+\endfirsthead
+\toprule
+\textbf{Mnemonic} & \textbf{OPCODE16} & \textbf{Operands} & \textbf{Назначение} \\
+\midrule
+\endhead
+NOP & \code{0x0000} & \code{---} & Нет операции; PC переходит к следующей инструкции. \\
+HALT & \code{0x0001} & \code{---} & Устанавливает machine halt state; используется как низкоуровневая остановка CPU. \\
+END & \code{0x0002} & \code{---} & Завершает текущую externally managed INIT/LIFE/FINI phase и возвращает управление supervisor-у. \\
+EXIT & \code{0x0003} & \code{r32 status} & Graceful завершение программы/модели с signed int32 status; при наличии FINI runtime переходит к _fini. \\
+SYSCALL & \code{0x0004} & \code{---} & Выполняет системный вызов через фиксированную register ABI area. \\
+SETF & \code{0x0010} & \code{PSWBIT8} & Устанавливает ровно один writable arithmetic/status flag в диапазоне PSW[15:0]; HF/TF/IF недопустимы. \\
+CLRF & \code{0x0011} & \code{PSWBIT8} & Очищает ровно один writable arithmetic/status flag в диапазоне PSW[15:0]; HF/TF/IF недопустимы. \\
+CLRCPUF & \code{0x0012} & \code{---} & Очищает CPU flag byte PSW[7:0], сохраняя PSW[15:8] и control/execution state. \\
+CLRMPUF & \code{0x0013} & \code{---} & Очищает MPU flag byte PSW[15:8], сохраняя PSW[7:0] и control/execution state. \\
+MOV & \code{0x0100} & \code{Rdst, Rsrc} & Копирует объект между регистрами одинаковой физической ширины. \\
+CLR & \code{0x0101} & \code{Rdst} & Заполняет выбранный регистр нулями. \\
+SWAP & \code{0x0102} & \code{Ra, Rb} & Обменивает содержимое двух регистров одинаковой ширины. \\
+BSWAP & \code{0x0103} & \code{Rdst, Rsrc} & Разворачивает порядок байтов source object; raw byte reversal без числовой интерпретации. \\
+LDI & \code{0x0110} & \code{Rdst, imm64} & Загружает signed integer immediate с приведением к ширине integer register; conversion PSW-neutral. \\
+LDR & \code{0x0111} & \code{Rdst, real literal} & Загружает exactly representable immediate Real32/Real64; более широкие constants следует хранить в DATA. \\
+LDC & \code{0x0112} & \code{Cdst, complex literal} & Загружает immediate Complex64 как две точно представимые Real32 components. \\
+LOAD & \code{0x0120} & \code{Rdst, DATA64} & Копирует объект из DATA по прямому DATA-relative адресу в регистр. \\
+STORE & \code{0x0121} & \code{DATA64, Rsrc} & Копирует регистр в DATA по прямому DATA-relative адресу. \\
+LEA & \code{0x0130} & \code{r64 dst, PTR64} & Формирует полный segment-aware PTR64 на label/target object. \\
+LEASP & \code{0x0131} & \code{r64 dst, OFF64} & Формирует STACK PTR64 как SP плюс signed byte offset. \\
+LOADP & \code{0x0132} & \code{R/C dst, r64 ptr} & Читает объект через PTR64 после проверки segment rights и bounds. \\
+STOREP & \code{0x0133} & \code{r64 ptr, R/C src} & Записывает объект через PTR64 после проверки segment rights и bounds. \\
+PADD & \code{0x0140} & \code{r64 dst, r64 ptr, r64 delta} & Прибавляет signed byte delta из r64 к PTR64 с сохранением segment selector. \\
+PADDI & \code{0x0141} & \code{r64 dst, r64 ptr, OFF64} & Прибавляет signed immediate byte offset к PTR64. \\
+PSUB & \code{0x0142} & \code{r64 dst, r64 ptr, r64 delta} & Вычитает signed byte delta из PTR64. \\
+PSUBI & \code{0x0143} & \code{r64 dst, r64 ptr, OFF64} & Вычитает signed immediate byte offset из PTR64. \\
+PDIFF & \code{0x0144} & \code{r64 dst, r64 a, r64 b} & Вычисляет signed разность byte offsets двух совместимых PTR64. \\
+BMOV & \code{0x0150} & \code{r64 dst, r64 src, r64 count} & Перемещает count байтов между PTR64 ranges с memmove-семантикой и полной предварительной проверкой. \\
+BMOVI & \code{0x0151} & \code{r64 dst, r64 src, IMM64 count} & То же, но byte count задан immediate. \\
+IADD & \code{0x1000} & \code{Idst, Ia, Ib} & Беззнаковое/битовое integer сложение выбранной ширины с публикацией integer flags. \\
+IADC & \code{0x1001} & \code{Idst, Ia, Ib} & Integer сложение с входным carry CF. \\
+ISUB & \code{0x1002} & \code{Idst, Ia, Ib} & Integer вычитание выбранной ширины. \\
+ISBB & \code{0x1003} & \code{Idst, Ia, Ib} & Integer вычитание с borrow/carry state. \\
+IAND & \code{0x1004} & \code{Idst, Ia, Ib} & Побитовое AND. \\
+IOR & \code{0x1005} & \code{Idst, Ia, Ib} & Побитовое OR. \\
+IXOR & \code{0x1006} & \code{Idst, Ia, Ib} & Побитовое XOR. \\
+INOT & \code{0x1010} & \code{Idst, Isrc} & Побитовое дополнение integer object. \\
+INEG & \code{0x1011} & \code{Idst, Isrc} & Двухкомплементарное отрицание integer object. \\
+ICMP & \code{0x1020} & \code{Ia, Ib} & Сравнивает integer operands одинаковой ширины и обновляет comparison flags без сохранения результата. \\
+ITEST & \code{0x1021} & \code{Ia, Ib} & Выполняет AND только для формирования integer condition flags. \\
+ISHL & \code{0x1030} & \code{Idst, Isrc} & Logical shift left на один bit. \\
+ISHR & \code{0x1031} & \code{Idst, Isrc} & Logical shift right на один bit. \\
+ISAL & \code{0x1032} & \code{Idst, Isrc} & Arithmetic shift left на один bit. \\
+ISAR & \code{0x1033} & \code{Idst, Isrc} & Arithmetic shift right на один bit с сохранением знака. \\
+IROL & \code{0x1034} & \code{Idst, Isrc} & Rotate left на один bit. \\
+IROR & \code{0x1035} & \code{Idst, Isrc} & Rotate right на один bit. \\
+IRCL & \code{0x1036} & \code{Idst, Isrc} & Rotate left through carry CF на один bit. \\
+IRCR & \code{0x1037} & \code{Idst, Isrc} & Rotate right through carry CF на один bit. \\
+ISHLN & \code{0x1040} & \code{Idst, Isrc, r64 n} & Logical shift left на n bits. \\
+ISHRN & \code{0x1041} & \code{Idst, Isrc, r64 n} & Logical shift right на n bits. \\
+ISALN & \code{0x1042} & \code{Idst, Isrc, r64 n} & Arithmetic shift left на n bits. \\
+ISARN & \code{0x1043} & \code{Idst, Isrc, r64 n} & Arithmetic shift right на n bits. \\
+IROLN & \code{0x1044} & \code{Idst, Isrc, r64 n} & Rotate left на n bits. \\
+IRORN & \code{0x1045} & \code{Idst, Isrc, r64 n} & Rotate right на n bits. \\
+IRCLN & \code{0x1046} & \code{Idst, Isrc, r64 n} & Rotate left through carry на n bits. \\
+IRCRN & \code{0x1047} & \code{Idst, Isrc, r64 n} & Rotate right through carry на n bits. \\
+IINC & \code{0x1050} & \code{Idst, Isrc} & Увеличивает integer value на единицу. \\
+IDEC & \code{0x1051} & \code{Idst, Isrc} & Уменьшает integer value на единицу. \\
+IXCHG & \code{0x1052} & \code{Ia, Ib} & Обменивает integer values одинаковой ширины. \\
+ICPY & \code{0x1053} & \code{Idst, Isrc} & Unsigned width-changing copy: zero-extension/truncation по integer object rules. \\
+ICVT & \code{0x1054} & \code{Idst, Isrc} & Signed width-changing conversion с sign extension/truncation; conversion PSW-neutral. \\
+IMUL & \code{0x1060} & \code{Iprod, Ia, Ib} & Полное unsigned integer произведение; destination имеет product width, допустимую ISA. \\
+ISMUL & \code{0x1061} & \code{Iprod, Ia, Ib} & Полное signed integer произведение. \\
+IDIV & \code{0x1062} & \code{Iquot, Irem, Inum, Iden} & Unsigned integer division с отдельными quotient и remainder. \\
+ISDIV & \code{0x1063} & \code{Iquot, Irem, Inum, Iden} & Signed integer division с отдельными quotient и remainder. \\
+IBITSLEN & \code{0x1064} & \code{r64 dst, Isrc} & Возвращает число значащих bits integer source. \\
+RADD & \code{0x2000} & \code{Rdst, Ra, Rb} & Сложение двух Real одинаковой physical width. \\
+RSUB & \code{0x2001} & \code{Rdst, Ra, Rb} & Вычитание Real. \\
+RMUL & \code{0x2002} & \code{Rdst, Ra, Rb} & Умножение Real. \\
+RDIV & \code{0x2003} & \code{Rdst, Ra, Rb} & Деление Real. \\
+RSQRT & \code{0x2010} & \code{Rdst, Rsrc} & Квадратный корень Real. \\
+RSIN & \code{0x2020} & \code{Rdst, Rsrc} & Синус Real. \\
+RCOS & \code{0x2021} & \code{Rdst, Rsrc} & Косинус Real. \\
+RTAN & \code{0x2022} & \code{Rdst, Rsrc} & Тангенс Real. \\
+RASIN & \code{0x2023} & \code{Rdst, Rsrc} & Арксинус Real. \\
+RACOS & \code{0x2024} & \code{Rdst, Rsrc} & Арккосинус Real. \\
+RATAN & \code{0x2025} & \code{Rdst, Rsrc} & Арктангенс Real. \\
+RLOG & \code{0x2030} & \code{Rdst, Rsrc} & Натуральный логарифм Real. \\
+RLOG10 & \code{0x2031} & \code{Rdst, Rsrc} & Десятичный логарифм Real. \\
+RLOG2 & \code{0x2032} & \code{Rdst, Rsrc} & Двоичный логарифм Real. \\
+REXP & \code{0x2033} & \code{Rdst, Rsrc} & Экспонента $e^x$. \\
+RSINH & \code{0x2040} & \code{Rdst, Rsrc} & Гиперболический синус. \\
+RCOSH & \code{0x2041} & \code{Rdst, Rsrc} & Гиперболический косинус. \\
+RTANH & \code{0x2042} & \code{Rdst, Rsrc} & Гиперболический тангенс. \\
+RPOW & \code{0x2050} & \code{Rdst, Ra, Rb} & Возводит Real a в степень Real b. \\
+RHYPOT & \code{0x2051} & \code{Rdst, Ra, Rb} & Вычисляет hypot(a,b) в Real domain. \\
+RATAN2 & \code{0x2052} & \code{Rdst, Ra, Rb} & Вычисляет atan2(y,x) в Real domain. \\
+RNEG & \code{0x2060} & \code{Rdst, Rsrc} & Изменяет знак Real. \\
+RABS & \code{0x2061} & \code{Rdst, Rsrc} & Модуль Real. \\
+RCMP & \code{0x2062} & \code{r64 dst, Ra, Rb} & Сравнивает Real a/b и возвращает classification \{-2,-1,0,+1\} в r64. \\
+RCPY & \code{0x2063} & \code{Rdst, Rsrc} & Копирует Real object совместимой physical width. \\
+RCVT & \code{0x2064} & \code{Rdst, Rsrc} & Преобразует Real между поддерживаемыми precision widths; conversion PSW-neutral. \\
+RFLOOR & \code{0x2070} & \code{Rdst, Rsrc} & Округляет Real вниз. \\
+RCEIL & \code{0x2071} & \code{Rdst, Rsrc} & Округляет Real вверх. \\
+RROUND & \code{0x2072} & \code{Rdst, Rsrc} & Округляет Real по правилам LibMPU. \\
+RFREXP & \code{0x2073} & \code{Rfrac, Iexp, Rsrc} & Разлагает Real на significand и integer exponent. \\
+RLDEXP & \code{0x2074} & \code{Rdst, Rsrc, Iexp} & Формирует Real как source, умноженный на степень двойки с integer exponent. \\
+RLOGB & \code{0x2075} & \code{Idst, Rsrc} & Возвращает integer exponent/classification для Real source. \\
+RMODF & \code{0x2076} & \code{Rfrac, Rint, Rsrc} & Разделяет Real на fractional и integral parts. \\
+RREMAIN & \code{0x2077} & \code{Rdst, Ra, Rb} & IEEE/LibMPU-style remainder для двух Real operands. \\
+RLOG1P & \code{0x2080} & \code{Rdst, Rsrc} & Вычисляет log(1+x) с Real semantics. \\
+REXPM1 & \code{0x2081} & \code{Rdst, Rsrc} & Вычисляет exp(x)-1. \\
+RASINH & \code{0x2082} & \code{Rdst, Rsrc} & Обратный гиперболический синус. \\
+RACOSH & \code{0x2083} & \code{Rdst, Rsrc} & Обратный гиперболический косинус. \\
+RATANH & \code{0x2084} & \code{Rdst, Rsrc} & Обратный гиперболический тангенс. \\
+ITOR & \code{0x2090} & \code{Rdst, Isrc} & Преобразует signed integer в Real; conversion PSW-neutral. \\
+UITOR & \code{0x2091} & \code{Rdst, Isrc} & Преобразует unsigned integer в Real; conversion PSW-neutral. \\
+RTOI & \code{0x2092} & \code{Idst, Rfrac, Rsrc} & Преобразует Real в signed integer destination и отдельно возвращает fractional remainder. \\
+RTOUI & \code{0x2093} & \code{Idst, Rfrac, Rsrc} & Преобразует Real в unsigned integer destination и отдельно возвращает fractional remainder. \\
+RISNEG & \code{0x20a0} & \code{r64 dst, Rsrc} & Возвращает r64 predicate: является ли Real отрицательным. \\
+RSIGN & \code{0x20a1} & \code{r64 dst, Rsrc} & Возвращает signed Real classification code \{-3..+1\} в r64. \\
+RISIND & \code{0x20a2} & \code{r64 dst, Rsrc} & Возвращает predicate для indeterminate Real representation. \\
+RISNAN & \code{0x20a3} & \code{r64 dst, Rsrc} & Возвращает predicate для NaN. \\
+RISNANMAX & \code{0x20a4} & \code{r64 dst, Rsrc} & Возвращает predicate для NaN max-class representation. \\
+RISNANMIN & \code{0x20a5} & \code{r64 dst, Rsrc} & Возвращает predicate для NaN min-class representation. \\
+RISINF & \code{0x20a6} & \code{r64 dst, Rsrc} & Возвращает predicate для infinity. \\
+RISSIGNULL & \code{0x20a7} & \code{r64 dst, Rsrc} & Возвращает predicate для signed null/zero classification. \\
+RCONST & \code{0x2100} & \code{Rdst, CONST8} & Загружает предопределённую математическую Real constant по CONST8 selector. \\
+CADD & \code{0x3000} & \code{Cdst, Ca, Cb} & Сложение Complex. \\
+CSUB & \code{0x3001} & \code{Cdst, Ca, Cb} & Вычитание Complex. \\
+CMUL & \code{0x3002} & \code{Cdst, Ca, Cb} & Умножение Complex. \\
+CDIV & \code{0x3003} & \code{Cdst, Ca, Cb} & Деление Complex. \\
+CEXP & \code{0x3020} & \code{Cdst, Csrc} & Комплексная экспонента. \\
+CSIN & \code{0x3021} & \code{Cdst, Csrc} & Комплексный синус. \\
+CCOS & \code{0x3022} & \code{Cdst, Csrc} & Комплексный косинус. \\
+CSINH & \code{0x3023} & \code{Cdst, Csrc} & Комплексный гиперболический синус. \\
+CCOSH & \code{0x3024} & \code{Cdst, Csrc} & Комплексный гиперболический косинус. \\
+CLOG & \code{0x3025} & \code{Cdst, Csrc} & Комплексный натуральный логарифм. \\
+CSQRT & \code{0x3026} & \code{Cdst, Csrc} & Комплексный квадратный корень. \\
+CPOW & \code{0x3050} & \code{Cdst, Ca, Cb} & Комплексное возведение в степень. \\
+CREAL & \code{0x3060} & \code{Rdst, Csrc} & Извлекает real component Complex object. \\
+CIMAG & \code{0x3061} & \code{Rdst, Csrc} & Извлекает imaginary component. \\
+CRTOC & \code{0x3062} & \code{Cdst, Rsrc} & Преобразует Real в Complex с нулевой imaginary component; conversion PSW-neutral. \\
+CGEN & \code{0x3063} & \code{Cdst, Rre, Rim} & Создаёт Complex из real и imaginary components. \\
+CPOLAR & \code{0x3064} & \code{Cdst, Rrho, Rtheta} & Создаёт Complex по polar representation rho/theta. \\
+CCONJ & \code{0x3065} & \code{Cdst, Csrc} & Комплексное сопряжение. \\
+CABS & \code{0x3066} & \code{Rdst, Csrc} & Возвращает абсолютную величину Complex. \\
+CNORM & \code{0x3067} & \code{Rdst, Csrc} & Возвращает квадрат нормы Complex. \\
+CARG & \code{0x3068} & \code{Rdst, Csrc} & Возвращает аргумент/phase Complex. \\
+CISEQ & \code{0x3070} & \code{r64 dst, Ca, Cb} & Возвращает predicate равенства двух Complex. \\
+CISNE & \code{0x3071} & \code{r64 dst, Ca, Cb} & Возвращает predicate неравенства двух Complex. \\
+CCPY & \code{0x3072} & \code{Cdst, Csrc} & Копирует Complex object совместимой physical width. \\
+CCVT & \code{0x3073} & \code{Cdst, Csrc} & Преобразует Complex между precision widths; conversion PSW-neutral. \\
+JMP & \code{0x4000} & \code{CODE64 target} & Безусловный прямой переход на PROGRAM address. \\
+JSET & \code{0x4001} & \code{PSWBIT8, CODE64} & Переходит, если выбранный branchable PSW bit установлен. \\
+JCLR & \code{0x4002} & \code{PSWBIT8, CODE64} & Переходит, если выбранный PSW bit очищен. \\
+JMPP & \code{0x4003} & \code{r64 ptr} & Косвенный переход через PROGRAM PTR64. \\
+CALL & \code{0x4010} & \code{CODE64 target} & Кладёт address следующей инструкции в STACK и передаёт управление target. \\
+RET & \code{0x4011} & \code{---} & Извлекает return PC из STACK и возвращается из CALL. \\
+CALLP & \code{0x4012} & \code{r64 ptr} & Косвенный CALL через PROGRAM PTR64 с push return PC. \\
+PUSH & \code{0x5000} & \code{R/C src} & Кладёт register object в STACK и изменяет SP согласно stack ABI. \\
+POP & \code{0x5001} & \code{R/C dst} & Извлекает register object из STACK. \\
+LDSP & \code{0x5010} & \code{R/C dst, OFF64} & Читает object по адресу SP + signed byte offset. \\
+STSP & \code{0x5011} & \code{OFF64, R/C src} & Записывает object по адресу SP + signed byte offset. \\
+ADJSP & \code{0x5020} & \code{OFF64} & Изменяет SP на signed byte offset с проверкой STACK bounds/alignment policy. \\
+PUSHFP & \code{0x5030} & \code{---} & Сохраняет текущий 64-bit FP в STACK. \\
+SETFP & \code{0x5031} & \code{---} & Устанавливает FP = SP. \\
+RESTSP & \code{0x5032} & \code{---} & Восстанавливает SP = FP. \\
+POPFP & \code{0x5033} & \code{---} & Извлекает 64-bit FP из STACK. \\
+LDFP & \code{0x5040} & \code{R/C dst, OFF64} & Читает object по адресу FP + signed byte offset. \\
+STFP & \code{0x5041} & \code{OFF64, R/C src} & Записывает object по адресу FP + signed byte offset. \\
+LEAFP & \code{0x5042} & \code{r64 dst, OFF64} & Формирует STACK PTR64 на FP + signed byte offset. \\
+SETSP & \code{0x5050} & \code{r64 ptr} & Устанавливает SP из валидного STACK PTR64. \\
+\bottomrule
+\end{longtable}