Удалось продвинуться в концепции благодаря нейросетевым сессиям.
Научить нейросеть корректно генерировать код, увы, так и не удалось.
Бот это объясняет тем, что:
Не имеет в своей БД аналогов
Код является контекстно-зависимым
WYSIWISC - целая философия
Например, рассмотрим пример кодирования выражения
B12 |= (B34 ^= C56 & A78) + (A98 - C765)
Атомарное кодирование:
BA CTX B,A
B1 REG B1
A7 MOV B1,A7
A8 MOV B1,A78
1F MOV A1,B1 ; TMP_A1 = A78
C5 MOV B1,C5
C6 MOV B1,C56
1C AND B1,A1 ; TMP_B1 = C56 & TMP_A1
1F MOV A1,B1 ; TMP_A1 = TMP_B1
B3 REG B3
B4 REG B34
1E EOR B34,A1 ; B34 ^= TMP_A1
CC CTX C,C
C1 REG C1
7F MOV C1,C7
6F MOV C1,C76
5F MOV C1,C765 ; TMP_C1 = C765
C2 REG C2
A9 MOV C2,A9
A8 MOV C2,A98 ; TMP_C2 = A98
CE CLC
1B SBB C2,C1 ; TMP_C2 -= TMP_C1
C1 REG C1
B3 MOV C1,B3
B4 MOV C1,B34 ; TMP_C1 = B34
CE CLC
2A ADC C1,C2 ; TMP_C1 += TMP_C2
BC CTX B,C
B1 REG B1
B2 REG B12
1D OR B12,C1 ; B12 |= TMP_C1
Контекстное кодирование:
BA B1 CTX B1,A
A7 A8 MOV B1,A78
1F MOV A1,B1 ; TMP_A1 = A78
C5 C6 MOV B1,C56
1C AND B1,A1 ; TMP_B1 = C56 & TMP_A1
1F MOV A1,B1 ; TMP_A1 = TMP_B1
B3 B4 REG B34
1E EOR B34,A1 ; B34 ^= TMP_A1
CC C1 CTX C1,C
7F 6F 5F MOV C1,C765 ; TMP_C1 = C765
C2 REG C2
A9 A8 MOV C2,A98 ; TMP_C2 = A98
CE CLC
1B SBB C2,C1 ; TMP_C2 -= TMP_C1
C1 REG C1
B3 B4 MOV C1,B34
CE CLC
2A ADC C1,C2 ; TMP_C1 += TMP_C2
BC B1 B2 CTX B12,C
1D OR B12,C1 ; B12 |= TMP_C1
Линейное кодирование:
BA B1 A7 A8 MOV B1,A78
1F MOV A1,B1
C5 C6 MOV B1,C56
1C AND B1,A1
1F MOV A1,B1
B3 B4 1E EOR B34,A1
CC C1 7F 6F 5F MOV C1,C765
C2 A9 A8 MOV C2,A98
CE 1B SUB C2,C1
C1 B3 B4 MOV C1,B34
CE 2A ADD C1,C2
BC B1 B2 1D OR B12,C1
Тем не менее, удалось решить давнюю проблему, концептуальную.
Так называемые "маргиналы" корректнее именовать делегатами
Которые можно использовать и для отладки кода
1100 90 90 80 80 12 34 00 DEF 98#D1+D3+24 ; D98 = 0x1104
1107 70 70 60 60 50 50 00 DBG 765# ; TRACE(D765)
110E BC B1 90 90 80 80 7E EOR B1,98#,C7 ; B1 = [D1+D3+24] ^ C7
Конечно, так с ходу вникнуть и понять эти три строчки сложно. Попробую разъяснить:
«90_90 80_80» - делегат, а «00» - «HLT», который под префиксами работает дефиникатором
«70_70 60_60 50_50» - делегат, а «00» - «HLT», который под делигатом работает трассировщиком
«90_90 80_80» - делегат, который подставляет вектор удалённо