Регистры:
-4
N: триада из ячейки памяти с адресом DPn (см. ниже);
-3
O: триада из ячейки памяти с адресом DPo (см. ниже);
-2
P: триада из ячейки памяти с адресом DPp (см. ниже);
-1
F: регистр флага (см. ниже);
0
A: регистр аккумулятора;
+1
B: дополнительный регистр;
+2
L: младшая триада текущего регистра DP (см. ниже);
+3
M: средняя триада текущего регистра DP (см. ниже);
+4
H: старшая триада текущего регистра DP (см. ниже).
Регистр F состоит из 3 троичных флагов:
- Старший трит: RSF (Result Sign Flag) - флаг знака результата
- Средний трит: DPF (Data Pointer Flag) - флаг указателя данных
- Младший трит: BCF (Borrow Carry Flag) - флаг переноса-заёма
Также существют три 9-тритовых регистра указателя данных (data pointer = DP) - DPn, DPo, DPp, доступные через имена регистров L/M/H когда флаг DPF имеет значение N, O, P соответственно.
Теневой регистр программного счётчика (program counter = PC) напрямую недоступен - только через команды копирования между PC и текущим DP.
Полный список команд:
#NNN (-13)
SAN - сохранить регистр A в регистре N (ячейка памяти с адресом DPn);
#NNO (-12)
SAO - сохранить регистр A в регистре O (ячейка памяти с адресом DPo);
#NNP (-11)
SAP - сохранить регистр A в регистре P (ячейка памяти с адресом DPp);
#NON (-10)
SAF - сохранить регистр A в регистре F;
#NOO (-9)
SPCD - сохранить PC в текущем регистре DP;
#NOP (-8)
SAB - сохранить регистр A в регистре B;
#NPN (-7)
SAL - сохранить регистр A в регистре L (младшая триада текущего DP);
#NPO (-6)
SAM - сохранить регистр A в регистре M (средняя триада текущего DP);
#NPP (-5)
SAH - сохранить регистр A в регистре H (старшая триада текущего DP);
#ONN (-4)
RLA - сдвинуть регистр A влево через флаг BCF;
#ONO (-3)
ADD - сложить регистр A с регистром B и флагом BCF, сохранить результат в A и флаге BCF, установить флаг знака RSF;
#ONP (-2)
RRA - сдвинуть регистр A вправо через флаг BCF;
#OON (-1)
LAI # - загрузить регистр A данными из триады идущей следом;
#OOO (0)
ADI # - сложить регистр A с данными из триады идущей следом и флагом BCF, сохранить результат в регистре A и флаге BCF, установить флаг знака RSF;
#OOP (1)
OPA # - выполнить унарную потритовую операцию над регистром A (функция устанавливается данными из триады идущей следом), установить флаг знака RSF;
#OPN (2)
LDI # # # - загрузить текущий регистр DP данными из 3 триад идущих следом (старшая, средняя, младшая);
#OPO (3)
JMP # # # - передать управление на адрес, взятый из 3 триад идущих следом (старшая, средняя, младшая);
#OPP (4)
OPB # # # - выполнить бинарную потритовую операцию над регистрами A и B, сохранить результат в регистре A (функция устанавливается данными из 3 триад идущих следом), установить флаг знака RSF;
#PNN (5)
LAN - загрузить регистр A из регистра N (ячейка памяти с адресом DPn);
#PNO (6)
LAO - загрузить регистр A из регистра O (ячейка памяти с адресом DPo);
#PNP (7)
LAP - загрузить регистр A из регистра P (ячейка памяти с адресом DPp);
#PON (8)
LAF - загрузить регистр A из регистра F;
#POO (9)
LPCD - загрузить PC из текущего регистра DP;
#POP (10)
LAB - загрузить регистр A из регистра B;
#PPN (11)
LAL - загрузить регистр A из регистра L (младшая триада текущего DP);
#PPO (12)
LAM - загрузить регистр A из регистра M (средняя триада текущего DP);
#PPP (13)
LAH - загрузить регистр A из регистра H (старшая триада текущего DP).
P.P.S. см. http://ternary.info/wiki/index.php?n=Alpha.InstructionSet