Технотрек: Промышленное программирование. Занятие 05: The Процессор

Oct 18, 2016 18:16


(Копия блога на Технотреке)

Summary

На этом занятии мы применяли стек для вычислений, записанных в обратной польской записи. Это простая вещь, но мы на этом не остановились, и, пройдя несколько итераций разработки, сконструировали процессор, работающий по загружаемым в него программам. Наш процессор реализован в виде структуры и состоит из стека для временных данных для вычислений, нескольких регистров и оперативной памяти, в которой размещается программа. По ходу дела мы разобрали несколько простых, но важных моментов:
  1. В любой непонятной ситуации делай новую структуру :)
  2. Для процессора коды команд лучше, чем их названия;
  3. Для человека названия команд лучше, чем их коды;
  4. Противоречие п.2 - п.3 решается введением понятия компиляции. Радостные, пишем ассемблер и дизассемблер;
  5. Один только стек для хранения данных неудобен, вводим регистры. Чтобы доступ был легок и быстр, переменную клади в регистр;
  6. Операции с регистрами изменили работу команд, вводим заголовок исполняемого байт-кода, содержащий версию системы команд.
  7. Задумались о сравнении величин, условных операторах (переходах) и о том, как указывать место назначения перехода. Пока остановились на том, что просто будем писать адрес перехода, что, конечно, неудобно.
Домашнее задание

Последовательно, итеративно, шаг за шагом, step-by-step, pеализуйте:

1. Версию процессора, работающего с именами команд (push, pop, add, sub, mul, div, sin, cos, sqrt). Команды достают свои аргументы из стека (кроме push) и кладут в стек результат операции;

2. Версию процессора, работающего с кодами команд, загружаемых в оперативную память процессора, ассемблер и дизассемблер для него;

3. Версию процессора с регистрами (ax, bx, cx, dx, whatever). Очень советую тут оглядеться вокруг и посмотреть, какие есть вообще процессорные архитектуры, и, может быть, как-то по-своему обойтись с регистрами;

4*. Версию процессора с возможностью брать данные из оперативной памяти и класть их в нее;

5. Версию процессора с условными и безусловными переходами. Команды переходов такие:

jmp - jump, безусловный переход
je - jump if equal, переход, если числа равны
jne - jump if not equal, переход, если числа не равны
ja - jump if above, переход, если одно число больше другого
jae - jump if above or equal, переход, если одно число больше или равно другому
jb - jump if below, переход, если одно число меньше другого
jbe - jump if below or equal, переход, если одно число меньше или равно другому
jm - jump maybe (jump там обозначается как branch)
jt - jump on tuesdays (там же)6. Юнит-тесты для процессора. Их проще всего организовать как набор файлов, в которых пишутся тестовые программы и ожидаемые ответы;

7. Попробуйте поломать процессор, проверьте его на прочность. Я имею в виду наш софт-процессор, не надо ломать процессор на материнской плате. :)

***

Удачи, и May the Source be with you! :)

Технотрек

Previous post Next post
Up