Да оно везде так - никто в здравом уме не будет раскошеливаться на мифический "вычитатель" вместо дешёвой логической функции получения дополнительного кода.
Только разве в софтядрах по незнанию.
- - - Добавлено - - -
Не жадничай, делай как в микроконтроллерах, память нонче недорога.
А каков размер адресного пространства планируется?
Если меньше 4 гигабайт, то всё не так уж и плохо - скажем, если ограничится 1Tb(Хватит всем!(с)) то 2 старших разряда уйдут на кодирование инструкций загрузки аккумулятора (в пределах двух триллионов (например 1xxx.. - загрузка числа в аккумулятор).
Ещё 2 разряда можно отвести на инструкции типа CALL и JP (скажем 01xx... в этом случае 00xx... укажут на следующий тип инструкций). Или 3 разряда, если переходы и вызовы подпрограмм сделать только относительными, правда это не имеет смысла, так как нужно ещё задать направление относительно текущего адреса)).
А дальше уже по вкусу, в 28 бит влезет мнооого.
Последний раз редактировалось omercury; 26.07.2020 в 16:15.
Фиксированная длина инструкций.
В предыдущем посте описан случай с 31 битом для констант и 30 битами для адресов (для 32-битных команд кратность адресации 4, доступ к памяти сохраняется побайтный - можно даже восьмибитку делать)))
- - - Добавлено - - -
Это уже фишки DSP, в данном случае не нужны особо, если интересно, посмотри например эти, достаточно простые и понятно расписаны.
Ну и пёс с ними, "лишними" битами. Зато логика работы намного проще.
Сейчас хард намного дешевле софта.
Побереги своё время.
Если его делать так
то много.
Не с той стороны начал.
Разбей опкоды на биты, например:
{тип команды, код команды, источник, приёмник}
и получишь 3 декодера, работающих параллельно (по-факту не совсем параллельно, но значительно быстрей общего большого декодера, в котором будет полно длинных цепочек из элементарной логики). Да и поменьше он будет.
UPD
Помнишь ограничение в ~50МГц для t80/tv80 ?
причина как раз в этом.
Последний раз редактировалось omercury; 26.07.2020 в 19:15. Причина: дописал
С той, с той Это и есть "тип команды, код команды"...
А 32-битный BC как загружать, тоже через аккумулятор? Две инструкции, 31 бит загружен, ещё и аккумулятор испорчен. А есть ещё 16-битный BC.
У меня грузятся отдельно нижние 16 бит, отдельно верхние, причём это не только ld, но и add, sub, xor... То есть 32 бита add это 16-битные add и adc, с коррекцией флагов. Или вообще один add, если 32 бита можно упаковать в 16. И эта же инструкция для 8 бит, только один байт не используется. И эта же инструкция добавлением одного бита превращается в bit, set, res любой разрядности 8/16/32. И inc/dec туда же.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)