Эмуляторы регистровых процессоров

13. [Регистровый интерпретатор.] Реализуйте эмулятор процессора с N регистрами (N от 4 до 8, но можно и принципиально большое число) и системой команд пересылки данных MOV <регистр> <регистр или число> (пересылает справа налево) и арифметики ADD, SUB, MUL, DIV (сложить, вычесть, умножить, разделить два регистра и результат записать в первый из них; действия будут затирать один из операндов), SQRT (квадратный корень из регистра), IN (ввести число), OUT (вывести) и STOP. См. замечания к задаче 1. Для проверки вычислите корень какого-нибудь квадратного уравнения. Вы помучаетесь, но многие говорят, что регистровые процессоры быстрее стековых.

14. [Все круче и круче.] Выполняются задачи 2-11 с учетом задачи 13. Когда будете писать программы для своего процессора, заметьте, как тяжело бывает иногда с регистрами и как часто хочется побольше дополнительных переменных.

15. [Оптимизация.] Подумайте, как можно оптимизировать работу с регистрами при вычислении выражений и выполнении типовых операций (циклы, передача параметров в процедуры и т.п.).

15. [Трехадресный код.] Реализуйте такие возможности: пусть в командах можно будет указывать до трех операндов (где находятся данные и куда положить результат). Операнды могут быть регистрами, константами или адресами памяти.

16. [Трехадресный код с косвенной адресацией.] Добавьте к задаче 15 косвенную адресацию.

17. [Без памяти!] Замените все ячейки памяти большим количеством регистров (эту задачу можно делать вместо переделки задачи 8).

18. [Минимальная система команд.] Подумайте, какова могла бы быть минимальная система команд для Вашего процессора.

19. [Высокий уровень.] Вам не надоело еще писать на ассемблере? Подумайте, как можно транслировать язык высокого уровня (какое-нибудь его сильно ограниченное подмножество) для Вашего процессора.