Newer
Older
* УМ-3 (трехадресная)
* УМ-2 (двухадресная)
* УМ-П (с переменным форматом команд)
* УМ-1 (одноадресная)
* УМ-С (стековая)
* УМ-Р (решистровая)
* УМ с модификацией адресов ???
* Работа с плавающей запятой
* Загрузка программы и данных из файла
## Модельная машина
Модельная машина - это чистая архитектурная концепция, позволяющая понять
логику функционирования центральных процессоров. По своей структуре она близка
к компьютерам первого поколения. Подробнее читайте по ссылкам внизу.
## Внутреннее устройство
Данная реализация модельной машины состоит из классов, разбитых на
файлы-модули:
* `memory.py` - память; делится на два класса: `регистровая` и `оперативная`;
оперативная делится на `little-endian` и `big-endian`
* `numeric.py` - целочисленная арифметика с фиксированным числом двоичных
знаков
* `alu.py` - арифметико-логическое устройство, работает с четко
специализированными регистрами: `R1`, `R2`, `S`, `FLAGS` и `IP`.
* `cu.py` *не реализованно* - контролирующее устройство, выполняющее считывание команд из памяти
и запускающее необходимые методы в арифметико-логическом устройстве
* `io.py` *не реализованно* - устройство ввода-вывода
* `cpu.py` *не реализованно* - финальное объединение устройств в единое целое
### memory.py
`AbstractMemory` - класс абстрактной памяти, предоставляющий интерфейс для
надежной связи частей компьютера. Основные методы: `fetch` и `put`, которые
принимаютна вход адрес в памяти и количество битов, с которыми нужно работать,
количество должно быть кратно размеру ячейки (слова). Строго
рекомендуется их использовать во всех унаследованных классах.
`RandomAccessMemory` - класс, реализующий память прямого доступа. При
инициализации указывается размер машинного слова и количество этих слов. Если
`is_protected=True`, то при попытке считывания из неинициализированной ячейки
будет выброшено исключение, иначе, метод `fetch` вернет нуль.
`RegisterMemory` - класс, реализующий регистровую память. При инициализации
ему дается список регистров. По умолчанию регистры заполняются нулями.
### numeric.py
Класс Integer реализует целочисленную арифметику фиксированной длины.
Поддерживаемые операторы: `+`, `-`, `*`, `/`, `%`, `==`, `!=`. Плюс методы
`get_value` и `get_data`. Деление работает согласно такому алгоритму:
div = abs(a) // abs(b)
if a * b < 0: div *= -1
mod = a - b * div
## References
* E. А. Бордаченкова - "Модельные ЭВМ" <http://al.cs.msu.su/files/ModComp.pdf>
* Е. А. Бордаченкова - "Архитектура ЭВМ. Учебные машины. Методическое пособие"
<http://al.cs.msu.su/files/bordachenkova.architecture.model.machines.2010.doc>
* В. Г. Баула - "Введение в архитектуру ЭВМ и системы программирования"
<http://arch.cs.msu.ru/Page2.htm>
* <http://cmcmsu.no-ip.info/1course/um3.command.set.htm>