diff options
| author | kx <kx@radix-linux.su> | 2026-10-09 18:00:15 +0300 |
|---|---|---|
| committer | kx <kx@radix-linux.su> | 2026-10-09 18:00:15 +0300 |
| commit | 065da3509019b15dd0e678072e6be629e5330bef (patch) | |
| tree | 69c934c9e786ac048b4fbe8f4c4c5571661521f4 /doc/src/libmcpu-opcode-table.tex | |
| parent | d130fe27fa753be02ed76fd9b277aa3c3d928eb9 (diff) | |
| download | libmcpu-0.4.0.tar.xz | |
Version 0.4.00.4.0
Diffstat (limited to 'doc/src/libmcpu-opcode-table.tex')
| -rw-r--r-- | doc/src/libmcpu-opcode-table.tex | 174 |
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} |
