Есть еще одно специфическое пожелание, но боюсь что оно слишком специфическое.
Сделать аппаратную поддержку замены по таблице для ГОСТ 28147-89.
Операция следующая - на входе в аккумуляторе число (2 или 4 тетрады), в DPTR - указатель на таблицу длиной 16 байт или слов.
Дальше младшая тетрада меняется на младшую тетраду той строки таблицы, номер которой равен содержимому этой тетрады, старшая - на старшую.
За один такт обращения к памяти это не сделать, тогда можно 2 команды на каждую тетраду. На псевдоассемблере 51-го будет что-то типа:
mov dptr,#table
mov a,val
anl a,#0Fh
mov a,@a+dptr
anl a,#0Fh
mov temp,a
mov a,val
swap a
anl a,#0Fh
mov a,@a+dptr
anl a,#0F0h
orl a,temp
И такая лабуда 4*32 раза для каждых 8 байт шифрования. Плюс еще циклический сдвиг 32 бит на 11 разрядов.
На простом 51-м это делается очень медленно.
Короче, если кто-то вдруг захочет реализовать ГОСТ 28147-89 на этом процессоре, то я бы добавил в него пару команд:
xlatl:
acc[7..4] = acc[7..4]
acc[3..0] = mem[acc[3..0] + dptr][3..0]
xlath:
acc[7..4] = mem[acc[7..4] + dptr][7..4]
acc[3..0] = acc[3..0]