Архитектура фон НейманаДалее, будем хранить инструкции и данные в одном ОЗУ. Такой способ хранения является отличительным признаком
архитектуры фон Неймана.
В первых четырех разрядах восьмиразрядной ячейки памяти будет храниться команда, во вторых четырех разрядах будет храниться адрес (https://ru.wikipedia.org/wiki/%D0%90%D0%B4%D1%80%D0%B5%D1%81%D0%B0%D1%86%D0%B8%D1%8F_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8#%D0%9F%D1%80%D1%8F%D0%BC%D0%B0%D1%8F_%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%B0%D1%86%D0%B8%D1%8F -> прямая адресация).
Будем загружать адрес и команду в отдельные регистры, а затем с помощью мультиплексора переходить по сохраненному адресу. Для записи данных в ОЗУ будем сначала загружать данные во временный регистр Temp (иначе в ОЗУ запишутся инструкции, а не данные), а потом в аккумулятор Асс. Запись данных в Temp и Асс будем производить по заднему фронту.
Будем складывать, например, числа 2 и 3, которые лежат в ячейках 8 и 9, а сохранять результат в ячейку с адресом a.

Добавим также возможность совершать безусловные переходы.
Реализуем устройство, в котором будет выполняться всего одна команда — команда безусловного перехода. Для этого на счетчик, генерирующий адрес, будем отправлять четыре младших разряда (собственно, адрес), а на порт загрузки будем подавать команду, хранящуюся в старших разрядах ячейки памяти.
Например, для прыжка в ячейку с адресом 2 используется команда 82.

Добавим команду безусловного перехода в предыдущую схему.

Вообще, на geektimes уже была
статья, посвященная проектированию CPU в Logisim.
Все схемы, представленные выше, можно скачать
одним файлом.
Logisim можно скачать
здесь.
ТерминалДобавим к схеме терминал для демонстрации того, как ассемблерные инструкции преобразуются в машинный код.

Добавим
конечный автомат для обработки последовательностей поступающих символов.
Семизначный код буквы «i» равняется
1101001Семизначный код буквы «n» равняется
1101110Семизначный код буквы «p» равняется
1110000Для выделения конкретной буквы из потока символов будем использовать
компаратор. В начальном состоянии компаратор сравнивает поступивший символ с семизначным кодом буквы «i»

Автомат переходит в следующее состояние, если после буквы «i» поступает буква «n»

Автомат переходит в следующее состояние, если после букы «i», а затем «n» поступает буква «p»

Добавим команду out

Подробнее о командах
inp и
out можно прочитать в следующей части.